Update Chapter 10 distribute training (#56)

This commit is contained in:
Cheng Lai
2022-03-10 16:15:39 +08:00
committed by GitHub
parent eb1d14dd94
commit dc96a6faab
35 changed files with 6407 additions and 21 deletions

View File

@@ -4,11 +4,11 @@
### 概述
![单节点训练系统](../img/ch09/ch10-single-node.pdf)
![单节点训练系统](../img/ch09/ch10-single-node.svg)
:width:`800px`
:label:`ch10-single-node`
分布式训练系统的设计目标是:将单节点训练系统转化成**等价的**并行训练系统,从而在不影响模型精度的条件下完成训练过程的加速。一个单节点训练系统往往如:numref:`ch10-single-node`所示。一个训练过程会由多个数据小批次mini-batch完成。在图中一个数据小批次被标示为**数据**。训练系统会利用数据小批次来生成梯度,提升模型精度。这个过程由一个训练**程序**实现。在实际中,这个程序往往实现了一个多层神经网络的执行过程。
分布式训练系统的设计目标是:将单节点训练系统转化成**等价的**并行训练系统,从而在不影响模型精度的条件下完成训练过程的加速。一个单节点训练系统往往如 :numref:`ch10-single-node`所示。一个训练过程会由多个数据小批次mini-batch完成。在图中一个数据小批次被标示为**数据**。训练系统会利用数据小批次来生成梯度,提升模型精度。这个过程由一个训练**程序**实现。在实际中,这个程序往往实现了一个多层神经网络的执行过程。
该神经网络的执行由一个计算图Computational
Graph表达。这个图有多个相互连接的算子Operator每个算子会拥有计算参数。每个算子往往会实现一个神经网络层Neural
Network Layer而参数则代表了这个层在训练中所更新的的权重Weights
@@ -27,7 +27,7 @@ Network Layer而参数则代表了这个层在训练中所更新的的权
| 多程序 | 多程序单数据:模型并行 | 多程序多数据:混合并行 |
:label:`ch10-parallel-methods`
给定一个单节点训练系统,人们会对**数据**和**程序**分区Partition从而完成并行加速。:numref:`ch10-parallel-methods`总结了不同的切分方法。单节点训练系统可以被归类于
给定一个单节点训练系统,人们会对**数据**和**程序**分区Partition从而完成并行加速。 :numref:`ch10-parallel-methods`总结了不同的切分方法。单节点训练系统可以被归类于
单程序单数据模式。而假如用户希望使用更多的设备来实现并行计算,他们首先可以选择对数据进行分区,并将同一个程序复制到多个设备上并行执行。这种方式是单程序多数据模式,常被称为**数据并行**Data
Parallelism。另一种并行方式是对程序进行分区程序的算子会被分发给多个设备按照依次完成。这种模式是
多程序单数据模式,常被称为**模型并行**Model
@@ -38,7 +38,7 @@ Parallelism
### 数据并行
![数据并行训练系统](../img/ch09/ch10-data-parallel.pdf)
![数据并行训练系统](../img/ch09/ch10-data-parallel.svg)
:width:`800px`
:label:`ch10-data-parallel`
@@ -51,7 +51,7 @@ Communication的Allreduce操作来完成。
### 模型并行
![模型并行系统:算子内并行](../img/ch09/ch10-model-parallel-intra-op.pdf)
![模型并行系统:算子内并行](../img/ch09/ch10-model-parallel-intra-op.svg)
:width:`800px`
:label:`ch10-model-parallel-intra-op`
@@ -65,7 +65,7 @@ Parallelism
另一种内存不足的场景是:模型的总内存需求超过了单设备的内存容量。在这种场景下,假如我们总共有$N$个算子和$M$个设备,我们可以将算子平摊给这$M$个设备,让每个设备仅需负责$N/M$个算子的前向和反向计算,降低设备的内存开销。这种并行方式是模型并行的另一种应用,被称为**算子间并行**Inter-operator
Parallelism
![模型并行系统:算子间并行](../img/ch09/ch10-model-parallel-inter-op.pdf)
![模型并行系统:算子间并行](../img/ch09/ch10-model-parallel-inter-op.svg)
:width:`800px`
:label:`ch10-model-parallel-inter-op`
@@ -73,8 +73,8 @@ Parallelism
### 混合并行
![混合并行系统](../img/ch09/ch10-hybrid-parallel.pdf)
![混合并行系统](../img/ch09/ch10-hybrid-parallel.svg)
:width:`800px`
:label:`ch10-hybrid-parallel`
在训练大型人工智能模型中,我们往往会同时面对算力不足和内存不足。因此,我们需要混合使用数据并行和模型并行,这种方法被称为混合并行。:numref:`ch10-hybrid-parallel`提供了一个由4个设备实现的混合并行的例子。在这个例子中我们首先实现算子间并行来解决训练程序内存开销过大的问题该训练程序的算子1和算子2被分摊到了设备1和设备2上。进一步我们通过数据并行来添加3和设备4提升系统算力。为了达到这一点我们对训练数据进行分区数据分区1和数据分区2并将模型算子1和算子2分配复制到设备3和设备4上生成可以并行执行的程序副本。在前向计算的过程中设备1和设备3上的算子1副本同时开始计算结果分别发送Send给设备2和设备4完成算子2副本的计算。在反向计算中设备2和设备4同时开始计算梯度本地梯度通过Allreduce进行平均。反向计算传递到设备1和设备3上的算子1副本结束。
在训练大型人工智能模型中,我们往往会同时面对算力不足和内存不足。因此,我们需要混合使用数据并行和模型并行,这种方法被称为混合并行。 :numref:`ch10-hybrid-parallel`提供了一个由4个设备实现的混合并行的例子。在这个例子中我们首先实现算子间并行来解决训练程序内存开销过大的问题该训练程序的算子1和算子2被分摊到了设备1和设备2上。进一步我们通过数据并行来添加3和设备4提升系统算力。为了达到这一点我们对训练数据进行分区数据分区1和数据分区2并将模型算子1和算子2分配复制到设备3和设备4上生成可以并行执行的程序副本。在前向计算的过程中设备1和设备3上的算子1副本同时开始计算结果分别发送Send给设备2和设备4完成算子2副本的计算。在反向计算中设备2和设备4同时开始计算梯度本地梯度通过Allreduce进行平均。反向计算传递到设备1和设备3上的算子1副本结束。