- 機(jī)器學(xué)習(xí)流水線實(shí)戰(zhàn)
- (美)漢內(nèi)斯·哈普克 凱瑟琳·納爾遜
- 4627字
- 2021-11-22 15:28:41
前言
現(xiàn)在所有人都在討論機(jī)器學(xué)習(xí),它正從一項(xiàng)學(xué)術(shù)研究轉(zhuǎn)變成最令人興奮的技術(shù)之一。從理解自動(dòng)駕駛汽車采集的視頻流到個(gè)性化藥方,機(jī)器學(xué)習(xí)在每個(gè)領(lǐng)域里都變得更加重要。雖然模型架構(gòu)和設(shè)計(jì)理念頗受關(guān)注,但是機(jī)器學(xué)習(xí)還沒有建立起軟件行業(yè)在過去 20 年中建立的標(biāo)準(zhǔn)化流程。本書將展示如何創(chuàng)建標(biāo)準(zhǔn)的自動(dòng)化機(jī)器學(xué)習(xí)系統(tǒng),并用它產(chǎn)出可復(fù)現(xiàn)的模型。
什么是機(jī)器學(xué)習(xí)流水線
機(jī)器學(xué)習(xí)領(lǐng)域在過去幾年的進(jìn)展令人吃驚。隨著圖形處理單元(graphics processing unit,GPU)、BERT、生成對抗網(wǎng)絡(luò)(generative adversarial network,GAN)、深度卷積 GAN 等深度學(xué)習(xí)概念的流行,AI 項(xiàng)目的數(shù)量正在飛速增長,同時(shí)出現(xiàn)了大量的 AI 初創(chuàng)公司。很多商業(yè)組織越來越頻繁地用最新的機(jī)器學(xué)習(xí)概念來解決各種業(yè)務(wù)問題。在尋找最佳機(jī)器學(xué)習(xí)解決方案的狂潮中,我們留意到了大家經(jīng)常忽視的一些問題。對于模型的加速、復(fù)用、管理和部署等方面的工具和概念,數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)工程師往往缺乏足夠的信息來源。他們需要標(biāo)準(zhǔn)化的機(jī)器學(xué)習(xí)流水線來完成這些工作。
機(jī)器學(xué)習(xí)流水線實(shí)現(xiàn)了加速、復(fù)用、管理和部署機(jī)器學(xué)習(xí)模型的整個(gè)流程,并將流程標(biāo)準(zhǔn)化。軟件工程在 10 多年前通過持續(xù)集成(continuous integration,CI)和持續(xù)部署(continuous deployment,CD)建立了類似的標(biāo)準(zhǔn)化流程。在過去,測試和部署 Web 應(yīng)用是非常煩瑣的工作,需要 DevOps 工程師和軟件開發(fā)人員合作完成。在今天,這些工作被一些工具和概念大大地簡化了,一個(gè)應(yīng)用的測試和部署可以在幾分鐘內(nèi)可靠地完成。數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)工程師可以從軟件工程的工作流中學(xué)到很多有用的知識(shí)。本書旨在帶領(lǐng)你從頭到尾地了解整條機(jī)器學(xué)習(xí)流水線,進(jìn)而為機(jī)器學(xué)習(xí)項(xiàng)目的標(biāo)準(zhǔn)化貢獻(xiàn)綿薄之力。
根據(jù)我們的經(jīng)驗(yàn),大多數(shù)需要將模型部署到生產(chǎn)環(huán)境中的數(shù)據(jù)科學(xué)項(xiàng)目是由小團(tuán)隊(duì)主導(dǎo)的。小團(tuán)隊(duì)很難從零開發(fā)自己的機(jī)器學(xué)習(xí)流水線,這會(huì)導(dǎo)致機(jī)器學(xué)習(xí)項(xiàng)目變成一場有始無終的鬧劇。模型的性能可能會(huì)隨著時(shí)間的推移而下降,數(shù)據(jù)科學(xué)家要花大量時(shí)間去修復(fù)數(shù)據(jù)漂移造成的問題,或者模型并沒有被廣泛使用。自動(dòng)、可復(fù)現(xiàn)的流水線可以減少部署模型的工作量。這條流水線應(yīng)該包括以下步驟:
● 有效地對數(shù)據(jù)進(jìn)行版本控制,并且新數(shù)據(jù)會(huì)觸發(fā)新模型訓(xùn)練任務(wù);
● 校驗(yàn)收到的數(shù)據(jù),對比數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)漂移;
● 為模型的訓(xùn)練和驗(yàn)證提供高效的數(shù)據(jù)預(yù)處理;
● 高效地訓(xùn)練機(jī)器學(xué)習(xí)模型;
● 跟蹤模型訓(xùn)練進(jìn)度;
● 分析并驗(yàn)證訓(xùn)練后或微調(diào)后的模型;
● 部署驗(yàn)證過的模型;
● 擴(kuò)容部署后的模型服務(wù);
● 在反饋循環(huán)中記錄新訓(xùn)練數(shù)據(jù)和模型的性能指標(biāo)。
這個(gè)列表不包含一個(gè)很重要的步驟:選擇模型架構(gòu)。我們假設(shè)你對此步驟已經(jīng)非常了解。如果剛開始接觸機(jī)器學(xué)習(xí)或者深度學(xué)習(xí),那么以下資源將對你大有幫助:
● Fundamentals of Deep Learning: Designing Next-Generation Machine Intelligence Algorithms;
● 《機(jī)器學(xué)習(xí)實(shí)戰(zhàn):基于 Scikit-Learn、Keras 和 TensorFlow(第 2 版)》。
讀者對象
本書主要針對想進(jìn)一步產(chǎn)品化數(shù)據(jù)科學(xué)項(xiàng)目的數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)工程師。在讀本書時(shí),你需要熟悉基本的機(jī)器學(xué)習(xí)概念,并了解至少一個(gè)機(jī)器學(xué)習(xí)框架(例如 PyTorch、TensorFlow 或 Keras)。本書的機(jī)器學(xué)習(xí)示例基于 TensorFlow 和 Keras 編寫,但書中的核心概念適用于任何其他框架。
本書也適合想在組織內(nèi)部加速數(shù)據(jù)科學(xué)項(xiàng)目的數(shù)據(jù)科學(xué)項(xiàng)目經(jīng)理、軟件開發(fā)人員和 DevOps 工程師。如果想了解自動(dòng)化機(jī)器學(xué)習(xí)的生命周期,或者了解組織可以如何從中受益,那么本書介紹的工具鏈可以幫助你實(shí)現(xiàn)這些目標(biāo)。
為什么選擇TensorFlow和TensorFlow Extended
本書所有的流水線示例都使用 TensorFlow 生態(tài)圈內(nèi)的工具,包括 TensorFlow Extended(TFX)。我們基于以下幾個(gè)原因選擇了這個(gè)框架。
● 在撰寫本書時(shí),TensorFlow 生態(tài)圈在機(jī)器學(xué)習(xí)領(lǐng)域的可用性是最強(qiáng)的。它包括很多有用的項(xiàng)目,也支持很多核心功能之外的庫,比如 TensorFlow Privacy 和 TensorFlow Probability。
● 它廣泛應(yīng)用于各種生產(chǎn)環(huán)境中,擁有很活躍的用戶群體。
● 它支持從學(xué)術(shù)研究到機(jī)器學(xué)習(xí)生產(chǎn)環(huán)境等各種各樣的應(yīng)用場景。TFX 和 TensorFlow 核心平臺(tái)緊密集成,支持種類繁多的生產(chǎn)應(yīng)用環(huán)境。
● TensorFlow 和 TFX 都是開源工具,在使用上沒有任何限制。
不過,本書介紹的原則在其他工具或者框架中依然適用。
章節(jié)總覽
本書會(huì)逐章介紹創(chuàng)建機(jī)器學(xué)習(xí)流水線所需的不同步驟,并通過示例項(xiàng)目展示這些步驟的原理。
第 1 章會(huì)對機(jī)器學(xué)習(xí)流水線進(jìn)行概述,討論它適合的場景,并描述流水線的所有步驟。這一章也會(huì)介紹本書用到的示例項(xiàng)目。
第 2 章會(huì)介紹 TFX 生態(tài)圈,解釋各個(gè)任務(wù)如何相互通信,并描述 TFX 組件的工作原理。這一章也會(huì)介紹 ML MetadataStore 和它在 TFX 中的作用,以及 Apache Beam 如何協(xié)同 TFX 中的各個(gè)組件。
第 3 章會(huì)討論流水線如何穩(wěn)定地獲取數(shù)據(jù),還會(huì)介紹數(shù)據(jù)版本控制的概念。
第 4 章會(huì)解釋如何用 TensorFlow 數(shù)據(jù)校驗(yàn)(data validation)高效地校驗(yàn)進(jìn)入流水線中的數(shù)據(jù)。當(dāng)新舊數(shù)據(jù)之間的差異變大并可能影響模型性能時(shí),它會(huì)向你示警。
第 5 章會(huì)聚焦于如何用 TensorFlow Transform 做數(shù)據(jù)預(yù)處理(特征工程),從而將原始數(shù)據(jù)處理成機(jī)器學(xué)習(xí)模型可用的特征。
第 6 章會(huì)討論如何在機(jī)器學(xué)習(xí)流水線中訓(xùn)練模型,還會(huì)解釋模型微調(diào)的概念。
第 7 章會(huì)介紹用于評估模型的有用的指標(biāo)(某些甚至能幫助你發(fā)現(xiàn)模型預(yù)測中存在的偏見)和一些解釋模型預(yù)測結(jié)果的方法。7.5 節(jié)會(huì)解釋當(dāng)新版本在指標(biāo)上有進(jìn)步時(shí),如何對模型進(jìn)行版本控制。流水線中的模型可以自動(dòng)更新到最新版本。
第 8 章會(huì)聚焦于如何高效地部署機(jī)器學(xué)習(xí)模型。我們會(huì)先基于 Flask 進(jìn)行簡單的部署,然后研究這種定制化模型應(yīng)用的局限性。我們會(huì)介紹 TensorFlow Serving 以及如何設(shè)置服務(wù)實(shí)例,還會(huì)討論批量處理功能,并指導(dǎo)你創(chuàng)建用于發(fā)起模型預(yù)測請求的客戶端。
第 9 章會(huì)討論如何優(yōu)化模型部署以及如何監(jiān)測模型的運(yùn)行情況。這一章會(huì)介紹優(yōu)化 TensorFlow 模型性能的策略,以及用 Kubernetes 進(jìn)行基礎(chǔ)部署的方法。
第 10 章會(huì)介紹用于機(jī)器學(xué)習(xí)流水線的自定義組件,從而幫助你擺脫 TFX 中標(biāo)準(zhǔn)組件的限制。無論是增加額外的數(shù)據(jù)讀取環(huán)節(jié),還是將導(dǎo)出的模型轉(zhuǎn)化為 TensorFlow Lite(TFLite)模型,這一章的內(nèi)容都將逐步講解這些任務(wù)所需的步驟。
第 11 章會(huì)將前面各章的內(nèi)容融會(huì)貫通。我們會(huì)討論如何把各個(gè)組件組成流水線,以及如何在你的協(xié)同平臺(tái)上設(shè)置它們。這一章會(huì)帶你用 Apache Beam 和 Apache Airflow 完成一條端到端的流水線。
第 12 章會(huì)繼續(xù)前一章的內(nèi)容,我們會(huì)在 Kubeflow Pipelines 和 Google Cloud AI Platform 上帶你完成一條端到端的流水線。
第 13 章會(huì)討論如何將模型流水線打造成一個(gè)基于用戶反饋進(jìn)行改進(jìn)的循環(huán),也會(huì)討論選用什么類型的數(shù)據(jù)來為將來的版本改進(jìn)模型,以及如何將新數(shù)據(jù)輸入流水線中。
第 14 章會(huì)介紹近年來快速發(fā)展的隱私保護(hù)機(jī)器學(xué)習(xí)方式,并會(huì)討論 3 種保護(hù)隱私的方法:差分隱私、聯(lián)邦學(xué)習(xí)和加密機(jī)器學(xué)習(xí)。
第 15 章會(huì)展望未來對機(jī)器學(xué)習(xí)流水線有可能產(chǎn)生深遠(yuǎn)影響的技術(shù),以及對未來機(jī)器學(xué)習(xí)工程的看法。
附錄 A 會(huì)提供簡短的 Docker 和 Kubernetes 入門介紹。
附錄 B 會(huì)提供如何在 Google Cloud 上設(shè)置 Kubernetes 的補(bǔ)充材料。
附錄 C 會(huì)提供一些關(guān)于運(yùn)行 Kubeflow Pipelines 的建議,包括 TFX 命令行界面的概述。
排版約定
本書使用以下排版約定。
黑體字
表示新術(shù)語或重點(diǎn)強(qiáng)調(diào)的內(nèi)容。
等寬字體(constant width)
表示程序片段,以及正文中出現(xiàn)的變量名、函數(shù)名、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、語句和關(guān)鍵字等。
等寬粗體(constant width bold)
表示應(yīng)該由用戶輸入的命令或其他文本。
等寬斜體(constant width italic)
表示應(yīng)該由用戶輸入的值或根據(jù)上下文確定的值替換的文本。
此圖標(biāo)表示提示或建議。
此圖標(biāo)表示一般性注記。
此圖標(biāo)表示警告或警示。
使用示例代碼
示例代碼等補(bǔ)充材料可從 https://oreil.ly/bmlp-git 下載。
對于本書的評論和技術(shù)性問題,請發(fā)送電子郵件到 bookquestions@oreilly.com 或者 buildingmlpipelines@gmail.com。
本書旨在幫助你完成工作。一般來說,你可以在自己的程序或文檔中使用本書提供的示例代碼。除非需要復(fù)制大量代碼,否則無須聯(lián)系我們獲得許可。比如,使用本書中的幾個(gè)代碼片段編寫程序無須獲得許可,銷售或分發(fā) O'Reilly 圖書的示例光盤則需要獲得許可;引用本書中的示例代碼回答問題無須獲得許可,將本書中的大量示例代碼放到你的產(chǎn)品文檔中則需要獲得許可。
我們很希望但并不強(qiáng)制要求你在引用本書內(nèi)容時(shí)加上引用說明。引用說明通常包括書名、作者、出版社和 ISBN,比如“Building Machine Learning Pipelines, by Hannes Hapke and Catherine Nelson (O'Reilly). Copyright 2020 Hannes Hapke and Catherine Nelson, 978-1-492- 05319-4”。
如果你覺得自己對示例代碼的用法超出了上述許可的范圍,歡迎你通過 permissions@oreilly.com 與我們聯(lián)系。
O'Reilly在線學(xué)習(xí)平臺(tái)(O'Reilly Online Learning)
40 多年來,O'Reilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識(shí)和卓越見解,來幫助眾多公司取得成功。
我們擁有獨(dú)特的由專家和創(chuàng)新者組成的龐大網(wǎng)絡(luò),他們通過圖書、文章、會(huì)議和我們的在線學(xué)習(xí)平臺(tái)分享他們的知識(shí)和經(jīng)驗(yàn)。O'Reilly 的在線學(xué)習(xí)平臺(tái)讓你能夠按需訪問現(xiàn)場培訓(xùn)課程、深入的學(xué)習(xí)路徑、交互式編程環(huán)境,以及 O'Reilly 和 200 多家其他出版商提供的大量文本資源和視頻資源。有關(guān)的更多信息,請?jiān)L問 http://www.oreilly.com。
聯(lián)系我們
請把對本書的評價(jià)和問題發(fā)給出版社。
美國:
O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國:
北京市西城區(qū)西直門南大街 2 號(hào)成銘大廈 C 座 807 室(100035)
奧萊利技術(shù)咨詢(北京)有限公司
O'Reilly 的每一本書都有專屬網(wǎng)頁,你可以在那兒找到本書的相關(guān)信息,包括勘誤表、示例代碼以及其他信息 1。本書的網(wǎng)頁是 https://oreil.ly/build-ml-pipelines。
1也可以通過圖靈社區(qū)本書主頁下載示例代碼或提交中文版勘誤。——編者注
要了解更多 O'Reilly 圖書、培訓(xùn)課程、會(huì)議和新聞的信息,請?jiān)L問以下網(wǎng)站:http://www.oreilly.com。
我們在 Facebook 的地址如下:http://facebook.com/oreilly。
請關(guān)注我們的 Twitter 動(dòng)態(tài):http://twitter.com/oreillymedia。
我們的 YouTube 視頻地址如下:http://www.youtube.com/oreillymedia。
致謝
在本書撰寫過程中,我們得到了很多杰出人士的支持。感謝每位提供過幫助的朋友!我們想在此做出特別感謝。
在本書的整個(gè)出版過程中,我們與 O'Reilly 所有人的合作都非常愉快。感謝編輯 Melissa Potter、Nicole Taché和 Amelia Blevins 給予我們強(qiáng)力的支持、不斷的鼓勵(lì)和深刻的反饋。同時(shí)感謝 Katie Tozer 和 Jonathan Hassell 一直以來的支持。
感謝 Aurélien Géron、Robert Crowe、Margaret Maynard-Reid、Sergii Khomenko 和 Vikram Tiwari,他們幫助審閱了本書并且提供了大量頗具建設(shè)性的建議和深刻的意見。他們的審閱使本書變得更好。感謝他們花了大量時(shí)間仔細(xì)審閱本書。
感謝 Yann Dupis、Jason Mancuso 和 Morten Dahl 對機(jī)器學(xué)習(xí)隱私章節(jié)的細(xì)致審閱。
許多杰出的谷歌員工也為我們提供了大量支持。感謝他們幫忙尋找和修復(fù) bug,也謝謝他們創(chuàng)造了這些開源工具包!在此特別感謝以下谷歌員工:Amy Unruh、Anusha Ramesh、Christina Greer、Clemens Mewald、David Zats、Edd Wilder-James、Irene Giannoumis、Jarek Wilkiewicz、Jiayi Zhao、Jiri Simsa、Konstantinos Katsiapis、Lak Lakshmanan、Mike Dreves、Paige Bailey、Pedram Pejman、Sara Robinson、Soonson Kwon、Thea Lamkin、Tris Warkentin、Varshaa Naganathan、Zhitao Li 和 Zohar Yahav。
感謝 TensorFlow 社區(qū)、谷歌開發(fā)者專家社區(qū)和其中出色的成員們。我們向他們的支持表示誠摯的謝意。
感謝 Barbara Fusinska、Hamel Husain、Micha? Jastrz?bski 和 Ian Hensel 在各個(gè)階段對本書做出的貢獻(xiàn)。
感謝 Concur Labs 和 SAP Concur 的同事在討論中給我們提供的靈感。在此特別感謝 John Dietz 和 Richard Puckett 對本書的大力支持。
漢內(nèi)斯
感謝我偉大的伴侶 Whitney 在我撰寫本書期間給我提供的巨大幫助。感謝她給予我持續(xù)的鼓勵(lì)和反饋,并理解和容忍我在寫作上花費(fèi)大量時(shí)間。感謝我的家人,尤其感謝讓我在這個(gè)世界上自由逐夢的父母。
本書的出版少不了好朋友的幫助。感謝我偉大的朋友兼導(dǎo)師 Cole Howard。我們共事的經(jīng)歷引發(fā)了我對機(jī)器學(xué)習(xí)流水線的思考,也啟發(fā)了我撰寫本書。感謝我的朋友 Timo Metzger 和 Amanda Wright,他們讓我領(lǐng)悟到了語言的力量。感謝 Eva、Kilian Rambach、Deb 和 David Hackleman,沒有他們的幫助,我不可能去俄勒岡州進(jìn)修學(xué)位。
感謝前東家 Cambia Health、Caravel 和 Talentpair。當(dāng)本書中的概念仍然處于襁褓狀態(tài)時(shí),是他們允許我在生產(chǎn)環(huán)境中實(shí)現(xiàn)了它們。
如果沒有我的聯(lián)合作者凱瑟琳,本書永遠(yuǎn)不可能出版。感謝她的友誼、鼓勵(lì)和無盡的耐心。感謝命運(yùn)在冥冥之中讓我們相遇。能夠與她一起完成本書,我非常高興。
凱瑟琳
雖然我在本書中寫了非常多的內(nèi)容,但再多的文字也無法表達(dá)我對丈夫 Mike 的感激。感謝他的鼓勵(lì)、照顧、建設(shè)性的討論、諷刺的玩笑和細(xì)致的反饋。感謝父母在很早以前就給我播下了編程的種子——雖然種子發(fā)芽花了很長時(shí)間,但他們做的是對的!
感謝我有幸參與的那些偉大社區(qū)。我在西雅圖 PyLadies、“數(shù)據(jù)科學(xué)女性工作者”和其他 Python 社區(qū)遇到了許多優(yōu)秀的人。感謝他們的鼓勵(lì)!
最后也要感謝漢內(nèi)斯邀請我一起撰寫本書!沒有他,這一切都不可能發(fā)生。他的博學(xué)、對細(xì)節(jié)的追求和堅(jiān)持都是本書成功的原因。和他共事的時(shí)光令我十分愉快!
更多信息
掃描下方二維碼,即可獲取電子書相關(guān)信息及讀者群通道入口。
- 現(xiàn)代測控系統(tǒng)典型應(yīng)用實(shí)例
- Splunk 7 Essentials(Third Edition)
- 人工免疫算法改進(jìn)及其應(yīng)用
- 輕松學(xué)Java
- Learning Social Media Analytics with R
- 80x86/Pentium微型計(jì)算機(jī)原理及應(yīng)用
- 大數(shù)據(jù)處理平臺(tái)
- 完全掌握AutoCAD 2008中文版:機(jī)械篇
- PVCBOT機(jī)器人控制技術(shù)入門
- 計(jì)算機(jī)組網(wǎng)技術(shù)
- Linux內(nèi)核精析
- 液壓機(jī)智能故障診斷方法集成技術(shù)
- Cloud Security Automation
- 會(huì)聲會(huì)影X4中文版從入門到精通
- 基于Proteus的單片機(jī)應(yīng)用技術(shù)