10.4 流水线并行(Pipeline Parallelism)
流水线并行是大模型分布式训练的核心并行策略之一。它将模型按深度方向(层)切分为若干阶段(Stage),每个阶段分配到不同的 GPU 上,数据像工厂流水线一样依次流经各个设备。与张量并行频繁的 All-Reduce 通信不同,流水线并行只需在相邻阶段之间进行点对点传输,对网络带宽的要求更低,因此特别适合**跨节点(inter-node)**部署。
然而,朴素的流水线并行存在致命的效率缺陷:当第一个 GPU 在处理数据时,其余所有 GPU 都在空闲等待——这种设备空转被称为流水线气泡(Pipeline Bubble)。本节将沿着气泡率不断降低的技术演进线索,依次介绍 GPipe、1F1B、1F1B Interleaved、零泡沫流水线并行(Zero-Bubble PP),以及 DeepSeek-V3 所采用的 DualPipe 架构。
10.4.1 朴素流水线与气泡问题
考虑一个有
微批次(Micro-batch) 是解决这一问题的基本思路:将全局 Batch 切分为
但即使引入微批次,流水线在**启动阶段(Fill Phase)和排空阶段(Drain Phase)**仍然存在不可避免的空闲时间,这就是流水线气泡的根本来源。围绕"如何更高效地调度微批次的前向和反向传播以压缩气泡",学术界和工业界提出了一系列方案。
10.4.2 GPipe
GPipe(Huang et al., 2019)是最早被广泛采用的微批次流水线并行方案。其调度策略非常直观:先完成所有微批次的前向传播,再完成所有微批次的反向传播。
以
时间 ──────────────────────────────────────────────────────────────────►
GPU 0: | F0 | F1 | F2 | F3 | | B3 | B2 | B1 | B0 |
GPU 1: | F0 | F1 | F2 | F3 | | B3 | B2 | B1 | B0 |
GPU 2: | F0 | F1 | F2 | F3 | | B3 | B2 | B1 | B0 |
GPU 3: | F0 | F1 | F2 | F3 | B3 | B2 | B1 | B0 |
▲
前向完成,反向开始气泡分析。 在上图中可以清晰看到:前向启动阶段和反向排空阶段各有
- 有效计算时间:
- 气泡时间:
- 气泡率:
当
内存问题。 GPipe 需要同时保存所有
10.4.3 1F1B 调度
1F1B(One Forward One Backward)调度由 PipeDream(Narayanan et al., 2019)提出,核心思想是:在流水线填满后,交替执行一次前向和一次反向,而不是等所有前向完成再统一做反向。
时间 ──────────────────────────────────────────────────────────────────►
GPU 0: | F0 | F1 | F2 | F3 | B0 | F4 | B1 | F5 | B2 | | B3 | B4 | B5 |
GPU 1: | F0 | F1 | F2 | B0 | F3 | B1 | F4 | B2 | F5 | B3 | | B4 | B5 |
GPU 2: | F0 | F1 | B0 | F2 | B1 | F3 | B2 | F4 | B3 | F5 | B4 | B5 |
GPU 3: | F0 | B0 | F1 | B1 | F2 | B2 | F3 | B3 | F4 | B4 | F5 | B5 |1F1B 的关键优势是内存效率。 在稳态阶段,每个 GPU 在完成一个微批次的前向后就立即进行一个微批次的反向,反向完成后该微批次的激活值即可释放。因此,每个 GPU 同时需要保存的激活值数量不再随
气泡率。 1F1B 的气泡仅出现在启动阶段(前
但由于激活内存占用大幅降低,1F1B 允许在相同显存预算下使用更多微批次,间接降低了实际气泡率。
10.4.4 1F1B Interleaved(交错式流水线)
1F1B Interleaved(Narayanan et al., 2021, Megatron-LM v2)在 1F1B 的基础上引入了一个巧妙的改进:让每个 GPU 不只负责一个连续的阶段,而是负责模型中多个不连续的层块(虚拟阶段)。
假设模型共有
气泡率降低为:
代价。 虚拟阶段的引入使得通信次数增加了
10.4.5 气泡率对比
下表汇总了上述调度策略的核心指标(
| 调度策略 | 气泡率 | 峰值激活内存 | 通信模式 | 实现复杂度 |
|---|---|---|---|---|
| GPipe | 相邻点对点 | 低 | ||
| 1F1B | 相邻点对点 | 中 | ||
| 1F1B Interleaved | 可能涉及非相邻通信, | 高 | ||
| Zero-Bubble | 理论趋近 0 | 相邻点对点 | 很高 |
表 10-1:流水线并行调度策略对比。
10.4.6 零泡沫流水线并行(Zero-Bubble PP)
前述方案中,气泡始终无法完全消除。Qi et al.(2024)提出的零泡沫流水线并行(Zero-Bubble Pipeline Parallelism)对此给出了一个关键洞察:反向传播可以被分解为两个独立的部分。
具体而言,对于流水线中的一个阶段,其反向传播包含两类梯度计算:
- 输入梯度(B):计算当前阶段输入的梯度
,该梯度需要传回上一个阶段,存在跨阶段的串行依赖。 - 权重梯度(W):计算当前阶段参数的梯度
,该梯度仅用于本阶段的参数更新,不依赖任何其他阶段的计算结果。
传统方案将 B 和 W 捆绑在一起执行。零泡沫方案的核心思路是将二者解耦:优先执行有跨阶段依赖的 B(保证流水线不被阻塞),将无依赖的 W 调度到气泡时段执行,从而用有效计算"填满"气泡。
传统 1F1B(B 和 W 绑定):
GPU 0: | F0 | F1 | F2 | F3 | BW0 | BW1 | BW2 | BW3 | idle |
GPU 1: | F0 | F1 | F2 | BW0 | F3 | BW1 | BW2 | BW3 | idle |
(BW = B + W 绑定执行,气泡不可避免)
Zero-Bubble(B 和 W 解耦):
GPU 0: | F0 | F1 | F2 | F3 | B0 | B1 | B2 | B3 | W0 | W1 | W2 | W3 |
GPU 1: | F0 | F1 | F2 | B0 | F3 | B1 | B2 | B3 | W0 | W1 | W2 | W3 |
(W 被调度到原本空闲的时段,气泡被填充)ZB-H1 与 ZB-H2。 论文提出了两个方案层次:
- ZB-H1:在启动阶段的气泡中插入 W 计算。理论气泡率可以降到接近零,但存在少量因调度约束导致的残余气泡。
- ZB-H2:通过更激进的调度(允许 W 的计算提前于某些 F),并引入优化器状态的修正(因为 W 的执行时机改变意味着部分微批次的权重梯度是基于"旧"参数计算的),理论上可以实现严格的零气泡。
自动搜索调度。 与手工设计调度方案不同,零泡沫方案通过 ILP(整数线性规划)自动搜索最优调度策略,给定阶段数
代价与限制。
- 实现复杂度显著提高:需要修改自动微分系统以支持 B/W 的独立调度。
- ZB-H2 引入了参数版本不一致问题,需要额外的修正机制(类似于学习率预热或梯度补偿)来保证收敛性。
- 在通信带宽成为瓶颈时,气泡可能无法被完全填满。
10.4.7 DualPipe 架构(DeepSeek-V3)
DeepSeek-V3 的训练系统面临一个特殊挑战:作为 MoE(混合专家)模型,其前向和反向传播中包含大量的全对全通信(All-to-All)——用于在专家并行中分发和收集 Token。这些通信开销在传统流水线方案中会与计算串行执行,严重降低效率。
DualPipe 的核心设计目标是:在流水线并行的框架下,将计算与通信完全重叠,同时最小化气泡。
双向流水线。 DualPipe 的第一个创新是采用双向调度:将微批次分为两组,一组从流水线的前端(Stage 0)向后端流动,另一组从后端(Stage
单向流水线(传统):
GPU 0: → F → F → F → ...
GPU 1: → F → F → F → ...
GPU 2: → F → F → F → ...
GPU 3: → F → F → F → ...
双向流水线(DualPipe):
GPU 0: → F → F → ← B ← B (前半程处理正向微批次,后半程处理反向微批次)
GPU 1: → F → ← B → F ← B (两个方向的微批次交错执行)
GPU 2: ← B → ← F → B ← F
GPU 3: ← B ← B → → F → F (从后端发起的微批次先到达这里)计算-通信重叠。 DualPipe 的第二个创新是对每个微批次的计算进行细粒度分解。它将一个 Transformer 层的前向/反向过程拆分为:
- Attention 部分:计算密集,几乎不涉及跨设备通信。
- MoE 部分:涉及 All-to-All 通信(分发 Token 到对应专家 → 专家计算 → 收集结果)。
DualPipe 将 Attention 的计算与 MoE 的通信在时间上重叠:当 GPU 在执行一个微批次的 Attention 计算时,同时在后台进行另一个微批次的 All-to-All 通信。两个方向的微批次恰好提供了这种交错执行的机会——正向微批次的计算可以与反向微批次的通信重叠,反之亦然。
气泡分析。 由于双向调度使流水线的有效填充速度翻倍,DualPipe 的气泡比传统单向方案进一步减半。当微批次数量足够多时,计算与通信的重叠几乎消除了通信开销对吞吐量的影响。
对硬件拓扑的要求。 DualPipe 假设流水线的两端 GPU 能够同时启动微批次的注入,这对网络拓扑和通信调度提出了额外要求。在 DeepSeek-V3 的实际部署中,每个节点内部使用 NVLink 进行高带宽的张量并行和专家并行通信,节点之间使用 InfiniBand 进行流水线并行的点对点传输,DualPipe 的双向调度很好地契合了这种层次化的网络架构。
10.4.8 小结
流水线并行的技术演进可以概括为一条清晰的主线:不断压缩流水线气泡,同时控制内存开销和实现复杂度。
- GPipe 最先提出微批次流水线方案,调度简单但激活内存开销大,气泡率为
。 - 1F1B 通过交替执行前向和反向将激活内存从
降至 ,气泡率不变但实际效率更高。 - 1F1B Interleaved 引入虚拟阶段,将气泡率进一步降至
,代价是通信量增加。 - Zero-Bubble PP 通过解耦输入梯度和权重梯度的计算,将无依赖的权重梯度调度到气泡时段,理论上实现零气泡。
- DualPipe 面向 MoE 架构设计,通过双向调度和计算-通信重叠,在大规模混合专家模型训练中同时最小化气泡和通信开销。
从工程实践的角度看,流水线并行通常被部署在**节点间(inter-node)**维度——因为它只需要相邻阶段之间的点对点通信,对带宽的需求远低于张量并行。在现代大模型训练的 3D/4D 并行框架中,流水线并行与张量并行(节点内)和数据并行(跨副本)协同工作,共同支撑起千亿乃至万亿参数模型的高效训练。