流水并行
把网络的层切成段,每段一台设备。通信最省,但会"漏气"。
机制
代价:气泡
理想流水线要求所有卡同时忙碌,但真实执行有"充满"与"排空"阶段——部分卡在等。GPipe 式(all-forward-then-all-backward)调度的气泡率:
1F1B 与交错流水
两个经典改进:
- 1F1B(one-forward-one-backward):每个 worker 交替执行一次前向、一次反向,把 in-flight 激活数从
降到 (显存省),气泡率变为 (并行策略篇); - 交错流水(interleaved):每卡持有多个不连续的层块(virtual stage),流水线上"多点注入",气泡进一步除以虚拟阶段数
,代价是 P2P 通信次数增加 倍。
gantt
title 1F1B 流水示意(p=4,M=6,只画前向 F 与反向 B 的时间块)
dateFormat X
axisFormat %s
section 卡1
F1 F2 F3 F4 :0, 4
B1 :4, 5
section 卡2
等1格 :0, 1
F1 F2 F3 :1, 4
B1 B2 :4, 6
section 卡3
等2格 :0, 2
F1 F2 :2, 4
B1 :4, 5
section 卡4
等3格 :0, 3
F1 :3, 4示意图:越靠后的 stage 启动越晚,"充满"阶段的空隙就是气泡。
负载均衡:切段不是均匀切
各层计算量并非相等(embedding/输出头 vs 中间层)。切段要按计算量(FLOPs)而非层数均衡,否则最慢的 stage 决定整条流水线的节拍——流水线吞吐由最慢一段决定,这是并行里少见的"木桶效应"刚性约束。
深入推导:气泡、显存与 M 的三体问题
1F1B 下 in-flight 激活为
- 气泡率
要小 ; - 激活显存
(1F1B)与 无关(这是 1F1B 相对 GPipe 的核心优势,GPipe 是 ); - 等效 batch
( 为 DP 度数)受收敛约束。
解法组合:
zero-bubble 前沿:把 B 拆成
(据 Huang et al. 2019、Narayanan et al. 2021、Qi et al. 2023。)
思考题
、 :GPipe 与 1F1B 的气泡率各是多少? - 为什么 PP 的 P2P 通信可以走跨机慢网络,而 TP 不行?
- 切 16 段时某一段计算量比其他段大 20%,整条流水线损失多少吞吐?
参考答案
- GPipe:
;1F1B: 。 越大两者越接近,GPipe 的劣势主要在激活显存。 - P2P 点对点数据量小(单次
)、频次低(每步每卡一收一发),50 GB/s 的 IB 传输 134 MB 约 2.7 ms,对秒级的训练步可接受且可与计算重叠;TP 的 allreduce 每层 4 次、在关键路径上,慢网络无法容忍。 - 全流水线节拍由最慢段决定:有效吞吐
,损失 17%——比任何气泡都严重,负载均衡是 PP 的第一优先级。
小结
- PP 沿层切,通信最省(P2P、可跨机),代价是气泡。
- 1F1B 把激活显存从
降到 ,气泡率 ;交错流水进一步除以 。 - 负载不均直接变成吞吐损失,切段按 FLOPs 而非层数。
- PP 配置 = 气泡、显存、等效 batch 的三体问题。
参考资料
- Huang et al., GPipe(arXiv 1811.06965)
- Narayanan et al., PipeDream-2BW(arXiv 2006.09503)
- Narayanan et al., Megatron-LM v2(arXiv 2104.04473,1F1B 与交错流水)
- Qi et al., Zero Bubble Pipeline Parallelism(arXiv 2401.10241)