跳转至

分离式预填充

为什么使用分离式预填充?

该功能旨在优化大规模推理任务中的每输出 Token 时间(TPOT)和首 Token 时间(TTFT)。其动机有两方面:

  1. 调整 P 节点和 D 节点的并行策略与实例数量
    使用分离式预填充策略,该功能允许系统灵活调整 P(Prefiller)节点和 D(Decoder)节点的并行化策略(例如数据并行(dp)、张量并行(tp)和专家并行(ep))以及实例数量。这有助于更好地进行系统性能调优,尤其是针对 TTFT 和 TPOT。

  2. 优化 TPOT 如果没有分离式预填充策略,预填充任务会在解码过程中插入,从而导致效率低下和延迟。分离式预填充通过允许更好地控制系统 TPOT 来解决该问题。通过有效管理分块预填充任务,系统避免了确定最优块大小的难题,并对生成输出 Token 所需的时间提供更可靠的控制。


使用方法

vLLM Ascend 当前支持两种用于处理 KV cache 管理的连接器:

  • MooncakeConnector:D 节点从 P 节点拉取 KV cache。
  • MooncakeLayerwiseConnector:P 节点以分层方式将 KV cache 推送到 D 节点。

有关逐步部署和配置,请参考以下指南:
PD 分离多节点部署指南


工作原理

1. 设计思路

在分离式预填充下,全局代理接收外部请求,将预填充转发到 P 节点,将解码转发到 D 节点;KV cache(键值缓存)通过点对点(P2P)通信在 P 节点和 D 节点之间交换。

2. 实现设计

我们的设计图如下所示,分别展示了拉取和推送方案。 分离式预填充拉取 分离式预填充推送

Mooncake 连接器

  1. 请求被发送到 Proxy 的 _handle_completions 端点。
  2. Proxy 调用 select_prefiller 选择一个 P 节点并转发请求,配置 kv_transfer_params 为 do_remote_decode=True、max_completion_tokens=1 和 min_tokens=1。
  3. P 节点的调度器完成预填充后,update_from_output 调用调度连接器的 request_finished 以延迟释放 KV cache,构造 do_remote_prefill=True 的 kv_transfer_params,并返回给 Proxy。
  4. Proxy 调用 select_decoder 选择一个 D 节点并转发请求。
  5. 在 D 节点上,调度器将请求标记为 RequestStatus.WAITING_FOR_REMOTE_KVS,预分配 KV cache,调用 kv_connector_no_forward 拉取远程 KV cache,然后通知 P 节点释放 KV cache,并继续解码以返回结果。

Mooncake 分层连接器

  1. 请求被发送到 Proxy 的 _handle_completions 端点。
  2. Proxy 调用 select_decoder 选择一个 D 节点并转发请求,配置 kv_transfer_params 为 do_remote_prefill=True,并设置 metaserver 端点。
  3. 在 D 节点上,调度器使用 kv_transfer_params 将请求标记为 RequestStatus.WAITING_FOR_REMOTE_KVS,预分配 KV cache,然后调用 kv_connector_no_forward 向 metaserver 发送请求,并等待 KV cache 传输完成。
  4. Proxy 的 metaserver 端点接收请求,调用 select_prefiller 选择一个 P 节点,并以 kv_transfer_params 设置为 do_remote_decode=True、max_completion_tokens=1 和 min_tokens=1 的方式转发请求。
  5. 在处理过程中,P 节点的调度器按层推送 KV cache;当所有层的推送完成后,释放请求并通知 D 节点开始解码。
  6. D 节点执行解码并返回结果。

3. 接口设计

以 MooncakeConnector 为例,系统组织为三个主要类:

  • MooncakeConnector:提供核心接口的基类。
  • MooncakeConnectorScheduler:用于在引擎核心中调度连接器的接口,负责管理 KV cache 传输需求和完成状态。
  • MooncakeConnectorWorker:用于在 worker 进程中管理 KV cache 注册和传输的接口。

4. 规格设计

该功能灵活,支持多种配置,包括使用 MLA 和 GQA 模型的配置。它兼容 A2 和 A3 硬件配置,并支持多个 P 节点和 D 节点之间相等 TP 配置以及某些不相等 TP 配置的场景。

功能 状态
A2 🟢 功能可用
A3 🟢 功能可用
相等 TP 配置 🟢 功能可用
不相等 TP 配置 🟢 功能可用
MLA 🟢 功能可用
GQA 🟢 功能可用
  • 🟢 功能可用:完全可用,并持续优化。
  • 🔵 实验性:实验性支持,接口和功能可能会变化。
  • 🚧 开发中:正在积极开发,即将支持。
  • 🟡 计划中:计划在未来实现(部分可能已有开放的 PR/RFC)。
  • 🔴 无计划/已弃用:无计划或已被 vLLM 弃用。

DFX 分析

1. 配置参数校验

通过检查 kv_connector 类型是否受支持来校验 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)。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 vl/vllm-ascend