Skip to content

将模型按层切分到多个 GPU 上,每个 GPU 负责一组连续层的计算,形成流水线。

为什么需要 Pipeline Parallelism

当模型太大无法放入单个 GPU 且 Tensor Parallelism 因通信开销无法跨节点扩展时,Pipeline Parallelism(PP)提供了另一种切分维度。PP 将模型层分配到不同 GPU,每个 GPU 仅存储部分层,通信量为 hidden_dim 维度的激活值,远小于 TP 的 AllReduce,适合跨节点部署。

核心原理

  • Stage 划分:模型按层均分到 PP 个 stage,每个 stage 是一组连续的 Transformer 层。
  • Micro-batching:将 batch 拆分为多个 micro-batch 依次送入流水线,提高 GPU 利用率。
  • 通信模式:相邻 stage 之间通过 P2P Send/Recv 传递中间激活,通信量 = batch_size * seq_len * hidden_dim。
  • Bubble 问题:流水线存在空闲时间(bubble),PP 越大 bubble 越严重,通常 PP 度不超过 4-8。

在源码中的实现

  • vllm/distributed/pipeline_parallel/ — PP 通信原语(P2P Send/Recv)。
  • vllm/worker/worker.py — 每个 Worker 根据 pipeline_rank 加载对应的模型层。
  • vllm/model_executor/models/ — 模型定义中通过 get_pipeline_model 切分层。
  • vllm/config.pyParallelConfig.pipeline_parallel_size 控制 PP 度。

相关概念