解耦式预填充#
为何需要解耦式预填充?#
此功能旨在优化大规模推理任务中的单输出令牌时间 (TPOT) 和首令牌时间 (TTFT)。其动机主要有两方面:
调整 P 节点和 D 节点的并行策略与实例数量 采用解耦式预填充策略,此功能允许系统灵活调整 P(预填充器)节点和 D(解码器)节点的并行化策略(例如数据并行 (dp)、张量并行 (tp) 和专家并行 (ep))以及实例数量。这有助于实现更好的系统性能调优,特别是针对 TTFT 和 TPOT。
优化 TPOT 在没有解耦式预填充策略的情况下,预填充任务会在解码过程中插入,导致效率低下和延迟。解耦式预填充通过允许更好地控制系统 TPOT 来解决此问题。通过有效管理分块的预填充任务,系统避免了确定最佳分块大小的挑战,并对生成输出令牌所需时间提供了更可靠的控制。
使用方法#
vLLM Ascend 目前支持两种用于处理 KV 缓存管理的连接器:
MooncakeConnector:D 节点从 P 节点拉取 KV 缓存。
MooncakeLayerwiseConnector:P 节点以分层方式将 KV 缓存推送到 D 节点。
有关分步部署和配置,请参考以下指南: https://docs.vllm.ai/projects/ascend/en/latest/tutorials/features/pd_disaggregation_mooncake_multi_node.html
工作原理#
1.设计思路#
在解耦式预填充架构下,一个全局代理接收外部请求,将预填充请求转发给 P 节点,将解码请求转发给 D 节点;KV 缓存(键值缓存)通过点对点 (P2P) 通信在 P 节点和 D 节点之间交换。
2.实现设计#
我们的设计图如下所示,分别展示了拉取和推送方案。

Mooncake 连接器#
请求被发送到代理的
_handle_completions端点。代理调用
select_prefiller选择一个 P 节点并转发请求,配置kv_transfer_params为do_remote_decode=True、max_completion_tokens=1和min_tokens=1。P 节点的调度器完成预填充后,
update_from_output调用调度连接器的request_finished以延迟释放 KV 缓存,构建kv_transfer_params为do_remote_prefill=True,并返回给代理。代理调用
select_decoder选择一个 D 节点并转发请求。在 D 节点上,调度器将请求标记为
RequestStatus.WAITING_FOR_REMOTE_KVS,预分配 KV 缓存,调用kv_connector_no_forward拉取远程 KV 缓存,然后通知 P 节点释放 KV 缓存并继续解码以返回结果。
Mooncake 分层连接器#
请求被发送到代理的
_handle_completions端点。代理调用
select_decoder选择一个 D 节点并转发请求,配置kv_transfer_params为do_remote_prefill=True并设置metaserver端点。在 D 节点上,调度器使用
kv_transfer_params将请求标记为RequestStatus.WAITING_FOR_REMOTE_KVS,预分配 KV 缓存,然后调用kv_connector_no_forward向元服务器发送请求并等待 KV 缓存传输完成。代理的
metaserver端点接收请求,调用select_prefiller选择一个 P 节点,并转发请求,设置kv_transfer_params为do_remote_decode=True、max_completion_tokens=1和min_tokens=1。在处理过程中,P 节点的调度器逐层推送 KV 缓存;所有层推送完成后,它释放请求并通知 D 节点开始解码。
D 节点执行解码并返回结果。
3. Interface Design#
以 MooncakeConnector 为例,系统被组织成三个主要类:
MooncakeConnector:提供核心接口的基类。
MooncakeConnectorScheduler:用于在引擎核心内调度连接器的接口,负责管理 KV 缓存传输需求和完成情况。
MooncakeConnectorWorker:用于在工作进程中管理 KV 缓存注册和传输的接口。
4.规格设计#
此功能灵活,支持多种配置,包括使用 MLA 和 GQA 模型的设置。它与 A2 和 A3 硬件配置兼容,并支持跨多个 P 节点和 D 节点的相等和不相等 TP 设置场景。
功能 |
状态 |
|---|---|
A2 |
🟢 功能正常 |
A3 |
🟢 功能正常 |
相等 TP 配置 |
🟢 功能正常 |
不相等 TP 配置 |
🟢 功能正常 |
MLA |
🟢 功能正常 |
GQA |
🟢 功能正常 |
🟢 功能正常:完全可运行,正在进行优化。
🔵 实验性:实验性支持,接口和功能可能发生变化。
🚧 开发中:正在积极开发,即将支持。
🟡 计划中:计划在未来实现(部分可能已有开放的 PR/RFC)。
🔴 无计划/已弃用:无计划或已被 vLLM 弃用。
DFX 分析#
1.配置参数验证#
通过检查 kv_connector 类型是否受支持以及 kv_connector_module_path 是否存在且可加载来验证 KV 传输配置。传输失败时,发出清晰的错误日志以供诊断。
2.端口冲突检测#
启动前,通过尝试绑定来对配置的端口(例如 rpc_port、metrics_port、http_port/metaserver)进行端口使用情况检查。如果端口已被占用,快速失败并记录错误。
3.PD 比例验证#
在非对称 PD 场景下,根据预期和调度约束验证 P 到 D 的 tp 比例,以确保正确可靠的操作。
限制#
不支持异构的 P 节点和 D 节点——例如,在 A2 上运行 P 节点,在 A3 上运行 D 节点。
在非对称 TP 配置中,仅支持 P 节点的 TP 度数高于 D 节点且 P 节点的 TP 数量是 D 节点 TP 数量的整数倍的情况(即 P_tp > D_tp 且 P_tp % D_tp = 0)。