2、分布式训练基础:数据并行、模型并行、流水线并行、混合并行的概念与对比
当模型参数量从百万级增长到千亿级,单张 GPU 的显存和算力都无法独立承载一次完整的训练迭代。分布式训练的本质,就是把「模型计算」「梯度同步」「参数更新」这三件事拆分到多张卡、多台机器上协同完成。理解数据并行、模型并行、流水线并行与混合并行这四种基本范式,是后续掌握 DeepSpeed ZeRO、Offload、通信优化等能力的前提。
一、核心原理:四种并行范式在切什么
四种并行方式的根本区别,在于「切分维度」不同:数据并行切分的是样本批次,模型并行切分的是单层内的张量,流水线并行切分的是层与层之间的阶段,混合并行则是把上述多种切分方式组合使用。
- 数据并行(DP):每张卡持有完整模型副本,各自吃不同的 mini-batch 数据,反向传播后通过 AllReduce 同步梯度,保证各副本参数一致。优点是实现简单、扩展性好;缺点是每张卡都要存一份完整模型、优化器状态和梯度,显存冗余极高。
- 模型并行(TP/MP):把单个算子(如矩阵乘、注意力头)按维度切开,分布到多张卡上,前向和反向都需要卡间通信拼接结果。适合单层就大到放不下的超大模型,但通信频繁,对带宽要求极高。
- 流水线并行(PP):按层把模型切成若干 stage,每个 stage 放在不同卡上,数据以 micro-batch 形式在 stage 间流动,形成「流水线」。它降低了单卡显存压力,但会引入流水线气泡(bubble),需要靠 micro-batch 数量来摊薄。
- 混合并行:在超大模型训练中,通常同时使用 TP + PP + DP,例如「节点内 TP、节点间 PP、跨节点 DP」,兼顾显存、通信与扩展效率。
二、方法流程:一次迭代中四种并行如何协作
以典型的「TP + PP + DP」混合并行为例,一次训练迭代的流程可以拆成如下步骤:
- 数据加载器把全局 batch 切分给各个 DP 组,每个 DP 组拿到不同的数据分片。
- 在每个 DP 组内部,micro-batch 依次进入流水线的第一个 stage。
- 每个 stage 内部,层计算通过 TP 切分到多张卡上,前向时用 AllGather 拼接激活,反向时用 ReduceScatter 汇总梯度。
- stage 之间通过点对点通信传递激活值和梯度,形成流水线推进。
- 所有 micro-batch 完成后,各 DP 组之间执行 AllReduce,同步全局梯度。
- 优化器更新参数,进入下一轮迭代。
关键点:TP 的通信发生在层内,频率最高;PP 的通信发生在stage 边界,频率最低;DP 的通信发生在迭代末尾,频率中等。三者叠加时,通信模式会互相干扰,因此需要合理规划拓扑。
三、案例场景:不同规模模型该选哪种并行
假设我们有三类典型场景,选择策略差异明显:
| 场景 | 模型规模 | 推荐并行策略 | 原因 |
|---|---|---|---|
| 中小模型微调 | 1B 以下 | 纯 DP(或 DP + ZeRO) | 单卡可放下,DP 实现简单、扩展线性度好 |
| 单层超大模型 | 10B~100B | TP + DP | 单层参数过大,必须切张量;层数不多,PP 收益有限 |
| 超深超大模型 | 100B 以上 | TP + PP + DP | 层数和单层宽度都大,必须组合切分才能放下 |
例如训练一个 175B 参数的模型,常见配置是:节点内 8 卡做 TP,跨节点做 PP,剩余维度做 DP。这样既利用了节点内 NVLink 的高带宽,又通过 PP 降低了跨节点通信量。
四、误区与复盘:并行策略选择的常见坑
误区一:并行度越高越好。 实际上 TP 超过 8 卡后,通信开销会迅速吃掉算力收益;PP 的 stage 数过多会导致气泡占比升高,micro-batch 数量不足时 GPU 利用率可能低于 50%。
误区二:忽略拓扑感知。 把 TP 放在跨节点链路上,会让每层通信都走慢速网络,训练速度可能下降数倍。正确做法是 TP 尽量限制在 NVLink 域内,PP 和 DP 再跨节点。
复盘建议: 选择并行策略时,先问三个问题——单卡能否放下完整模型?单层能否放下?层数是否过多?根据答案依次决定是否需要 DP、TP、PP,最后再用混合并行做组合优化。
理解这四种范式的切分逻辑与通信特征,是后续学习 DeepSpeed ZeRO 分片、Offload 卸载、通信压缩等高级特性的基础。只有先看清「切什么、怎么切、切完怎么通信」,才能在真实训练任务中做出合理的并行配置决策。