一句话定义
分布式训练是把计算、参数或数据切到多张 GPU/多台机器上:数据并行切 batch,张量并行切权重,流水线并行切层,序列并行切序列。
为什么需要它
大模型放不进单卡,或者单卡训练太慢。分布式训练把显存和算力扩展出去,但会引入通信、同步和调度成本;并行方式要和模型结构、互联带宽匹配。
常见并行
数据并行(DP)
每张卡复制一份完整模型,batch 切分到各卡;反向结束后 all-reduce 同步梯度。适合模型能放进单卡、想扩大吞吐的场景。
张量并行(TP)
把同一层的权重矩阵切到多卡,每卡算一部分矩阵乘,再 all-reduce 合并激活。通信频繁,适合 NVLink 等高速互联。
流水线并行(PP)
把不同层分到不同 GPU,micro-batch 依次流过各阶段;减少单卡层数,但会有流水空泡和调度开销。
序列并行(SP)
把序列维度切到多卡,常和 TP 组合,降低长序列激活显存。
模型并行(MP)
TP 和 PP 的统称;实际训练通常 DP + TP + PP 混合使用。
关键取舍
- DP 简单,但模型必须放得进单卡;TP/PP 能放更大模型,但通信和实现更复杂。
- TP 适合节点内高速互联,PP 适合跨节点;拓扑选错,扩展效率会很差。
- 全局 batch、学习率和并行度要一起调。
- 通信、同步、空泡和故障恢复都是实际成本。
常见误区
- GPU 越多越快:通信和空泡可能让扩展效率很低。
- DP 能解决所有显存问题:模型本身放不下时要用 TP/PP。
- TP/PP 可以随便选:它们对互联带宽和模型结构要求不同。
- 分布式训练没有单卡问题:数值、调度和故障恢复会更复杂。
用在哪里
- 预训练、长上下文训练、超大模型微调。
- 多机多卡集群;根据模型大小和互联选择 DP/TP/PP 组合。
- 训练吞吐上不去时,先看通信、空泡和数据管线。
相关概念
- 训练效率:混合精度与梯度检查点。
- 预训练:分布式训练的主战场。
- Transformer:被切分的模型结构。