【理论】深度学习的三种并行方式
简介
- 数据并行 (Data Parallelism)
- 模型/张量并行 (Model/Tensor Parallelism),注意这个术语在这几年的发展中产生了一些概念上的转变,现在其实人们所说的模型并行更多是指张量并行
- 流水线并行 (Pipeline Parallelism):理论上来讲也是模型并行的一种方式,只是在时间域上进行了设备的复用
数据并行
当模型规模足够小且单个 GPU 能够承载得下时,数据并行就是一种有效的分布式训练方式。
因为每个 GPU 都会复制一份模型的参数,我们只需要把训练数据均分给多个不同的 GPU,然后让每个 GPU 作为一个计算节点独立的完成前向和反向传播运算。
数据并行不仅通信量较小,而且可以很方便的做通信计算重叠,因此可以取得最好的加速比。
模型并行
如果模型的规模比较大,单个 GPU 的内存承载不下时,我们可以将模型网络结构进行拆分,将模型的单层分解成若干份,把每一份分配到不同的 GPU 中,从而在训练时实现模型并行。
训练过程中,正向和反向传播计算出的数据通过使用 All gather 或者 All reduce 的方法完成整合。
这样的特性使得模型并行成为处理模型中大 layer 的理想方案之一。
然而,深度神经网络层与层之间的依赖,使得通信成本和模型并行通信群组中的计算节点 (GPU) 数量正相关。
其他条件不变的情况下,模型规模的增加能够提供更好的计算通信比。
流水线并行
流水线并行,可以理解为层与层之间的重叠计算,也可以理解为按照模型的结构和深度,将不同的 layer 分配给指定 GPU 进行计算。
相较于数据并行需要 GPU 之间的全局通信,流水线并行只需其之间点对点地通讯传递部分 activations,这样的特性可以使流水并行对通讯带宽的需求降到更低。
然而,流水并行需要相对稳定的通讯频率来确保效率,这导致在应用时需要手动进行网络分段,并插入繁琐的通信原语。同时,流水线并行的并行效率也依赖各卡负载的手动调优。这些操作都对应用该技术的研究员提出了更高的要求。
原文链接:https://blog.csdn.net/qq_40910191/article/details/134070085
版权声明:
作者:Zhang, Hongxing
链接:http://zhx.info/archives/395
来源:张鸿兴的学习历程
文章版权归作者所有,未经允许请勿转载。