书籍详情
分布式机器学习:系统、工程与实战
作者:柳浩
出版社:电子工业出版社
出版时间:2023-06-01
ISBN:9787121458149
定价:¥139.00
购买这本书可以去
内容简介
本书主要讲解分布式机器学习算法和开源框架,读者既可以从宏观的设计上了解分布式机器学习的概念和理论,也可以深入核心技术的细节设计中,对分布式机器学习形成深刻而直观的认识,做到学以致用。 本书共分为5篇,第1篇是分布式基础,首先介绍了分布式机器学习的概念、基础设施,以及机器学习并行化技术、框架和软件系统,然后对集合通信和参数服务器PS-Lite进行了介绍。第2篇是数据并行,以PyTorch和Horovod为主对数据并行进行分析,读者可以了解在具体工程领域内实现数据并行有哪些挑战和解决方案。第3篇是流水线并行,讲解了除模型划分之外,还通过引入额外的流水线来提高效率,以GPipe / PyTorch / PipeDream为例进行分析。第4篇是模型并行,首先对NVIDIA Megatron进行分析,讲解如何进行层内分割模型并行,然后讲解PyTorch 如何支持模型并行,最后介绍分布式优化器。第5篇是TensorFlow分布式,前面几篇以PyTorch为纲,结合其他框架/库来穿插完成,本篇带领大家进入TensorFlow分布式领域。
作者简介
柳浩,网名“罗西的思考”,浙江大学硕士。曾就职于多个世界500强企业,主导过多个大型项目,现就职于某新能源车企。技术栈广博,有丰富的各种大型软件开发和系统架构经验,对机器学习框架、微服务框架、大数据引擎、NoSQL、消息队列、分布式追踪系统、移动开发方案和源码有着深刻的理解和认识。目前对机器学习、分布式系统、可观测系统、可靠性设计等方面有浓厚的研究兴趣。
目录
目 录
第1篇 分布式基础
第1章 分布式机器学习 2
1.1 机器学习概念 2
1.2 机器学习的特点 3
1.3 分布式训练的必要性 3
1.4 分布式机器学习研究领域 6
1.4.1 分布式机器学习的目标 6
1.4.2 分布式机器学习的分类 6
1.5 从模型角度看如何并行 8
1.5.1 并行方式 8
1.5.2 数据并行 9
1.5.3 模型并行 10
1.5.4 流水线并行 11
1.5.5 比对 12
1.6 从训练并发角度看如何并行 12
1.6.1 参数分布和通信拓扑 13
1.6.2 模型一致性和通信模式 14
1.6.3 训练分布 19
1.7 分布式机器学习编程接口 19
1.7.1 手动同步更新 20
1.7.2 指定任务和位置 20
1.7.3 猴子补丁优化器 21
1.7.4 Python作用域 21
1.8 PyTorch分布式 22
1.8.1 历史脉络 22
1.8.2 基本概念 23
1.9 总结 24
第2章 集合通信 26
2.1 通信模式 26
2.2 点对点通信 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 特点 34
2.5.2 策略 34
2.5.3 结构 35
2.5.4 Reduce-Scatter 35
2.5.5 All-Gather 38
2.5.6 通信性能 40
2.5.7 区别 40
第3章 参数服务器之PS-Lite 41
3.1 参数服务器 41
3.1.1 概念 41
3.1.2 历史渊源 42
3.1.3 问题 43
3.2 基础模块Postoffice 44
3.2.1 基本逻辑 44
3.2.2 系统启动 45
3.2.3 功能实现 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 基础类 61
3.4.3 Customer 62
3.4.4 功能函数 66
3.5 应用节点实现 67
3.5.1 SimpleApp 67
3.5.2 KVServer 68
3.5.3 KVWorker 68
3.5.4 总结 70
第2篇 数据并行 73
第4章 PyTorch DataParallel 74
4.1 综述 74
4.2 示例 76
4.3 定义 77
4.4 前向传播 78
4.5 计算损失 87
4.6 反向传播 88
4.7 总结 91
第5章 PyTorch DDP的基础架构 93
5.1 DDP总述 93
5.1.1 DDP的运行逻辑 93
5.1.2 DDP的使用 94
5.2 设计理念 97
5.2.1 系统设计 97
5.2.2 梯度归约 98
5.2.3 实施 99
5.3 基础概念 101
5.3.1 初始化方法 101
5.3.2 Store类 102
5.3.3 TCPStore类 104
5.3.4 进程组概念 107
5.3.5 构建进程组 109
5.4 架构和初始化 111
5.4.1 架构与迭代流程 111
5.4.2 初始化DDP 114
第6章 PyTorch DDP的动态逻辑 122
6.1 Reducer类 122
6.1.1 调用Reducer类 122
6.1.2 定义Reducer类 122
6.1.3 Bucket类 124
6.1.4 BucketReplica类 126
6.1.5 查询数据结构 128
6.1.6 梯度累积相关成员变量 131
6.1.7 初始化 135
6.1.8 静态图 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 机制概述 161
7.1.2 示例代码 162
7.1.3 运行逻辑 163
7.2 horovodrun 167
7.2.1 入口点 167
7.2.2 运行训练Job 168
7.2.3 Gloo实现 169
7.2.4 MPI实现 174
7.2.5 总结 174
7.3 网络基础和Driver 174
7.3.1 总体架构 175
7.3.2 基础网络服务 176
7.3.3 Driver服务 177
7.3.4 Task服务 178
7.3.5 总结 180
7.4 DistributedOptimizer 181
7.4.1 问题点 181
7.4.2 解决思路 182
7.4.3 TensorFlow 1.x 183
7.5 融合框架 191
7.5.1 总体架构 191
7.5.2 算子类体系 192
7.5.3 后台线程 194
7.5.4 执行线程 195
7.5.5 总结 196
7.6 后台线程架构 198
7.6.1 设计要点 198
7.6.2 总体代码 201
7.6.3 业务逻辑 202
第3篇 流水线并行
第8章 GPipe 210
8.1 流水线基本实现 210
8.1.1 流水线并行 210
8.1.2 GPipe概述 211
8.1.3 计算内存 213
8.1.4 计算算力 213
8.1.5 自动并行 214
8.2 梯度累积 218
8.2.1 基本概念 218
8.2.2 PyTorch实现 219
8.2.3 GPipe实现 223
8.3 Checkpointing 225
8.3.1 问题 225
8.3.2 解决方案 225
8.3.3 OpenAI 226
8.3.4 PyTorch实现 228
8.3.5 GPipe实现 240
第9章 PyTorch流水线并行 243
9.1 如何划分模型 243
9.1.1 使用方法 244
9.1.2 自动平衡 245
9.1.3 模型划分 247
9.2 切分数据和Runtime系统 249
9.2.1 分发小批量 249
9.2.2 Runtime 250
9.3 前向计算 255
9.3.1 设计 255
9.3.2 执行顺序 260
9.4 计算依赖 265
9.4.1 反向传播依赖 266
9.4.2 前向传播依赖 270
9.5 并行计算 274
9.5.1 总体架构 274
9.5.2 并行复制和计算 276
9.5.3 重计算 278
第10章 PipeDream之基础架构 280
10.1 总体思路 280
10.1.1 目前问题 280
10.1.2 1F1B策略概述 282
10.1.3 流水线方案 283
10.2 profile阶段 285
10.3 计算分区阶段 288
10.3.1 构建图 288
10.3.2 构建反链 289
10.3.3 计算分区 295
10.3.4 分析分区 302
10.3.5 输出 305
10.4 转换模型阶段 305
10.4.1 分离子图 306
10.4.2 转换模型 307
10.4.3 融合模型 308
第11章 PipeDream之动态逻辑 312
11.1 Runtime引擎 312
11.1.1 功能 312
11.1.2 总体逻辑 313
11.1.3 加载模型 314
11.1.4 实现 314
11.2 通信模块 323
11.2.1 类定义 324
11.2.2 构建 325
11.2.3 发送和接收 331
11.3 1F1B策略 333
11.3.1 设计思路 333
11.3.2 权重问题 335
11.3.3 实现 340
第4篇 模型并行
第12章 Megatron 346
12.1 设计思路 346
12.1.1 背景 346
12.1.2 张量模型并行 348
12.1.3 并行配置 354
12.1.4 结论 354
12.2 模型并行实现 354
12.2.1 并行MLP 355
12.2.2 ColumnParallelLinear 358
12.2.3 RowParallelLinear 363
12.2.4 总结 367
12.3 如何设置各种并行 367
12.3.1 初始化 368
12.3.2 起始状态 371
12.3.3 设置张量模型并行 373
12.3.4 设置流水线并行 375
12.3.5 设置数据并行 378
12.3.6 模型并行组 380
12.3.7 如何把模型分块到GPU上 381
12.4 Pipedream的流水线刷新 383
第13章 PyTorch如何实现模型并行 387
13.1 PyTorch模型并行 387
13.1.1 PyTorch特点 387
13.1.2 示例 387
13.2 分布式自动求导之设计 389
13.2.1 分布式RPC框架 389
13.2.2 自动求导记录 390
13.2.3 分布式自动求导上下文 391
13.2.4 分布式反向传播算法 392
13.2.5 分布式优化器 396
13.3 RPC基础 396
13.3.1 RPC代理 396
13.3.2 发送逻辑 396
13.3.3 接收逻辑 398
13.4 上下文相关 399
13.4.1 设计脉络 400
13.4.2 AutogradMetadata 401
13.4.3 DistAutogradContainer 403
13.4.4 DistAutogradContext 403
13.4.5 前向传播交互过程 408
13.5 如何切入引擎 411
13.5.1 反向传播 411
13.5.2 SendRpcBackward 415
13.5.3 总结 417
13.6 自动求导引擎 417
13.6.1 原生引擎 417
13.6.2 分布式引擎 419
13.6.3 总体执行 421
13.6.4 验证节点和边 421
13.6.5 计算依赖 422
13.6.6 执行GraphTask 429
13.6.7 RPC调用闭环 433
13.6.8 DistAccumulateGradCapture-
Hook 436
13.6.9 等待完成 442
第14章 分布式优化器 443
14.1 原生优化器 443
14.2 DP的优化器 445
14.3 DDP的优化器 446
14.3.1 流程 446
14.3.2 优化器状态 446
14.4 Horovod的优化器 447
14.4.1 利用钩子同步梯度 448
14.4.2 利用step()函数同步梯度 449
14.5 模型并行的分布式问题 450
14.6 PyTorch分布式优化器 451
14.6.1 初始化 452
14.6.2 更新参数 453
14.7 PipeDream分布式优化器 455
14.7.1 如何确定优化参数 456
14.7.2 优化 458
第5篇 TensorFlow分布式
第15章 分布式运行环境之静态架构 462
15.1 总体架构 462
15.1.1 集群角度 462
15.1.2 分布式角度 463
15.1.3 系统角度 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的静态逻辑 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 业务实现Master类 480
15.4 Worker的静态逻辑 481
15.4.1 逻辑关系 481
15.4.2 GrpcRemoteWorker 483
15.4.3 GrpcWorkerService 483
15.4.4 Worker 487
15.4.5 GrpcWorker 488
第16章 分布式运行环境之动态逻辑 489
16.1 Session机制 489
16.1.1 概述
第1篇 分布式基础
第1章 分布式机器学习 2
1.1 机器学习概念 2
1.2 机器学习的特点 3
1.3 分布式训练的必要性 3
1.4 分布式机器学习研究领域 6
1.4.1 分布式机器学习的目标 6
1.4.2 分布式机器学习的分类 6
1.5 从模型角度看如何并行 8
1.5.1 并行方式 8
1.5.2 数据并行 9
1.5.3 模型并行 10
1.5.4 流水线并行 11
1.5.5 比对 12
1.6 从训练并发角度看如何并行 12
1.6.1 参数分布和通信拓扑 13
1.6.2 模型一致性和通信模式 14
1.6.3 训练分布 19
1.7 分布式机器学习编程接口 19
1.7.1 手动同步更新 20
1.7.2 指定任务和位置 20
1.7.3 猴子补丁优化器 21
1.7.4 Python作用域 21
1.8 PyTorch分布式 22
1.8.1 历史脉络 22
1.8.2 基本概念 23
1.9 总结 24
第2章 集合通信 26
2.1 通信模式 26
2.2 点对点通信 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 特点 34
2.5.2 策略 34
2.5.3 结构 35
2.5.4 Reduce-Scatter 35
2.5.5 All-Gather 38
2.5.6 通信性能 40
2.5.7 区别 40
第3章 参数服务器之PS-Lite 41
3.1 参数服务器 41
3.1.1 概念 41
3.1.2 历史渊源 42
3.1.3 问题 43
3.2 基础模块Postoffice 44
3.2.1 基本逻辑 44
3.2.2 系统启动 45
3.2.3 功能实现 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 基础类 61
3.4.3 Customer 62
3.4.4 功能函数 66
3.5 应用节点实现 67
3.5.1 SimpleApp 67
3.5.2 KVServer 68
3.5.3 KVWorker 68
3.5.4 总结 70
第2篇 数据并行 73
第4章 PyTorch DataParallel 74
4.1 综述 74
4.2 示例 76
4.3 定义 77
4.4 前向传播 78
4.5 计算损失 87
4.6 反向传播 88
4.7 总结 91
第5章 PyTorch DDP的基础架构 93
5.1 DDP总述 93
5.1.1 DDP的运行逻辑 93
5.1.2 DDP的使用 94
5.2 设计理念 97
5.2.1 系统设计 97
5.2.2 梯度归约 98
5.2.3 实施 99
5.3 基础概念 101
5.3.1 初始化方法 101
5.3.2 Store类 102
5.3.3 TCPStore类 104
5.3.4 进程组概念 107
5.3.5 构建进程组 109
5.4 架构和初始化 111
5.4.1 架构与迭代流程 111
5.4.2 初始化DDP 114
第6章 PyTorch DDP的动态逻辑 122
6.1 Reducer类 122
6.1.1 调用Reducer类 122
6.1.2 定义Reducer类 122
6.1.3 Bucket类 124
6.1.4 BucketReplica类 126
6.1.5 查询数据结构 128
6.1.6 梯度累积相关成员变量 131
6.1.7 初始化 135
6.1.8 静态图 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 机制概述 161
7.1.2 示例代码 162
7.1.3 运行逻辑 163
7.2 horovodrun 167
7.2.1 入口点 167
7.2.2 运行训练Job 168
7.2.3 Gloo实现 169
7.2.4 MPI实现 174
7.2.5 总结 174
7.3 网络基础和Driver 174
7.3.1 总体架构 175
7.3.2 基础网络服务 176
7.3.3 Driver服务 177
7.3.4 Task服务 178
7.3.5 总结 180
7.4 DistributedOptimizer 181
7.4.1 问题点 181
7.4.2 解决思路 182
7.4.3 TensorFlow 1.x 183
7.5 融合框架 191
7.5.1 总体架构 191
7.5.2 算子类体系 192
7.5.3 后台线程 194
7.5.4 执行线程 195
7.5.5 总结 196
7.6 后台线程架构 198
7.6.1 设计要点 198
7.6.2 总体代码 201
7.6.3 业务逻辑 202
第3篇 流水线并行
第8章 GPipe 210
8.1 流水线基本实现 210
8.1.1 流水线并行 210
8.1.2 GPipe概述 211
8.1.3 计算内存 213
8.1.4 计算算力 213
8.1.5 自动并行 214
8.2 梯度累积 218
8.2.1 基本概念 218
8.2.2 PyTorch实现 219
8.2.3 GPipe实现 223
8.3 Checkpointing 225
8.3.1 问题 225
8.3.2 解决方案 225
8.3.3 OpenAI 226
8.3.4 PyTorch实现 228
8.3.5 GPipe实现 240
第9章 PyTorch流水线并行 243
9.1 如何划分模型 243
9.1.1 使用方法 244
9.1.2 自动平衡 245
9.1.3 模型划分 247
9.2 切分数据和Runtime系统 249
9.2.1 分发小批量 249
9.2.2 Runtime 250
9.3 前向计算 255
9.3.1 设计 255
9.3.2 执行顺序 260
9.4 计算依赖 265
9.4.1 反向传播依赖 266
9.4.2 前向传播依赖 270
9.5 并行计算 274
9.5.1 总体架构 274
9.5.2 并行复制和计算 276
9.5.3 重计算 278
第10章 PipeDream之基础架构 280
10.1 总体思路 280
10.1.1 目前问题 280
10.1.2 1F1B策略概述 282
10.1.3 流水线方案 283
10.2 profile阶段 285
10.3 计算分区阶段 288
10.3.1 构建图 288
10.3.2 构建反链 289
10.3.3 计算分区 295
10.3.4 分析分区 302
10.3.5 输出 305
10.4 转换模型阶段 305
10.4.1 分离子图 306
10.4.2 转换模型 307
10.4.3 融合模型 308
第11章 PipeDream之动态逻辑 312
11.1 Runtime引擎 312
11.1.1 功能 312
11.1.2 总体逻辑 313
11.1.3 加载模型 314
11.1.4 实现 314
11.2 通信模块 323
11.2.1 类定义 324
11.2.2 构建 325
11.2.3 发送和接收 331
11.3 1F1B策略 333
11.3.1 设计思路 333
11.3.2 权重问题 335
11.3.3 实现 340
第4篇 模型并行
第12章 Megatron 346
12.1 设计思路 346
12.1.1 背景 346
12.1.2 张量模型并行 348
12.1.3 并行配置 354
12.1.4 结论 354
12.2 模型并行实现 354
12.2.1 并行MLP 355
12.2.2 ColumnParallelLinear 358
12.2.3 RowParallelLinear 363
12.2.4 总结 367
12.3 如何设置各种并行 367
12.3.1 初始化 368
12.3.2 起始状态 371
12.3.3 设置张量模型并行 373
12.3.4 设置流水线并行 375
12.3.5 设置数据并行 378
12.3.6 模型并行组 380
12.3.7 如何把模型分块到GPU上 381
12.4 Pipedream的流水线刷新 383
第13章 PyTorch如何实现模型并行 387
13.1 PyTorch模型并行 387
13.1.1 PyTorch特点 387
13.1.2 示例 387
13.2 分布式自动求导之设计 389
13.2.1 分布式RPC框架 389
13.2.2 自动求导记录 390
13.2.3 分布式自动求导上下文 391
13.2.4 分布式反向传播算法 392
13.2.5 分布式优化器 396
13.3 RPC基础 396
13.3.1 RPC代理 396
13.3.2 发送逻辑 396
13.3.3 接收逻辑 398
13.4 上下文相关 399
13.4.1 设计脉络 400
13.4.2 AutogradMetadata 401
13.4.3 DistAutogradContainer 403
13.4.4 DistAutogradContext 403
13.4.5 前向传播交互过程 408
13.5 如何切入引擎 411
13.5.1 反向传播 411
13.5.2 SendRpcBackward 415
13.5.3 总结 417
13.6 自动求导引擎 417
13.6.1 原生引擎 417
13.6.2 分布式引擎 419
13.6.3 总体执行 421
13.6.4 验证节点和边 421
13.6.5 计算依赖 422
13.6.6 执行GraphTask 429
13.6.7 RPC调用闭环 433
13.6.8 DistAccumulateGradCapture-
Hook 436
13.6.9 等待完成 442
第14章 分布式优化器 443
14.1 原生优化器 443
14.2 DP的优化器 445
14.3 DDP的优化器 446
14.3.1 流程 446
14.3.2 优化器状态 446
14.4 Horovod的优化器 447
14.4.1 利用钩子同步梯度 448
14.4.2 利用step()函数同步梯度 449
14.5 模型并行的分布式问题 450
14.6 PyTorch分布式优化器 451
14.6.1 初始化 452
14.6.2 更新参数 453
14.7 PipeDream分布式优化器 455
14.7.1 如何确定优化参数 456
14.7.2 优化 458
第5篇 TensorFlow分布式
第15章 分布式运行环境之静态架构 462
15.1 总体架构 462
15.1.1 集群角度 462
15.1.2 分布式角度 463
15.1.3 系统角度 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的静态逻辑 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 业务实现Master类 480
15.4 Worker的静态逻辑 481
15.4.1 逻辑关系 481
15.4.2 GrpcRemoteWorker 483
15.4.3 GrpcWorkerService 483
15.4.4 Worker 487
15.4.5 GrpcWorker 488
第16章 分布式运行环境之动态逻辑 489
16.1 Session机制 489
16.1.1 概述
猜您喜欢