References & Notations
Item | Instructions |
---|---|
Title | DAPPLE: A Pipelined Data Parallel Approach for Training Large Models |
Authors | Shiqing Fan, Yi Rong, Chen Meng, Zongyan Cao, Siyu Wang, Zhen Zheng, Chuan Wu, Guoping Long, Jun Yang, Lixue Xia, Lansong Diao, Xiaoyong Liu, Wei Lin |
Conference | PPoPP’21 |
Notations
Item | Instructions |
---|---|
M | 将global batchsize 切分成 M个micro batchsize |
L | Pipeline Latency: a single global batch的执行时间 |
pivot stage | 有最少的bubble的stage |
Q | id of pivot stage |
$T_w$ | warmup阶段的时间 |
$T_s$ | steady阶段的时间 |
$T_e$ | ending阶段的时间 |
$F_i$ | 第i个stage的前向计算时间 |
$B_i$ | 第i个stage的反向计算时间 |
$P_i$ | 第i个stage的参数 |
$g_s$ | 第i个stage的梯度 |
$AR(P_i, g_i)$ | 对第i个stage做Allreduce的时间 |
$T_{PL}(j,m,\cal{g})$ | 对前j个layers,使用m个GPUs,这m个GPUs的id set是$\cal{g}$,得到的最小的$L$,剩下的layers组成最后一个stages,并且replicate到剩下的(G-m)个GPUs |
Abstract
流水线并行的两个问题:
- 如何在确保收敛的同时提高计算效率
- 如何在不增加计算的情况下减少内存使用
作者提出了DAPPLE:结合数据并行与流水线并行的一个同步训练框架。
- a novel parallelization strategy _planner_: 解决partition和placement问题,探索DP与PP结合的最佳方案(对应上面的问题1)
- a new runtime scheduling algorithm: 降低内存占用,同时与重计算方式正交,并且不影响吞吐量。(对应上面的问题2)
DAPPLE的实验结果:
- 相比于PipeDream,有3.23x的提升(啥的提升,没写清楚)
- 相比于GPipe,吞吐量有1.6x的提升,内存节省12%。
Introduction
Previous Work
现有的Pipeline Parallelism工作大致可以分为以下两类
- sync,代表工作有Gpipe,Pipe-Torch。需要在相邻两个iteration之间插入梯度同步操作以确保收敛。会有显著的内存峰值过高的问题,重计算等工作可以解决这类问题。
- async, 代表工作有PipeDream。
Previous Problem
- 对于async类,PipeDream改善了time-to-accuracy的性能,但是由于采用的异步训练,考虑到收敛性问题,工业界不常用这个,这个在阿里巴巴报告中有展示;另外异步训练需要存储多个版本的Weights。
- 对于sync类,均需要非常高的内存占用:因为前向的所有小批次结束前不能调度反向传播。用重计算解决会降低训练速度。
Solution & Challenge
DAPPLE:结合了Pipeline Parallelism & Data Parallelism。属于sync类,保证了收敛性,用async的方法,避免存储多个版本的参数。
总结一下,DAAPLE解决了两个挑战:
- (模型结构+硬件配置)—> 最优的并行策略。其中目标空间:DP,PP,DP+PP。
提出了a _sync_ pipeline planner: 自动生成最优的并行策略,可以最小化一次迭代训练的执行时间;将layer划分成多个stages。 - 如何调度流水线阶段的计算。
提出了DAPPLE schedule:以低的内存峰值来实现较高的执行效率;关键是以deterministic and interleaved方式来调度前后向阶段,尽早释放内存。
Evaluation
- 模型类型: image classification, machine translation, language modeling.
- 硬件环境:3种
此外,DAPPLE也适用于VGG这种大weights小activations的模型。
Contributions
- 探索了结合DP与PP。
- 提出了DAPPLE planner,解决了partition和placement问题,并探索了数据和流水线并行的最佳混合策略。
- 不需要存储多个版本的参数,不增加计算的前提下降低内存占用量,并且可以结合重计算进一步降低。
The DAPPLE Approach Overview
- Profiler: (DNN model) $\rightarrow$ (每个层的执行时间、ACTIVATION大小、Parameters大小)
- Planner: (Profiler的结果、_global batch size_) $\rightarrow$ (parallelization plan)
- Runtime: (Planner的结果, 原始model graph) $\rightarrow$ pipelined parallel graph.
DAPPLE Schedule
Limitations of GPipe Schedule
_pivot stage_: 拥有最少bubble的stage。
_warmup phase_: 开始$\rightarrow$ _pivot stage_ 的第一个前向阶段
_ending phase_: _pivot stage_ 的最后一个反向阶段 $\rightarrow$ 最后
_steady phase_: 介于 _warmup phase_ 和 _ending phase_ 之间的阶段。
_L_: 上述三个阶段的和。
有如下公式:
其中$T_s$的估计中忽略了其中存在的bubble
Device Assignment
对于异步类的(PipeDream),决定整体性能的是单个stage的速度;
对于同步类的,决定整体性能的是单个iteration的速度。
提供了3种分配设备的方式:
Planning Algorithm
寻找最优的(partition, replication, placement strategy) $\rightarrow$ minimize $L$.
Determining The Pivot Stage Q.
估计Q的公式(heuristic)
Algorithm Formula
使用$T_{PL}(N,G,\cal{G})$来表示结果,于是可以采用动态规划的方式求解。(实际上就是穷举$N,G,\cal{G}$的组合,避免重复计算)
显而易见,$T_{PL}$可以用动态规划来解决。
Contributions over previous work
Uneven Pipeline Partitioning with Fewer Stages
按以下方法对模型进行划分会得到更好的性能:
- 尽可能少的stages(GPipe也提出)
- 不必严格均分
参考下图:
Versatile Device Placement
这里前面没看懂,但是举得例子看懂了。
对于一些Activation size >> Weights size的模型,利用高速NVLink来传输activation,利用低速的Ethernet来做Allreduce。
DAPPLE Runtime
实现在TF1.12中,TF1.12能根据DAG与其中的数据/控制依赖来调度整个图的执行。
DAPPLE Runtime: (模型,Planner的结果) $\rightarrow$ (流水行并行的图,并将之执行在分布式设备上)
流程:
- 对于每个pipeline stage,构建一个前向/反向的图
- 相邻层之间需要对activation做通信,所以在相邻层之间加入额外的split/concat节点(为什么是这两个类型?)
- 构建一个子图用来执行weights updates.
后面为实现细节,暂时略过。
Evaluation
Experimental Setup
Benchmarks
用到的数据集分别是WMT16 En-DE(Translation), SQuAD2.0(Language Model), ImageNet(Image Classification)。
Hardware Configurations
3种硬件配置:配置A在GPU集群中最常见,但是比较贵。为了照顾买不起的一些机构或个人,也在配置B与C中进行了测试。
软件版本:64bits CentOS + CUDA 9.0 + cuDNN v7.3 + NCCL 2.4.2 + TF-1.12
BatchSize and Training Setup
参考Table1的最后一列。
Planning Results
表的解释:
- Plan:
- P:Q 两个stage,第一个stage replicates到P个GPUs,第二个stage replicates到Q个GPUs
- DP Data Parallelism
- Straight 16个stages?
- Split Position: 表示模型按照对应比例,切分成两个stages
- ACR: 没看懂
结果:
- ResNet50: 全部DP,因为ResNet50的网络模型小(100MB),计算密集
- VGG-19: 在Config A&B中采用DP,因为模型大小适中(548MB),内联带宽较大;在Config C中,根据15:1做切分(估计根据VGG-19的前15/16部分是计算,后1/16部分有大量的params和gradients)
- GNMT-16/BERT-48/XLNet-36等:暂略
- AmoebaNet-36: 暂略。
Performance Analysis
Related Work
Conclusion
Question
Q: DAPPLE中每个GPU的内存使用量的情况如何?
其中,红色、紫色、绿色分别表示DAPPLE组别中GPU0,GPU1,GPU2的Peak Memory Usage。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。