跳转到内容

流水线并行

流水线并行(PP)把模型按层切成几段,每张卡(或每组卡)负责一段,数据像流水线一样流过。它通信量最小(只在段边界传激活)、对跨机最友好,但引入一个固有问题:气泡——流水线没填满时,一部分卡在空等。本章讲清楚切分方式、气泡的量化、以及一阶/交错调度怎么填气泡。

顺序切分(naive/sequential):24 层模型、PP=4,每卡 6 层,串行排:

GPU0: 层1-6 ══════╗
GPU1: ╠══ 层7-12 ══════╗
GPU2: ╠══ 层13-18 ══════╗
GPU3: ╠══ 层19-24

嵌套切分(interleaved):每卡拿不连续的层块(如 GPU0 拿层 1-3 和层 13-15),让数据多次经过每张卡,为交错调度做准备。

顺序切分简单但气泡大;嵌套切分气泡小但通信次数多。这是 PP 最核心的设计权衡。

先算理想的流水线。设微批(microbatch)数为 MM,流水线深度为 pp,一次前向+反向的时间为 tf+tbt_f + t_b:

一阶流水线(1F1B)的气泡时间:

Tbubble=(p−1)×(tf+tb)Tideal=M×(tf+tb)T_{\text{bubble}} = (p-1) \times (t_f + t_b) \qquad T_{\text{ideal}} = M \times (t_f + t_b)

气泡占比 = p−1M\frac{p-1}{M}。这个公式决定一切:

配置气泡占比说明
p=4p=4,M=32M=32~9%可接受
p=8p=8,M=32M=32~22%明显
p=8p=8,M=128M=128~5.5%靠微批数压气泡
p=16p=16,M=32M=32~47%近半算力在空转

两条结论:

一、微批数要远大于流水线深度(M≥4pM \ge 4p 起步)。微批数受全局 batch 约束:微批太多 → 全局 batch 太大 → 训练不稳定。这就是 PP 度不能随便加的原因。

二、PP 度是"最后才加"的并行:通信最便宜但气泡最贵。典型用法是"DP 和 TP 填不下了才上 PP"。

交错 1F1B(Megatron interleaved schedule)利用嵌套切分:每个微批在流水线里走 vv 个"虚拟阶段",各卡的空闲窗口被其他微批的计算填上:

调度气泡占比通信次数说明
一阶 1F1Bp−1M\frac{p-1}{M}每微批 2 次标准方案
交错 1F1B(vv 段)p−1v⋅M\frac{p-1}{v \cdot M}×vv气泡除以 vv,通信乘 vv
ZeroBubble / 双流接近 0更复杂研究前沿,工程成熟度参差

交错的本质:把气泡时间卖给通信次数。 节点间带宽便宜(PP 通信量本来就小)时非常划算;带宽紧张时要小心——通信次数 ×vv 也可能成为新瓶颈。

PP 每步只传两次激活(前向一次、反向一次),量 = batch × seqlen × hidden:

每次传输=B×s×h×2 字节\text{每次传输} = B \times s \times h \times 2\ \text{字节}

7B 模型、batch 8、seqlen 4096:~500 MB 每 step 只传几次——对比 TP 的每层 4 次,PP 的通信量小两个数量级。这就是 PP 可以跑在 400 Gbps IB 上甚至更低带宽的原因,也是它"跨机撑开"的资本。

PP-DP 的经典组合:PP 占满跨机的垂直空间,DP 沿水平扩展,两者正交。

PP 与 DP 在显存上是等价的(每卡都存 1/p1/p 的层),但计算-通信特性完全不同:

PPDP/ZeRO-3
通信量小(边界激活)大(参数 all-gather)
气泡有,p−1M\frac{p-1}{M}无气泡(有重叠损耗)
batch 约束要求多微批无
收敛与单卡等价(微批累积梯度)等价

选 PP 的理由:跨机带宽紧张 + 全局 batch 允许拆微批。选 ZeRO-3 的理由:带宽充足、不想管气泡。两者都是"把模型切小"的手段,选型看集群的带宽与 batch 约束。

  • PP 度怎么定:先用 TP+DP 填满节点内,装不下再按"装不下的倍数"上 PP;PP 度尽量小(2、4、8),因为气泡随 p 线性增长
  • 微批数:M≥4pM \ge 4p 起步,同时全局 batch 落在训练稳定区间(大模型典型 4M–64M token)
  • 嵌套切分的层选择:不连续块要避开 embedding/输出头(它们不分段),且块间的通信要落在网络代价可接受的位置(见拓扑映射)
  • 调试:PP 的死锁与挂起最常见的原因是微批数或 shape 不一致;先打印每个 stage 的输入 shape 对表
  • PP 按层切段,通信量最小(每步只传边界激活),可跨机、甚至跨行。
  • 气泡占比 = p−1M\frac{p-1}{M}:微批数必须远大于流水线深度(M≥4pM \ge 4p),否则算力过半在空等。
  • 交错调度用通信次数换气泡(除以 vv),带宽便宜时划算。
  • PP 与 ZeRO-3 显存等价:带宽紧张选 PP(管气泡),带宽充足选 ZeRO-3(免管气泡)。
  • PP 度最后才加、能小则小;先 TP+DP 填节点内。