本書介紹如何構(gòu)建完整的機器學(xué)習(xí)流水線,從而在生產(chǎn)環(huán)境中準(zhǔn)備數(shù)據(jù)以及訓(xùn)練、驗證、部署和管理機器學(xué)習(xí)模型。你將了解機器學(xué)習(xí)流水線的每個環(huán)節(jié),以及如何利用TensorFlow Extended(TFX)構(gòu)建機器學(xué)習(xí)流水線。模型的生命周期是一個閉環(huán),其中包括數(shù)據(jù)讀取、數(shù)據(jù)校驗、數(shù)據(jù)預(yù)處理、模型訓(xùn)練、模型分析、模型驗證、模型部署、模型反饋等環(huán)節(jié)。你將學(xué)習(xí)如何利用Beam、Airflow、Kubeflow、TensorFlow Serving等工具將每一個環(huán)節(jié)的工作自動化。學(xué)完本書,你將不再止步于訓(xùn)練單個模型,而是能夠從更高的角度將模型產(chǎn)品化,從而為公司創(chuàng)造更大的價值。
漢內(nèi)斯·哈普克(Hannes Hapke),數(shù)據(jù)科學(xué)家,善于解決各行各業(yè)的機器學(xué)習(xí)問題,與他人合著有《自然語言處理實戰(zhàn)》。 凱瑟琳·納爾遜(Catherine Nelson),數(shù)據(jù)科學(xué)家,牛津大學(xué)碩士,長期為企業(yè)提供機器學(xué)習(xí)解決方案。 【譯者介紹】 孔曉泉,谷歌認(rèn)證機器學(xué)習(xí)專業(yè)人士,TensorFlow Addons的Codeowner之一,上海TensorFlow User Group核心組織者,多年來一直在世界500強公司帶領(lǐng)團隊構(gòu)建機器學(xué)習(xí)應(yīng)用和平臺。另外,他還作為技術(shù)審稿人參與了TensorFlow文檔的本地化工作。 鄭煒,明尼蘇達(dá)大學(xué)雙子城分校機械工程碩士,伊利諾伊大學(xué)香檳分校機械工程學(xué)士,谷歌認(rèn)證機器學(xué)習(xí)專業(yè)人士,ABB電氣事業(yè)部中國技術(shù)中心算法項目經(jīng)理、算法工程師,參與算法開發(fā)和算法工作流搭建等工作。 江駿,螞蟻集團技專業(yè)人士(花名有練)、谷歌認(rèn)證機器學(xué)習(xí)專業(yè)人士、螞蟻云原生機器學(xué)習(xí)平臺技術(shù)負(fù)責(zé)人,專注于AI基礎(chǔ)架構(gòu)和訓(xùn)練框架優(yōu)化。
本書贊譽 xiii
序 xv
前言 xvii
第 1 章 入門 1
1.1 為什么要用機器學(xué)習(xí)流水線 1
1.2 什么時候考慮使用機器學(xué)習(xí)流水線 2
1.3 機器學(xué)習(xí)流水線步驟概述 3
1.3.1 數(shù)據(jù)讀取和版本控制 4
1.3.2 數(shù)據(jù)校驗 4
1.3.3 數(shù)據(jù)預(yù)處理 4
1.3.4 模型訓(xùn)練和模型調(diào)優(yōu) 5
1.3.5 模型分析 5
1.3.6 模型版本控制 5
1.3.7 模型部署 6
1.3.8 反饋循環(huán) 6
1.3.9 數(shù)據(jù)隱私 6
1.4 流水線編排 7
1.4.1 為什么使用流水線編排工具 7
1.4.2 有向無環(huán)圖 7
1.5 示例項目 8
1.5.1 項目結(jié)構(gòu) 9
1.5.2 機器學(xué)習(xí)模型 9
1.5.3 示例項目的目標(biāo) 10
1.6 小結(jié) 10
第 2 章 TensorFlow Extended入門 11
2.1 什么是TFX 12
2.2 安裝TFX 13
2.3 TFX組件概述 14
2.4 什么是機器學(xué)習(xí)元數(shù)據(jù) 15
2.5 交互式流水線 16
2.6 TFX的替代品 17
2.7 Apache Beam簡介 18
2.7.1 安裝 18
2.7.2 基本數(shù)據(jù)流水線 19
2.7.3 執(zhí)行流水線 22
2.8 小結(jié) 22
第 3 章 數(shù)據(jù)讀取 23
3.1 數(shù)據(jù)讀取的概念 23
3.1.1 讀取本地數(shù)據(jù)文件 24
3.1.2 讀取遠(yuǎn)程數(shù)據(jù)文件 29
3.1.3 直接從數(shù)據(jù)庫中讀取數(shù)據(jù) 29
3.2 數(shù)據(jù)準(zhǔn)備 31
3.2.1 拆分?jǐn)?shù)據(jù)集 31
3.2.2 跨越數(shù)據(jù)集 33
3.2.3 對數(shù)據(jù)集進行版本控制 34
3.3 數(shù)據(jù)讀取策略 34
3.3.1 結(jié)構(gòu)化數(shù)據(jù) 35
3.3.2 自然語言處理中的文本數(shù)據(jù) 35
3.3.3 用于計算機視覺問題的圖像數(shù)據(jù) 35
3.4 小結(jié) 36
第 4 章 數(shù)據(jù)校驗 37
4.1 為什么要進行數(shù)據(jù)校驗 38
4.2 TFDV 39
4.2.1 安裝 39
4.2.2 根據(jù)數(shù)據(jù)生成統(tǒng)計信息 40
4.2.3 從數(shù)據(jù)生成模式 41
4.3 識別數(shù)據(jù)中的問題 42
4.3.1 比較數(shù)據(jù)集 43
4.3.2 更新模式 44
4.3.3 數(shù)據(jù)偏斜和漂移 45
4.3.4 存在偏差的數(shù)據(jù)集 46
4.3.5 在TFDV中切分?jǐn)?shù)據(jù) 47
4.4 使用GCP處理大型數(shù)據(jù)集 49
4.5 將TFDV集成到機器學(xué)習(xí)流水線中 51
4.6 小結(jié) 53
第 5 章 數(shù)據(jù)預(yù)處理 54
5.1 為什么要進行數(shù)據(jù)預(yù)處理 55
5.1.1 在整個數(shù)據(jù)集的上下文中預(yù)處理數(shù)據(jù) 55
5.1.2 擴展預(yù)處理步驟 55
5.1.3 避免訓(xùn)練?C服務(wù)偏斜 55
5.1.4 將預(yù)處理步驟和機器學(xué)習(xí)模型作為一個工件進行部署 56
5.1.5 檢查流水線中的預(yù)處理結(jié)果 56
5.2 使用TFT做數(shù)據(jù)預(yù)處理 57
5.2.1 安裝 58
5.2.2 預(yù)處理策略 58
5.2.3 實踐 60
5.2.4 TFT函數(shù) 60
5.2.5 TFT的獨立執(zhí)行 63
5.2.6 將TFT集成到機器學(xué)習(xí)流水線中 64
5.3 小結(jié) 67
第 6 章 模型訓(xùn)練 68
6.1 定義示例項目的模型 69
6.2 TFX Trainer組件 72
6.2.1 run_fn()函數(shù) 72
6.2.2 運行Trainer組件 76
6.2.3 其他關(guān)于Trainer組件的注意事項 77
6.3 在交互式流水線中使用TensorBoard 78
6.4 分布策略 80
6.5 模型調(diào)整 82
6.5.1 超參數(shù)調(diào)整的策略 82
6.5.2 TFX流水線中的超參數(shù)調(diào)整 83
6.6 小結(jié) 83
第 7 章 模型分析和模型驗證 84
7.1 如何分析模型 85
7.1.1 分類指標(biāo) 85
7.1.2 回歸指標(biāo) 87
7.2 TensorFlow模型分析 88
7.2.1 用TFMA分析單個模型 88
7.2.2 用TFMA分析多個模型 91
7.3 模型公平性分析 93
7.3.1 用TFMA劃分模型預(yù)測 94
7.3.2 用公平性指標(biāo)檢查決策閾值 96
7.3.3 詳解假設(shè)分析工具 98
7.4 模型可解釋性 102
7.4.1 使用WIT生成模型解釋 103
7.4.2 其他模型解釋方法 105
7.5 用TFX進行分析和驗證 106
7.5.1 ResolverNode 106
7.5.2 Evaluator組件 107
7.5.3 用Evaluator組件進行驗證 107
7.5.4 TFX Pusher組件 108
7.6 小結(jié) 109
第 8 章 用TensorFlow Serving部署模型 110
8.1 簡單的模型服務(wù)器 111
8.2 基于Python API部署模型的缺點 112
8.2.1 缺少代碼隔離 112
8.2.2 缺少模型版本控制 112
8.2.3 低效的模型推算 112
8.3 TensorFlow Serving 113
8.4 TensorFlow Serving架構(gòu)概述 113
8.5 為TensorFlow Serving導(dǎo)出模型 113
8.6 模型簽名 115
8.7 查看導(dǎo)出的模型 117
8.7.1 查看模型 118
8.7.2 測試模型 119
8.8 設(shè)置TensorFlow Serving 120
8.8.1 Docker安裝 120
8.8.2 原生Ubuntu安裝 120
8.8.3 從源碼編譯TensorFlow Serving 121
8.9 配置TensorFlow服務(wù)器 121
8.9.1 單一模型配置 121
8.9.2 多模型配置 124
8.10 REST與gRPC 126
8.10.1 REST 126
8.10.2 gRPC 126
8.11 用模型服務(wù)器預(yù)測 126
8.11.1 用REST獲得模型預(yù)測 126
8.11.2 通過gRPC使用TensorFlow Serving 128
8.12 用TensorFlow Serving進行模型A/B測試 131
8.13 從模型服務(wù)器獲取模型元數(shù)據(jù) 132
8.13.1 使用REST請求模型元數(shù)據(jù) 132
8.13.2 使用gRPC請求模型元數(shù)據(jù) 133
8.14 批量推算請求 134
8.15 配置批量預(yù)測 135
8.16 其他TensorFlow Serving優(yōu)化方法 136
8.17 TensorFlow Serving的替代品 137
8.17.1 BentoML 137
8.17.2 Seldon 138
8.17.3 GraphPipe 138
8.17.4 Simple TensorFlow Serving 138
8.17.5 MLflow 138
8.17.6 Ray Serve 139
8.18 在云端部署 139
8.18.1 用例 139
8.18.2 在GCP上進行示例部署 139
8.19 使用TFX流水線進行模型部署 144
8.20 小結(jié) 145
第 9 章 使用TensorFlow Serving進行進階模型部署 146
9.1 解耦部署環(huán)節(jié) 146
9.1.1 工作流概述 147
9.1.2 優(yōu)化遠(yuǎn)程模型加載 149
9.2 為部署模型進行優(yōu)化 149
9.2.1 量化 149
9.2.2 剪枝 150
9.2.3 蒸餾 151
9.3 在TensorFlow Serving中使用TensorRT 151
9.4 TFLite 152
9.4.1 用TFLite優(yōu)化模型的步驟 152
9.4.2 使用TensorFlow Serving實例部署TFLite模型 153
9.5 監(jiān)測TensorFlow Serving實例 154
9.5.1 設(shè)置Prometheus 154
9.5.2 TensorFlow Serving配置 156
9.6 使用TensorFlow Serving和Kubernetes進行簡單的擴容 157
9.7 小結(jié) 159
第 10 章 TensorFlow Extended的高級功能 160
10.1 流水線的高級功能 160
10.1.1 同時訓(xùn)練多個模型 161
10.1.2 導(dǎo)出TFLite模型 162
10.1.3 熱啟動模型訓(xùn)練 164
10.2 人工審核 165
10.2.1 創(chuàng)建Slack組件 166
10.2.2 如何使用Slack組件 166
10.3 TFX自定義組件 167
10.3.1 自定義組件的應(yīng)用場景 168
10.3.2 從零創(chuàng)建自定義組件 168
10.3.3 復(fù)用現(xiàn)有組件 176
10.4 小結(jié) 179
第 11 章 流水線第 一部分:Apache Beam和Apache Airflow 180
11.1 選擇哪種編排工具 181
11.1.1 Apache Beam 181
11.1.2 Apache Airflow 181
11.1.3 Kubeflow Pipelines 181
11.1.4 AI Platform上的Kubeflow Pipelines 182
11.2 將交互式TFX流水線轉(zhuǎn)換為生產(chǎn)流水線 182
11.3 Beam和Airflow的簡單交互式流水線轉(zhuǎn)換 184
11.4 Apache Beam簡介 185
11.5 使用Apache Beam編排TFX流水線 185
11.6 Apache Airflow簡介 187
11.6.1 安裝和初始設(shè)置 187
11.6.2 基本Airflow示例 188
11.7 使用Apache Airflow編排TFX流水線 191
11.7.1 流水線設(shè)置 192
11.7.2 運行流水線 193
11.8 小結(jié) 194
第 12 章 流水線第二部分:Kubeflow Pipelines 195
12.1 Kubeflow Pipelines概述 196
12.1.1 安裝和初始設(shè)置 198
12.1.2 訪問已安裝的Kubeflow Pipelines 199
12.2 使用Kubeflow Pipelines編排TFX流水線 200
12.2.1 流水線設(shè)置 202
12.2.2 運行流水線 206
12.2.3 Kubeflow Pipelines的有用功能 211
12.3 基于Google Cloud AI Platform的流水線 215
12.3.1 流水線設(shè)置 215
12.3.2 TFX流水線設(shè)置 218
12.3.3 運行流水線 221
12.4 小結(jié) 222
第 13 章 反饋循環(huán) 223
13.1 顯式反饋和隱式反饋 224
13.1.1 數(shù)據(jù)飛輪 224
13.1.2 現(xiàn)實世界中的反饋循環(huán) 225
13.2 收集反饋的設(shè)計模式 227
13.2.1 用戶根據(jù)預(yù)測采取了某些措施 227
13.2.2 用戶對預(yù)測的質(zhì)量進行評分 228
13.2.3 用戶糾正預(yù)測 228
13.2.4 眾包打標(biāo) 228
13.2.5 專家打標(biāo) 229
13.2.6 自動產(chǎn)生反饋 229
13.3 如何跟蹤反饋循環(huán) 229
13.3.1 跟蹤顯式反饋 230
13.3.2 跟蹤隱式反饋 230
13.4 小結(jié) 231
第 14 章 機器學(xué)習(xí)的數(shù)據(jù)隱私 232
14.1 數(shù)據(jù)隱私問題 232
14.1.1 為什么關(guān)心數(shù)據(jù)隱私 232
14.1.2 簡單的加強隱私保護的方法 233
14.1.3 哪些數(shù)據(jù)需要保密 233
14.2 差分隱私 234
14.2.1 局部差分隱私和全局差分隱私 235
14.2.2 epsilon、delta和隱私預(yù)算 235
14.2.3 機器學(xué)習(xí)的差分隱私 236
14.3 TensorFlow Privacy 236
14.3.1 使用差分隱私優(yōu)化器進行訓(xùn)練 237
14.3.2 計算epsilon 238
14.4 聯(lián)邦學(xué)習(xí) 239
14.5 加密機器學(xué)習(xí) 241
14.5.1 加密模型訓(xùn)練 241
14.5.2 將訓(xùn)練好的模型轉(zhuǎn)換為加密的預(yù)測服務(wù) 242
14.6 其他數(shù)據(jù)保密方法 243
14.7 小結(jié) 243
第 15 章 流水線的未來和下一步 244
15.1 模型實驗跟蹤 244
15.2 關(guān)于模型發(fā)布管理的思考 245
15.3 未來的流水線能力 246
15.4 TFX與其他機器學(xué)習(xí)框架 246
15.5 測試機器學(xué)習(xí)模型 247
15.6 用于機器學(xué)習(xí)的CI/CD系統(tǒng) 247
15.7 機器學(xué)習(xí)工程社區(qū) 247
15.8 小結(jié) 247
附錄A 機器學(xué)習(xí)基礎(chǔ)架構(gòu)簡介 249
附錄B 在Google Cloud上設(shè)置Kubernetes集群 262
附錄C 操作Kubeflow Pipelines的技巧 268
關(guān)于作者 276
關(guān)于封面 276