数据并行
最朴素的并行:每人一份模型,各算各的数据,算完对答案。 规模扩展的第一支柱。
机制
flowchart TB
subgraph card0["卡 0"]
m0["模型副本"] --> g0["梯度 g0"]
end
subgraph card1["卡 1"]
m1["模型副本"] --> g1["梯度 g1"]
end
subgraph cardN["卡 N-1"]
mN["模型副本"] --> gN["梯度 gN"]
end
g0 & g1 & gN --> ar["AllReduce(求平均)"]
ar --> u["同步更新:w ← w - η·mean(g)"]数学上等价于大 batch 梯度下降:
显存问题与 ZeRO
朴素 DP 每卡要装下完整训练态
通信占比:什么时候 DP 是瓶颈
梯度同步时间(ring,集合通信篇模型)与单步计算时间之比:
关键杠杆是梯度累积:把
深入推导:大 batch 的收敛代价与 overlap 的上限
等效 batch 的统计代价。梯度累积
overlap 的深度。桶化 allreduce 的时间线:反向传播逐层产出梯度
为什么 DP 通信可重叠而 TP 不行。DP 的通信对象(梯度)与反向传播的计算对象(后面层的激活)无依赖,可以流水;TP 的 allreduce 在前向/反向的关键路径上(下一层计算依赖本层 allreduce 结果),结构上无法重叠(据 Patarasuk & Yuan 2009、Megatron-LM v2 分析)。
思考题
- 7B 模型、64 卡、
GB/s:不累积时单步 60 ms,梯度同步占多少?累积 8 步后呢? - ZeRO-3 通信 1.5×,为什么大规模训练仍然普遍开 ZeRO-1/2 而不是 3?
- DP=128 时等效 batch 已经 4M token,继续加卡到 512 卡该调整什么?
参考答案
, ?注意 64 卡 ring 的系数 : ,占比 ——完全不可接受。累积 8 步后 ,占比降至 ,再叠 overlap 后基本隐藏。 - ZeRO-3 需要每层前向/反向 allgather 权重,通信在计算关键路径上、只能部分重叠;ZeRO-1/2 通信模式与朴素 DP 相同(可完全重叠)。显存不够时才升级到 3,或改用 TP/PP 把权重先切薄。
- 等效 batch 已远超临界 batch size,继续线性堆卡收益递减:改用更激进的并行(数据并行维度之外,让每卡的 micro-batch 更小、降低梯度累积)、调大学习率配合 warmup,或接受次线性扩展。
小结
- DP = 复制模型 + allreduce 梯度,吞吐近线性扩展,是所有配置的最外层。
- 显存靠 ZeRO 修补,通信靠梯度累积 + 分桶重叠修补,两者都成熟后 DP 几乎免费。
- DP 的隐藏账是等效 batch 的收敛代价,它与梯度累积、卡数共享同一预算。
- 通信可重叠是 DP 区别于 TP 的结构优势。
参考资料
- Rajbhandari et al., ZeRO(arXiv 1910.02054)
- Patarasuk & Yuan, Bandwidth Optimal All-Reduce Algorithms(JPDC 2009)
- Goyal et al., Accurate, Large Minibatch SGD(arXiv 1706.02677,线性缩放规则)
- McCandlish et al., An Empirical Model of Large-Batch Training(arXiv 1812.06162,临界 batch size)