Skip to content

分布式计算 — 概念

并行策略概览

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 引入了分阶段生命周期:

  1. _stage_ep_size():连接备用 rank,保持 masked(不活跃)
  2. _commit_staged_state():unmask 新 rank,断开旧连接
  3. _NixlEPBufferState:替代旧的 (buffer, ep_size) 元组,管理缓冲区状态
  4. 支持跨异构 MoE 层的 workspace 增长

并行策略组合

组合适用场景通信量
TP=2单节点 2 GPU中等
TP=4单节点 4/8 GPU较高
TP=8 + PP=2双节点 16 GPU中等
TP=8 + EP=8MoE 模型 64 GPU中高
DP=4高并发小模型

分布式 KV 缓存传输

vLLM 支持 KV 缓存在 GPU 间传输:

  • Disaggregated Prefill:prefill 和 decode 在不同 GPU 上执行
  • KV Transfer:通过 NCCL 或自定义传输层移动 KV 缓存
  • KV Events:通过事件通知机制协调 KV 缓存的生产和消费

相关概念