Appearance
将模型按层切分到多个 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.py—ParallelConfig.pipeline_parallel_size控制 PP 度。
相关概念
- tensor-parallelism — 通常与 PP 正交组合,形成 2D 并行
- cuda-graph — Pipeline 各 stage 可独立捕获 CUDA Graph
- kv-cache — Pipeline 各 stage 各自管理所属层的 KV Cache
- continuous-batching — PP 场景下的调度需考虑 stage 间的同步