上下文并行指南¶
概述¶
上下文并行(CP)通过沿序列维度拆分计算或 KV 缓存存储来处理长上下文请求:
- 预填充上下文并行(PCP)将长预填充请求的预填充 token 拆分到额外的 rank 上。每个 rank 计算序列的不同部分,从而降低首 token 时间(TTFT)。
- 解码上下文并行(DCP)在 DCP 组内的 rank 之间对 KV 缓存进行分片,这些 rank 可能复用 PCP 组、张量并行(TP)组或两者的 rank,具体取决于并行配置。它可以减少重复的 KV 缓存存储,并可能提高解码吞吐量。
如需了解这两种策略的一般介绍,请参阅上游 vLLM 上下文并行部署 指南。
DSA-CP 是一种独立的稀疏注意力优化,由 additional_config.enable_dsa_cp 控制。启用它会自动启用 FlashComm 作为 all2all 后端;无需单独设置 enable_flashcomm1。一旦 PCP 支持稳定,它将被移除。有关其配置和模型要求,请参阅 附加配置。
支持的场景¶
预填充上下文并行¶
PCP 支持是实验性的,并且仅在 ModelRunner V2 中可用。下表显示了基础后端支持情况,以及每个功能是否可以与 PCP 组合使用:
| 注意力后端 | 基础 PCP | 前缀缓存 + PCP | 分块预填充 + PCP | MLAPO + PCP | 推测解码 + PCP | P/D 分离 + PCP | KV 缓存池 + PCP | 序列并行(SP)+ PCP |
|---|---|---|---|---|---|---|---|---|
| MLA | ✅ 完全兼容 | ✅ 完全兼容 | ✅ 完全兼容 | ✅ 完全兼容 | 🟠 部分兼容(MTP、eager 和 FULL_DECODE_ONLY) |
✅ 完全兼容(MooncakeConnectorV1) |
🟠 部分兼容(AscendStoreConnector,非逐层) |
❌ 不兼容 |
| GQA | ✅ 完全兼容 | ✅ 完全兼容 | ✅ 完全兼容 | — 不适用 | 🟠 部分兼容(Eagle3、eager 和 FULL_DECODE_ONLY) |
✅ 完全兼容(MooncakeConnectorV1) |
🟠 部分兼容(AscendStoreConnector,非逐层) |
❌ 不兼容 |
| SFA | ✅ 完全兼容 | ✅ 完全兼容 | ✅ 完全兼容 | ❌ 不兼容 | ❌ 不兼容 | ✅ 完全兼容(MooncakeConnectorV1) |
🟠 部分兼容(AscendStoreConnector,非逐层) |
❌ 不兼容 |
| DSA | ✅ 完全兼容 | ✅ 完全兼容 | ✅ 完全兼容 | — 不适用 | 🟠 部分兼容(MTP 和 DSpark、eager 和 FULL_DECODE_ONLY) |
✅ 完全兼容(MooncakeHybridConnector) |
🟠 部分兼容(AscendStoreConnector,非逐层) |
❌ 不兼容 |
- ✅ 完全兼容:支持基础路径或功能组合。
- 🟠 部分兼容:在所述限制下支持基础路径或功能组合。
- ❌ 不兼容:当前 MRV2 PCP 实现不支持该后端或功能组合。
- 不适用:该功能不适用于该注意力后端。
解码上下文并行¶
DCP 支持 vLLM Ascend 文档中记录的模型和硬件组合上的 eager 和 graph 执行、前缀缓存、分块预填充、推测解码、P/D 分离以及 MLAPO。下表显示了在不同设备和注意力后端上,每个功能是否可以与 DCP 组合使用:
| 设备 | 注意力后端 | 分块预填充 + DCP | 前缀缓存 + DCP | 图模式 + DCP | P/D 分离 + DCP | MLAPO + DCP | 推测解码 + DCP |
|---|---|---|---|---|---|---|---|
| Ascend A2/A3 | MLA/GQA | ✅ 完全兼容 | ✅ 完全兼容 | ✅ 完全兼容 | ✅ 完全兼容 | ✅ 完全兼容(MLA) — 不适用(GQA) |
✅ P/D 分离 ❌ PD 混合部署 |
| Ascend A2/A3 | SFA | ✅ 完全兼容 | ✅ 完全兼容 | ✅ 完全兼容 | ✅ 完全兼容 | ✅ 完全兼容 | ✅ 完全兼容 |
| 950PR&950DT Products | MLA/GQA | 🟠 部分兼容 | 🟠 部分兼容 | 🟠 部分兼容 | 🟠 部分兼容 | 🟠 部分兼容(MLA) — 不适用(GQA) |
🟠 P/D 分离 ❌ PD 混合部署 |
| 950PR&950DT Products | SFA | ❌ 不兼容 | ❌ 不兼容 | ❌ 不兼容 | ❌ 不兼容 | ❌ 不兼容 | ❌ 不兼容 |
- ✅ 完全兼容:支持将该功能与 DCP 组合使用。
- 🟠 部分兼容:实验性支持将该功能与 DCP 组合使用;接口和功能可能会变化。
- ❌ 不兼容:不支持将该功能与 DCP 组合使用。
- 不适用:该功能不适用于此注意力后端。
DSA-CP 支持 vLLM Ascend 文档中记录的模型和硬件组合上的前缀缓存、分块预填充、推测解码、P/D 分离。
使用方法¶
预填充上下文并行¶
启用 ModelRunner V2,并将 prefill_context_parallel_size 设置为 PCP rank 数量:
export VLLM_USE_V2_MODEL_RUNNER=1
vllm serve <supported-model> \
--tensor-parallel-size <tp-size> \
--prefill-context-parallel-size <pcp-size> \
--enforce-eager
与 DCP 不同,PCP 会增加额外的 rank:world_size_with_pcp = prefill_context_parallel_size * original_world_size。
推测解码¶
MRV2 PCP 支持 MLA 和 DSA 模型的 MTP、GQA 模型的 Eagle3,以及 DeepSeek-V4 DSA 模型的 DSpark。目标模型按配置的 PCP 拓扑运行,而草稿模型在每个 PCP rank 上复制,并以逻辑 PCP 大小 1 运行。仅为目标模型配置 PCP。
有关推测解码的一般配置和模型要求,请参阅 推测解码。
MLA 的 MTP¶
export VLLM_USE_V2_MODEL_RUNNER=1
vllm serve <mtp-capable-mla-model> \
--tensor-parallel-size 2 \
--prefill-context-parallel-size 2 \
--enable-chunked-prefill \
--enforce-eager \
--speculative-config '{"method": "mtp", "num_speculative_tokens": 3}'
Eagle3 与 GQA¶
export VLLM_USE_V2_MODEL_RUNNER=1
vllm serve <gqa-target-model> \
--tensor-parallel-size 2 \
--prefill-context-parallel-size 2 \
--enable-chunked-prefill \
--enforce-eager \
--speculative-config '{"method": "eagle3", "model": "<eagle3-draft-model>", "num_speculative_tokens": 3}'
对于任意一种方法,移除 --enforce-eager 并添加以下选项,以使用受支持的图模式:
约束¶
- PCP 仅支持 ModelRunner V2。
- 在 P/D 分离中,仅在 prefill(
kv_producer)引擎上启用 PCP;decode(kv_consumer)引擎必须使用prefill_context_parallel_size=1。 - 使用 PCP 的 KV 缓存池化仅支持
use_layerwise=false的AscendStoreConnector。 - PCP 推测解码支持 MLA 和 DSA 模型的 MTP、GQA 模型的 Eagle3,以及 DeepSeek-V4 DSA 模型的 DSpark。
- 草稿采样必须使用贪心方法。
- PCP 的完整图执行仅限于
FULL_DECODE_ONLY。 - MRV2 PCP 不支持流水线并行、编码器-解码器模型、多模态输入和 LoRA。
- PCP 推测解码不支持 SFA 草稿注意力。
- PCP 和 DCP 不能同时启用。
- PCP 推测解码不支持自适应验证。
- 动态草稿长度不在当前已验证范围内。
- 在 DSA 后端中,PCP 和 DSA-CP 不能同时启用。
解码上下文并行¶
vllm serve <glm-5.2-model> \
--tensor-parallel-size <N> \
--prefill-context-parallel-size 1 \
--decode-context-parallel-size <N> \
--block-size <B> \
--cp-kv-cache-interleave-size <B>
DCP 复用 TP 设备,并且不会增加 world size。
约束¶
- 对于 DeepSeek-R1 等 MLA 模型:
tensor_parallel_size >= decode_context_parallel_sizetensor_parallel_size % decode_context_parallel_size == 0
- 对于 Qwen3-235B 等 GQA 模型:
(tensor_parallel_size // num_key_value_heads) >= decode_context_parallel_size(tensor_parallel_size // num_key_value_heads) % decode_context_parallel_size == 0
-
在 KV 缓存传输场景(例如 KV 池化或 P/D 分离)中,将
cp_kv_cache_interleave_size设置为 KV 缓存的block_size(默认值:128):
DSA-CP¶
PCP 就绪后,DSA-CP 将被完全弃用。PCP 目前仍处于实验阶段,部分功能组合的支持仍在进行中。
若要使用相同的 world size 尝试 PCP,请将 TP 大小 N > 1 替换为
--tensor-parallel-size 1 --prefill-context-parallel-size N,并从
additional_config 中移除 enable_dsa_cp。当 TP 大小为 1 时,PCP 需要额外的
ranks。迁移前请检查上述兼容性和限制。
vllm serve <glm-5.2-model> \
--tensor-parallel-size <N> \
--block-size <B> \
--additional-config '{"enable_dsa_cp": true}'
有关实现细节,请参阅上下文并行设计文档。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 vl/vllm-ascend