2、分布式训练基础:数据并行、模型并行、流水线并行、混合并行、通信原语与集合通信

当模型参数量从百万级增长到千亿级,单张 GPU 的显存和算力都无法独立承载训练任务。分布式训练的本质,是把计算图、参数张量和数据批次切分到多个设备上,再通过通信把切分后的结果重新拼合。理解并行策略与通信原语,是后续做梯度累积和通信重叠优化的前提。

一、核心原理:三种切分维度

分布式训练的所有策略,本质上都在回答一个问题:切什么。数据并行切分的是输入批次,模型并行切分的是参数张量,流水线并行切分的是网络层序列。三者的通信模式、显存收益和适用场景完全不同。

  • 数据并行(DP):每张卡持有完整模型副本,各自处理不同 mini-batch,反向传播后通过 AllReduce 同步梯度。显存不省,但吞吐随卡数线性增长。
  • 张量并行(TP):把单个矩阵乘按行或列切分到多卡,如 Megatron 的 ColumnParallelLinear 与 RowParallelLinear。通信频繁,适合 NVLink 高带宽域内。
  • 流水线并行(PP):按层切分,不同 stage 放在不同设备上,通过 micro-batch 填充流水线。通信量小,但存在气泡(bubble)开销。
  • 混合并行:TP 域内 + PP 跨节点 + DP 复制,是当前大模型训练的主流组合,如 3D 并行。
三种并行策略的切分维度与通信模式 数据并行 DP 完整模型副本 × N batch A batch B AllReduce 梯度同步 通信量 ∝ 参数量 显存:不节省 吞吐:线性扩展 张量并行 TP 权重矩阵按行/列切分 W 左半 W 右半 AllGather / ReduceScatter 通信量 ∝ 激活值 显存:节省参数 依赖 NVLink 高带宽 流水线并行 PP 网络层按 stage 切分 S0 S1 S2 Send / Recv 点对点 通信量 ∝ 激活值 显存:节省层 存在流水线气泡

二、通信原语与集合通信

并行策略决定了“怎么切”,集合通信决定了“怎么合”。NCCL 提供的集合通信原语是所有并行策略的底层支撑,理解它们的语义和代价,才能判断通信瓶颈在哪里。

原语语义典型用途通信量
Broadcast一卡数据广播到所有卡参数初始化O(P)
AllReduce所有卡归约后结果广播给所有卡DP 梯度同步O(2P)
ReduceScatter归约后按卡切分结果ZeRO、TP 反向O(P)
AllGather所有卡数据拼接后分发ZeRO、TP 前向O(P)
Send/Recv点对点传输PP stage 间传递O(激活值)
关键结论:AllReduce 可分解为 ReduceScatter + AllGather,通信量减半。Ring AllReduce 的通信量与卡数无关,只与参数量成正比,这是数据并行能扩展到千卡的前提。

三、方法流程:从单卡到混合并行

实际训练中,通常按以下顺序组合并行策略:

  1. 先判断显存瓶颈:若单层参数就放不下,必须用 TP;若层数多但单层可放下,优先 PP。
  2. TP 域内:限制在单节点 8 卡 NVLink 内,避免跨节点高延迟。
  3. PP 跨节点:stage 数等于节点数或节点数的倍数,减少跨节点通信。
  4. DP 复制:剩余维度用 DP 扩展,梯度同步用 AllReduce。
  5. 梯度累积:在 DP 之上叠加,用时间换显存,配合通信重叠隐藏 AllReduce 开销。
# 典型 3D 并行配置(Megatron-LM 风格)
--tensor-model-parallel-size 8      # TP=8,单节点内
--pipeline-model-parallel-size 4    # PP=4,跨 4 个节点
--data-parallel-size 16             # DP=16,剩余维度
# 总卡数 = 8 × 4 × 16 = 512
--gradient-accumulation-steps 8     # 梯度累积,等效 batch 扩大 8 倍
--use-distributed-optimizer         # ZeRO-1,优化器状态分片

四、案例与场景:175B 模型的并行切分

以 175B 参数模型为例,FP16 下仅权重就需 350GB,单卡 80GB 完全放不下。典型切分方案:

  • TP=8:每层注意力与 FFN 的权重矩阵切到 8 卡,单卡权重降至约 44GB。
  • PP=8:96 层切成 8 个 stage,每 stage 12 层,进一步降低单卡层数。
  • DP=8:剩余维度复制,梯度 AllReduce 同步。
  • 总卡数 512:8×8×8,配合梯度累积 16 步,等效 batch 达 2048。

此时通信模式为:TP 域内每层两次 AllReduce(前向+反向),PP 域内 stage 间 Send/Recv,DP 域内每步一次 AllReduce。三者叠加,通信开销可能占训练时间的 30% 以上,这正是后续通信重叠优化的切入点。

五、误区与复盘

常见误区一:认为 TP 越大越好。TP 超过单节点 8 卡后,跨节点 AllReduce 延迟急剧上升,反而拖慢训练。TP 应严格限制在 NVLink 域内。
常见误区二:忽略 PP 的气泡开销。PP 的 bubble 比例约为 (PP-1)/(micro_batch + PP - 1),micro-batch 太少时气泡可达 30% 以上,必须用足够多的 micro-batch 填充。
复盘要点:并行策略的选择不是“哪个先进用哪个”,而是根据模型规模、集群拓扑和显存预算做权衡。TP 解决单层放不下,PP 解决层数太多,DP 解决吞吐不足,梯度累积解决 batch 太大。四者组合,才是大模型训练的完整拼图。