Appearance
分布式计算 — 概念
并行策略概览
Tensor Parallelism(TP)
将模型的权重矩阵按列或行切分到多个 GPU:
ColumnParallelLinear
Y = XW, W 按列切分为 [W₁, W₂]
GPU 0: Y₁ = XW₁
GPU 1: Y₂ = XW₂
Y = [Y₁, Y₂] (无需通信)RowParallelLinear
Y = XW, W 按行切分为 [W₁; W₂]
GPU 0: Y₁ = X₁W₁ (X 按列切分)
GPU 1: Y₂ = X₂W₂
Y = Y₁ + Y₂ (需要 All-Reduce)TP 的通信开销
每个 Transformer 层需要 2 次 All-Reduce:
- Attention 后的 output projection
- MLP 后的 output
通信量与 hidden_size 成正比,与 sequence length 无关。
Pipeline Parallelism(PP)
将模型的不同层分配到不同 GPU:
PP 的挑战
- 气泡(bubble):GPU 之间存在等待时间
- 微批次(micro-batching):将请求分成小批次以减少气泡
- KV 缓存:需要跨 GPU 传递 KV 缓存
Data Parallelism(DP)
复制整个模型到多个 GPU,每个 GPU 处理不同的请求:
- 不需要模型权重通信
- 需要请求在 GPU 间均衡分配
- 适合小模型高并发场景
Expert Parallelism(EP)
MoE 模型中,将专家分布到不同 GPU:
- 需要 All-to-All 通信:token 发送到对应专家的 GPU
- 负载均衡是关键挑战
- 支持弹性专家并行(动态调整专家分配)
Elastic EP(弹性专家并行)
Elastic EP 允许在线扩展/缩减 EP 大小而不中断服务:
关键机制:
- Staged 量化:在 scale-up 前预创建替换 MoE 内核
- NIXL EP All2All:新 rank 先以 masked 状态加入集体通信,commit 时 unmask
- 即时参与:新 rank 可以立即加入 EP 集体通信
NIXL EP All2All 重构
NixlEPAll2AllManager 引入了分阶段生命周期:
_stage_ep_size():连接备用 rank,保持 masked(不活跃)_commit_staged_state():unmask 新 rank,断开旧连接_NixlEPBufferState:替代旧的(buffer, ep_size)元组,管理缓冲区状态- 支持跨异构 MoE 层的 workspace 增长
并行策略组合
| 组合 | 适用场景 | 通信量 |
|---|---|---|
| TP=2 | 单节点 2 GPU | 中等 |
| TP=4 | 单节点 4/8 GPU | 较高 |
| TP=8 + PP=2 | 双节点 16 GPU | 中等 |
| TP=8 + EP=8 | MoE 模型 64 GPU | 中高 |
| DP=4 | 高并发小模型 | 无 |
分布式 KV 缓存传输
vLLM 支持 KV 缓存在 GPU 间传输:
- Disaggregated Prefill:prefill 和 decode 在不同 GPU 上执行
- KV Transfer:通过 NCCL 或自定义传输层移动 KV 缓存
- KV Events:通过事件通知机制协调 KV 缓存的生产和消费
相关概念
- Tensor Parallelism — 张量并行详解
- Pipeline Parallelism — 流水线并行详解
- MoE — 专家混合模型与专家并行
- KV Cache — 分布式 KV 缓存传输