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