分布式機(jī)器學(xué)習(xí)——系統(tǒng)、工程與實(shí)戰(zhàn)
定 價(jià):139 元
- 作者:柳浩
- 出版時(shí)間:2023/6/1
- ISBN:9787121458149
- 出 版 社:電子工業(yè)出版社
- 中圖法分類(lèi):TP181
- 頁(yè)碼:592
- 紙張:
- 版次:01
- 開(kāi)本:16開(kāi)
本書(shū)主要講解分布式機(jī)器學(xué)習(xí)算法和開(kāi)源框架,讀者既可以從宏觀的設(shè)計(jì)上了解分布式機(jī)器學(xué)習(xí)的概念和理論,也可以深入核心技術(shù)的細(xì)節(jié)設(shè)計(jì)中,對(duì)分布式機(jī)器學(xué)習(xí)形成深刻而直觀的認(rèn)識(shí),做到學(xué)以致用。 本書(shū)共分為5篇,第1篇是分布式基礎(chǔ),首先介紹了分布式機(jī)器學(xué)習(xí)的概念、基礎(chǔ)設(shè)施,以及機(jī)器學(xué)習(xí)并行化技術(shù)、框架和軟件系統(tǒng),然后對(duì)集合通信和參數(shù)服務(wù)器PS-Lite進(jìn)行了介紹。第2篇是數(shù)據(jù)并行,以PyTorch和Horovod為主對(duì)數(shù)據(jù)并行進(jìn)行分析,讀者可以了解在具體工程領(lǐng)域內(nèi)實(shí)現(xiàn)數(shù)據(jù)并行有哪些挑戰(zhàn)和解決方案。第3篇是流水線并行,講解了除模型劃分之外,還通過(guò)引入額外的流水線來(lái)提高效率,以GPipe / PyTorch / PipeDream為例進(jìn)行分析。第4篇是模型并行,首先對(duì)NVIDIA Megatron進(jìn)行分析,講解如何進(jìn)行層內(nèi)分割模型并行,然后講解PyTorch 如何支持模型并行,最后介紹分布式優(yōu)化器。第5篇是TensorFlow分布式,前面幾篇以PyTorch為綱,結(jié)合其他框架/庫(kù)來(lái)穿插完成,本篇帶領(lǐng)大家進(jìn)入TensorFlow分布式領(lǐng)域。
柳浩,網(wǎng)名“羅西的思考”,浙江大學(xué)碩士。曾就職于多個(gè)世界500強(qiáng)企業(yè),主導(dǎo)過(guò)多個(gè)大型項(xiàng)目,現(xiàn)就職于某新能源車(chē)企。技術(shù)棧廣博,有豐富的各種大型軟件開(kāi)發(fā)和系統(tǒng)架構(gòu)經(jīng)驗(yàn),對(duì)機(jī)器學(xué)習(xí)框架、微服務(wù)框架、大數(shù)據(jù)引擎、NoSQL、消息隊(duì)列、分布式追蹤系統(tǒng)、移動(dòng)開(kāi)發(fā)方案和源碼有著深刻的理解和認(rèn)識(shí)。目前對(duì)機(jī)器學(xué)習(xí)、分布式系統(tǒng)、可觀測(cè)系統(tǒng)、可靠性設(shè)計(jì)等方面有濃厚的研究興趣。
目 錄
第1篇 分布式基礎(chǔ)
第1章 分布式機(jī)器學(xué)習(xí) 2
1.1 機(jī)器學(xué)習(xí)概念 2
1.2 機(jī)器學(xué)習(xí)的特點(diǎn) 3
1.3 分布式訓(xùn)練的必要性 3
1.4 分布式機(jī)器學(xué)習(xí)研究領(lǐng)域 6
1.4.1 分布式機(jī)器學(xué)習(xí)的目標(biāo) 6
1.4.2 分布式機(jī)器學(xué)習(xí)的分類(lèi) 6
1.5 從模型角度看如何并行 8
1.5.1 并行方式 8
1.5.2 數(shù)據(jù)并行 9
1.5.3 模型并行 10
1.5.4 流水線并行 11
1.5.5 比對(duì) 12
1.6 從訓(xùn)練并發(fā)角度看如何并行 12
1.6.1 參數(shù)分布和通信拓?fù)?13
1.6.2 模型一致性和通信模式 14
1.6.3 訓(xùn)練分布 19
1.7 分布式機(jī)器學(xué)習(xí)編程接口 19
1.7.1 手動(dòng)同步更新 20
1.7.2 指定任務(wù)和位置 20
1.7.3 猴子補(bǔ)丁優(yōu)化器 21
1.7.4 Python作用域 21
1.8 PyTorch分布式 22
1.8.1 歷史脈絡(luò) 22
1.8.2 基本概念 23
1.9 總結(jié) 24
第2章 集合通信 26
2.1 通信模式 26
2.2 點(diǎn)對(duì)點(diǎn)通信 26
2.3 集合通信 28
2.3.1 Broadcast 29
2.3.2 Scatter 29
2.3.3 Gather 30
2.3.4 All-Gather 30
2.3.5 All-to-All 30
2.3.6 Reduce 31
2.3.7 All-Reduce 31
2.3.8 Reduce-Scatter 32
2.4 MPI_AllReduce 32
2.5 Ring All-Reduce 33
2.5.1 特點(diǎn) 34
2.5.2 策略 34
2.5.3 結(jié)構(gòu) 35
2.5.4 Reduce-Scatter 35
2.5.5 All-Gather 38
2.5.6 通信性能 40
2.5.7 區(qū)別 40
第3章 參數(shù)服務(wù)器之PS-Lite 41
3.1 參數(shù)服務(wù)器 41
3.1.1 概念 41
3.1.2 歷史淵源 42
3.1.3 問(wèn)題 43
3.2 基礎(chǔ)模塊Postoffice 44
3.2.1 基本邏輯 44
3.2.2 系統(tǒng)啟動(dòng) 45
3.2.3 功能實(shí)現(xiàn) 47
3.3 通信模塊Van 51
3.3.1 功能概述 51
3.3.2 定義 51
3.3.3 初始化 52
3.3.4 接收消息 53
3.4 代理人Customer 59
3.4.1 基本思路 59
3.4.2 基礎(chǔ)類(lèi) 61
3.4.3 Customer 62
3.4.4 功能函數(shù) 66
3.5 應(yīng)用節(jié)點(diǎn)實(shí)現(xiàn) 67
3.5.1 SimpleApp 67
3.5.2 KVServer 68
3.5.3 KVWorker 68
3.5.4 總結(jié) 70
第2篇 數(shù)據(jù)并行 73
第4章 PyTorch DataParallel 74
4.1 綜述 74
4.2 示例 76
4.3 定義 77
4.4 前向傳播 78
4.5 計(jì)算損失 87
4.6 反向傳播 88
4.7 總結(jié) 91
第5章 PyTorch DDP的基礎(chǔ)架構(gòu) 93
5.1 DDP總述 93
5.1.1 DDP的運(yùn)行邏輯 93
5.1.2 DDP的使用 94
5.2 設(shè)計(jì)理念 97
5.2.1 系統(tǒng)設(shè)計(jì) 97
5.2.2 梯度歸約 98
5.2.3 實(shí)施 99
5.3 基礎(chǔ)概念 101
5.3.1 初始化方法 101
5.3.2 Store類(lèi) 102
5.3.3 TCPStore類(lèi) 104
5.3.4 進(jìn)程組概念 107
5.3.5 構(gòu)建進(jìn)程組 109
5.4 架構(gòu)和初始化 111
5.4.1 架構(gòu)與迭代流程 111
5.4.2 初始化DDP 114
第6章 PyTorch DDP的動(dòng)態(tài)邏輯 122
6.1 Reducer類(lèi) 122
6.1.1 調(diào)用Reducer類(lèi) 122
6.1.2 定義Reducer類(lèi) 122
6.1.3 Bucket類(lèi) 124
6.1.4 BucketReplica類(lèi) 126
6.1.5 查詢數(shù)據(jù)結(jié)構(gòu) 128
6.1.6 梯度累積相關(guān)成員變量 131
6.1.7 初始化 135
6.1.8 靜態(tài)圖 141
6.1.9 Join操作 142
6.2 前向/反向傳播 143
6.2.1 前向傳播 143
6.2.2 反向傳播 149
第7章 Horovod 161
7.1 從使用者角度切入 161
7.1.1 機(jī)制概述 161
7.1.2 示例代碼 162
7.1.3 運(yùn)行邏輯 163
7.2 horovodrun 167
7.2.1 入口點(diǎn) 167
7.2.2 運(yùn)行訓(xùn)練Job 168
7.2.3 Gloo實(shí)現(xiàn) 169
7.2.4 MPI實(shí)現(xiàn) 174
7.2.5 總結(jié) 174
7.3 網(wǎng)絡(luò)基礎(chǔ)和Driver 174
7.3.1 總體架構(gòu) 175
7.3.2 基礎(chǔ)網(wǎng)絡(luò)服務(wù) 176
7.3.3 Driver服務(wù) 177
7.3.4 Task服務(wù) 178
7.3.5 總結(jié) 180
7.4 DistributedOptimizer 181
7.4.1 問(wèn)題點(diǎn) 181
7.4.2 解決思路 182
7.4.3 TensorFlow 1.x 183
7.5 融合框架 191
7.5.1 總體架構(gòu) 191
7.5.2 算子類(lèi)體系 192
7.5.3 后臺(tái)線程 194
7.5.4 執(zhí)行線程 195
7.5.5 總結(jié) 196
7.6 后臺(tái)線程架構(gòu) 198
7.6.1 設(shè)計(jì)要點(diǎn) 198
7.6.2 總體代碼 201
7.6.3 業(yè)務(wù)邏輯 202
第3篇 流水線并行
第8章 GPipe 210
8.1 流水線基本實(shí)現(xiàn) 210
8.1.1 流水線并行 210
8.1.2 GPipe概述 211
8.1.3 計(jì)算內(nèi)存 213
8.1.4 計(jì)算算力 213
8.1.5 自動(dòng)并行 214
8.2 梯度累積 218
8.2.1 基本概念 218
8.2.2 PyTorch實(shí)現(xiàn) 219
8.2.3 GPipe實(shí)現(xiàn) 223
8.3 Checkpointing 225
8.3.1 問(wèn)題 225
8.3.2 解決方案 225
8.3.3 OpenAI 226
8.3.4 PyTorch實(shí)現(xiàn) 228
8.3.5 GPipe實(shí)現(xiàn) 240
第9章 PyTorch流水線并行 243
9.1 如何劃分模型 243
9.1.1 使用方法 244
9.1.2 自動(dòng)平衡 245
9.1.3 模型劃分 247
9.2 切分?jǐn)?shù)據(jù)和Runtime系統(tǒng) 249
9.2.1 分發(fā)小批量 249
9.2.2 Runtime 250
9.3 前向計(jì)算 255
9.3.1 設(shè)計(jì) 255
9.3.2 執(zhí)行順序 260
9.4 計(jì)算依賴(lài) 265
9.4.1 反向傳播依賴(lài) 266
9.4.2 前向傳播依賴(lài) 270
9.5 并行計(jì)算 274
9.5.1 總體架構(gòu) 274
9.5.2 并行復(fù)制和計(jì)算 276
9.5.3 重計(jì)算 278
第10章 PipeDream之基礎(chǔ)架構(gòu) 280
10.1 總體思路 280
10.1.1 目前問(wèn)題 280
10.1.2 1F1B策略概述 282
10.1.3 流水線方案 283
10.2 profile階段 285
10.3 計(jì)算分區(qū)階段 288
10.3.1 構(gòu)建圖 288
10.3.2 構(gòu)建反鏈 289
10.3.3 計(jì)算分區(qū) 295
10.3.4 分析分區(qū) 302
10.3.5 輸出 305
10.4 轉(zhuǎn)換模型階段 305
10.4.1 分離子圖 306
10.4.2 轉(zhuǎn)換模型 307
10.4.3 融合模型 308
第11章 PipeDream之動(dòng)態(tài)邏輯 312
11.1 Runtime引擎 312
11.1.1 功能 312
11.1.2 總體邏輯 313
11.1.3 加載模型 314
11.1.4 實(shí)現(xiàn) 314
11.2 通信模塊 323
11.2.1 類(lèi)定義 324
11.2.2 構(gòu)建 325
11.2.3 發(fā)送和接收 331
11.3 1F1B策略 333
11.3.1 設(shè)計(jì)思路 333
11.3.2 權(quán)重問(wèn)題 335
11.3.3 實(shí)現(xiàn) 340
第4篇 模型并行
第12章 Megatron 346
12.1 設(shè)計(jì)思路 346
12.1.1 背景 346
12.1.2 張量模型并行 348
12.1.3 并行配置 354
12.1.4 結(jié)論 354
12.2 模型并行實(shí)現(xiàn) 354
12.2.1 并行MLP 355
12.2.2 ColumnParallelLinear 358
12.2.3 RowParallelLinear 363
12.2.4 總結(jié) 367
12.3 如何設(shè)置各種并行 367
12.3.1 初始化 368
12.3.2 起始狀態(tài) 371
12.3.3 設(shè)置張量模型并行 373
12.3.4 設(shè)置流水線并行 375
12.3.5 設(shè)置數(shù)據(jù)并行 378
12.3.6 模型并行組 380
12.3.7 如何把模型分塊到GPU上 381
12.4 Pipedream的流水線刷新 383
第13章 PyTorch如何實(shí)現(xiàn)模型并行 387
13.1 PyTorch模型并行 387
13.1.1 PyTorch特點(diǎn) 387
13.1.2 示例 387
13.2 分布式自動(dòng)求導(dǎo)之設(shè)計(jì) 389
13.2.1 分布式RPC框架 389
13.2.2 自動(dòng)求導(dǎo)記錄 390
13.2.3 分布式自動(dòng)求導(dǎo)上下文 391
13.2.4 分布式反向傳播算法 392
13.2.5 分布式優(yōu)化器 396
13.3 RPC基礎(chǔ) 396
13.3.1 RPC代理 396
13.3.2 發(fā)送邏輯 396
13.3.3 接收邏輯 398
13.4 上下文相關(guān) 399
13.4.1 設(shè)計(jì)脈絡(luò) 400
13.4.2 AutogradMetadata 401
13.4.3 DistAutogradContainer 403
13.4.4 DistAutogradContext 403
13.4.5 前向傳播交互過(guò)程 408
13.5 如何切入引擎 411
13.5.1 反向傳播 411
13.5.2 SendRpcBackward 415
13.5.3 總結(jié) 417
13.6 自動(dòng)求導(dǎo)引擎 417
13.6.1 原生引擎 417
13.6.2 分布式引擎 419
13.6.3 總體執(zhí)行 421
13.6.4 驗(yàn)證節(jié)點(diǎn)和邊 421
13.6.5 計(jì)算依賴(lài) 422
13.6.6 執(zhí)行GraphTask 429
13.6.7 RPC調(diào)用閉環(huán) 433
13.6.8 DistAccumulateGradCapture-
Hook 436
13.6.9 等待完成 442
第14章 分布式優(yōu)化器 443
14.1 原生優(yōu)化器 443
14.2 DP的優(yōu)化器 445
14.3 DDP的優(yōu)化器 446
14.3.1 流程 446
14.3.2 優(yōu)化器狀態(tài) 446
14.4 Horovod的優(yōu)化器 447
14.4.1 利用鉤子同步梯度 448
14.4.2 利用step()函數(shù)同步梯度 449
14.5 模型并行的分布式問(wèn)題 450
14.6 PyTorch分布式優(yōu)化器 451
14.6.1 初始化 452
14.6.2 更新參數(shù) 453
14.7 PipeDream分布式優(yōu)化器 455
14.7.1 如何確定優(yōu)化參數(shù) 456
14.7.2 優(yōu)化 458
第5篇 TensorFlow分布式
第15章 分布式運(yùn)行環(huán)境之靜態(tài)架構(gòu) 462
15.1 總體架構(gòu) 462
15.1.1 集群角度 462
15.1.2 分布式角度 463
15.1.3 系統(tǒng)角度 465
15.1.4 圖操作角度 467
15.1.5 通信角度 468
15.2 Server 469
15.2.1 邏輯概念 469
15.2.2 GrpcServer 471
15.3 Master的靜態(tài)邏輯 474
15.3.1 總述 474
15.3.2 接口 474
15.3.3 LocalMaster 476
15.3.4 GrpcRemoteMaster 478
15.3.5 GrpcMasterService 478
15.3.6 業(yè)務(wù)實(shí)現(xiàn)Master類(lèi) 480
15.4 Worker的靜態(tài)邏輯 481
15.4.1 邏輯關(guān)系 481
15.4.2 GrpcRemoteWorker 483
15.4.3 GrpcWorkerService 483
15.4.4 Worker 487
15.4.5 GrpcWorker 488
第16章 分布式運(yùn)行環(huán)境之動(dòng)態(tài)邏輯 489
16.1 Session機(jī)制 489
16.1.1 概述 489
16.1.2 GrpcSession 491
16.1.3 MasterSession 492
16.1.4 WorkerSession 494
16.2 Master動(dòng)態(tài)邏輯 495
16.2.1 Client如何調(diào)用 495
16.2.2 Master業(yè)務(wù)邏輯 495
16.3 Worker動(dòng)態(tài)邏輯 501
16.3.1 概述 501
16.3.2 注冊(cè)子圖 501
16.3.3 運(yùn)行子圖 502
16.3.4 分布式計(jì)算流程總結(jié) 504
16.4 通信機(jī)制 505
16.4.1 協(xié)調(diào)機(jī)制 505
16.4.2 發(fā)送流程 508
16.4.3 接收流程 508
16.4.4 總結(jié) 509
第17章 分布式策略基礎(chǔ) 511
17.1 使用TensorFlow進(jìn)行分布式訓(xùn)練 511
17.1.1 概述 511
17.1.2 策略類(lèi)型 511
17.2 DistributedStrategy基礎(chǔ) 515
17.2.1. StrategyBase 515
17.2.2 讀取數(shù)據(jù) 518
17.3 分布式變量 523
17.3.1 MirroredVariable 523
17.3.2 ShardedVariable 530
第18章 MirroredStrategy 535
18.1 MirroredStrategy集合通信 535
18.1.1 設(shè)計(jì)思路 535
18.1.2 實(shí)現(xiàn) 536
18.1.3 更新分布式變量 538
18.2 MirroredStrategy分發(fā)計(jì)算 540
18.2.1 運(yùn)行 540
18.2.2 mirrored_run 541
18.2.3 Context 544
18.2.4 通信協(xié)議 546
18.2.5 EagerService 547
18.2.6 在遠(yuǎn)端運(yùn)行訓(xùn)練代碼 551
18.2.7 總結(jié) 552
第19章 ParameterServerStrategy 554
19.1 ParameterServerStrategyV1 554
19.1.1 思路 554
19.1.2 數(shù)據(jù) 556
19.1.3 作用域和變量 557
19.1.4 運(yùn)行 559
19.2 ParameterServerStrategyV2 560
19.2.1 如何使用 560
19.2.2 運(yùn)行 561
19.3 ClusterCoordinator 561
19.3.1 使用 561
19.3.2 定義 563
19.3.3 數(shù)據(jù) 565
19.3.4 Cluster 566
19.3.5 Closure 568
19.3.6 隊(duì)列 570
19.3.7 Worker類(lèi) 570
19.3.8 Failover 573
19.3.9 總結(jié) 574