跳转至

AI Traning Parallism

导言

AI 训练时,有些分布式训练的常见并行概念需要了解。

数据并行 Data Parallelism

数据分布在不同机器,但是需要allreduce同步权重 FS(fully shared)DP

  • 思想:把同一个模型放在多个GPU上,batch数据平均分布到各个GPU上,并行计算。
  • 难点:注意参数同步和信息过期问题。
  • 优点:加速比线性。部署简单工作量小,每个节点内的计算效率高。适合规模小,计算密集度高的模型。由于部署简单,是最先采用的并行方式。
  • 缺点:需要在每个节点复制所有模型参数,显存重复度高,利用率低,并不适合大模型的部署。

特点+具体操作:

  • 同构模型,不同数据:每个节点都包含完整的模型,以及模型的参数(weight,parameter),输入数据则根据模型的并行度进行拆分,分别被每个节点读取;
    • 假设我们有8张GPU卡或者昇腾的NPU卡来训练图片分类的模型,训练的批量为160,那么每张卡上面分到的批量数据(min-batch)为20,每张卡基于样本数据完成训练。
  • 独立运行:每个节点读取相应的输入数据后,分别独自处理模型的前向和反向传播,并得到Gradients,归并所有的梯度并更新梯度;
  • 梯度聚合:因为各张卡上处理的数据样本不同,所以获得的梯度会有些差别。因此,需要对梯度进行聚合(求和、均值)等计算来保持和单卡训练相同的结果,最后再更新参数。
  • 统一通讯:所有节点之间的通信,主要包括前向传播的Loss归并以及反向传播的gradient归并以及更新,这些通信则是通过相应的通信原语(gather/reduce/broadcast)操作。
  • 参数更新:梯度聚合会让各卡的模型以相同的梯度值同时进入参数更新阶段,然后针对新的数据进行下一轮训练。

1

模型并行 Model Parallelism (层内切分的模型并行)

  • 思想:将模型的每一层,手动拆分成多分到不同GPU上。例如,将模型张量的参数根据特定的维度进行分割,根据手工设计,由系统分配对应训练数据和特征图(可以是分割或复制的方法)。
  • 难点:需要人为的切分设计。也有必要的数据传输。
  • 优点:解决了数据并行显存利用率低的问题,其通过对模型的切分,每个节点只需要放置一部分的模型参数,从而使得其可以部署更大的模型。

Megatron-LM模型在训练中采用更为手工的方式,将每个transformer块都进行了分割,实现了高性能的计算。

2

张量并行 Tensor Parallelism (特殊的模型并行)

  • 思想:一个操作中进行并行计算,主要是矩阵-矩阵乘法。张量并行训练是将一个张量沿特定维度分成 N 块,每个设备只持有整个张量的 1/N,同时不影响计算图的正确性。这需要额外的通信来确保结果的正确性。
  • 难点:额外的通信
  • 优点:每个设备只持有整个张量的 1/N

张量并行

流水线并行 Pipeline Model Parallelism (层间切分的模型并行)

  • 思想:AI训练是重复的有依赖长过程,可以打散成有依赖的基本单元micro-batch进行流水线调度, 提高设备的利用率。
  • 难点:依赖基本单元间的数据传输时间,如何隐藏。流水线并行的方式更复杂,并且micro-batch的方式减少了单节点计算密集度,增加了节点间的信息传递频率,使得取得一个好的加速比成为一个难题。
  • 优点:解决了数据并行显存利用率低的问题,其通过对模型的切分,每个节点只需要放置一部分的模型参数,从而使得其可以部署更大的模型。

层间拆分来减小参数压力的思想

简单流水线GPipe

3

Generalized流水线PipeDream

4

混合并行

  • 先数据并行 + 后流水线并行
  • 例子:卷积层参数量小,但计算量大(数据并行)。全连接层参数量大,但计算量小(模型并行)。
  • 例子2:2021年10月,微软和英伟达联合提出了 PTD-P(Inter-node Pipeline Parallelism, Intra-node Tensor Parallelism, and Data Parallelism)训练加速方法,通过数据并行、张量并行和 Pipeline 并行“三管齐下”的方式,将模型的吞吐量提高 10%以上。该并行方法可以在3072个GPU 上,以502P的算力对一万亿参数的GPT 架构模型进行训练,实现单GPU吞吐量52%的性能提升。

Picture curtesy of Hugging Face

专家并行 MoE (Mixture-of-Experts)

  • 思想:一种基于稀疏 MoE 层的深度学习模型架构被提出,即将大模型拆分成多个小模型(专家,expert), 每轮迭代根据样本决定激活一部分专家用于计算,
  • 优点:只计算一部分,达到了节省计算资源的效果;
  • 实现:MoE 将模型的某一层扩展为多个具有相同结构的专家网络(expert),并由门(gate)网络决定激活哪些 expert 用于计算,从而实现超大规模稀疏模型的训练。

将中间层扩展为具有n个expert的MoE结构

异构系统的并行

人们思考为什么 CPU 内存没有被用于分布式训练。

参考文献

评论