λLLM Wiki

Pipeline Parallelism

流水线并行(Pipeline Parallelism, PP) 将模型的层按顺序切分为多个 阶段(stage),每个 stage 分配到不同的 GPU(或 GPU 组)上。一个 mini-batch 被进一步拆成多个 微批次(micro-batch),不同 micro-batch 在不同 stage 上形成流水线重叠,提升硬件利用率。

核心思路

假设模型有 LL 层,切成 PP 个 stage,每个 stage 包含 L/PL/P 层:

  • Stage 0:第 1 ~ L/PL/P
  • Stage 1:第 L/P+1L/P+1 ~ 2L/P2L/P
  • Stage P1P-1:最后 L/PL/P

前向时,每个 stage 完成本地层的计算后,把激活值传给下一个 stage(点对点通信)。反向时,梯度沿反方向传播。

流水线气泡

朴素的 PP 有严重的 气泡(bubble) 问题:当 stage 0 做完前向等着做反向时,中间大量时间处于空闲状态。

气泡的大小与 stage 数和 micro-batch 数的比值相关。设 PP 为 stage 数,MM 为 micro-batch 数,气泡比例约为:

bubble ratioP1M\text{bubble ratio} \approx \frac{P - 1}{M}

因此增大 MM(更多 micro-batch)可以摊薄气泡,但这受限于显存——每个 micro-batch 的激活值都需要保留到反向传播。

调度策略

GPipe 调度

最简单的方式:所有 micro-batch 的前向先全部执行完,再统一执行反向。气泡集中在中间。

1F1B 调度

1F1B(One Forward One Backward) 交替执行前向和反向。每个 stage 在完成一个 micro-batch 的前向后,尽快开始另一个 micro-batch 的反向,从而在前向和反向之间形成更紧凑的流水线。

优势:显存占用更低(不需要同时保留所有 micro-batch 的激活值),气泡也有所减少。

交错虚拟流水线(Interleaved Virtual Pipeline)

Megatron 支持的进一步优化:每个 GPU 不再只负责连续的一段层,而是交替负责多个不连续的层段(virtual stages)。代价是通信次数增多,但气泡比例可以进一步降低。

通信特征

  • 通信类型:点对点(point-to-point),相邻 stage 之间传递激活值或梯度
  • 通信量:每个 micro-batch 的中间激活值大小,通常远小于 TP 的 all-reduce 量
  • 通信拓扑:线性链状,相邻 stage 之间。可以跨节点部署(通信频率低,对带宽要求不如 TP 严格)

与其他并行的组合

PP 通常不单独使用,而是和 TPDP 组合成 3D 并行

  • 节点内:TP 切分每一层的权重
  • 节点间(相邻节点):PP 切分不同层
  • 跨节点组:DP 复制整个 pipeline 做数据并行

这种组合中,PP 负责在层间维度做切分,使模型可以跨越多个节点的显存上限。

PP 在 RL 系统中的特殊性

在 RL 系统中使用 PP 时,权重更新的同步变得更复杂。slime 的 bucket 策略需要手动处理 PP 维度的参数聚合——不同于 verl 只有 TP 的简单场景,PP 要求跨 stage 协调权重的收集和广播。

相关页面

Comments