fwd和bwd是什么意思啊(一文捋顺千亿模型训练技术:流水线并行、张量并行和3D并行)

流水线并行和张量并行都是针对模型本身的划分,目的是利用有限的单卡显存来训练更大的模型。简单来说,流水线并行是按照模型层级进行划分,而张量并行则是针对模型中的矩阵乘法操作进行拆分。3D并行则是将这三种并行方式(流水线并行、张量并行和数据并行)结合起来,以进一步提高模型训练的效率和显存的利用率。
一、流水线并行
流水线并行的目标是训练更大的模型。我们介绍朴素的层并行方法及其局限性。然后,详细介绍流水线并行算法GPipe和PipeDream。
1. 朴素的层并行
这种方法简单地将模型的每一层分配给不同的GPU进行计算。它的缺点在于GPU利用率低,因为任意时刻只有一层在运行,其他GPU都处于空闲状态。计算和通信没有重叠,导致效率较低。对于大batch size,显存占用也是一个巨大的挑战。
2. GPipe
GPipe通过将minibatch划分为更小且相等尺寸的microbatch来提高效率。每个microbatch独立进行前后向传播,然后将梯度相加得到整个batch的梯度。GPipe解决了朴素层并行中的一些问题,如GPU利用率低和显存占用大。它通过微批次处理的方式,使得每个GPU在任何时刻都有任务执行,提高了GPU的利用率。它也减少了显存的占用。GPipe也存在一些问题,如bubbles问题和显存需求的波动。
3. PipeDream
PipeDream是GPipe的一个改进版本。与GPipe不同的是,PipeDream在一个microbatch的前向传播完成后,立即开始反向传播,从而更早地释放显存。这使得PipeDream在显存需求方面更具优势。
二、张量并行
张量并行的核心是针对Transformer模型中的矩阵乘法操作进行拆分,以降低模型对单卡的显存需求。
1. 1D张量并行
1D张量并行主要关注矩阵乘法操作。通过行或列的拆分,将大矩阵乘法拆分成多个小矩阵乘法,从而降低显存需求。
2. 多头注意力并行
多头注意力并行是针对Transformer模型中的多头注意力机制进行的优化。由于多头注意力的各个头之间本质上是独立的,因此可以并行运算。
三、3D并行
3D并行是流水线并行、张量并行和数据并行的结合。通过将这三种并行技术相结合,可以在提高计算效率的降低显存的占用。
以一个包含两个节点、每个节点有8个GPU的示例来说明3D并行的实现方式。通过流水线并行将整个模型划分为若干份sub_model。然后,通过张量并行对sub_model进行进一步的拆分。通过数据并行保证并行中的相同模型参数读取相同的数据。在这个过程中,GPU的划分和组合需要考虑到通信开销和计算效率的因素。
流水线并行和张量并行通过划分模型和拆分计算降低了单个显卡的显存消耗,提高了显存效率。而3D并行则将这三种技术相结合,进一步提高了模型训练的效率和显存的利用率。参考资料中提供了更多关于这些技术的详细信息和研究论文。
