跳转至

分离式预填充

为什么需要分离式预填充?

该特性旨在优化大规模推理任务中的**每个输出令牌的时间(TPOT)和**首个令牌的时间(TTFT)。其动机有两个方面:

  1. 调整P节点和D节点的并行策略与实例数量
    通过分离式预填充策略,该特性允许系统灵活调整并行化策略(如数据并行(dp)、张量并行(tp)和专家并行(ep))以及P(预填充器)节点和D(解码器)节点的实例数量。这有助于更好地调优系统性能,特别是针对**TTFT**和**TPOT**。

  2. 优化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. 实现设计

我们的设计图如下所示,分别展示了拉取和推送方案。 alt text alt text

Mooncake连接器

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

Mooncake逐层连接器

  1. 请求被发送到代理的 _handle_completions 端点。
  2. 代理调用 select_decoder 选择一个D节点并转发请求,配置 kv_transfer_paramsdo_remote_prefill=True 并设置 metaserver 端点。
  3. 在D节点上,调度器使用 kv_transfer_params 将请求标记为 RequestStatus.WAITING_FOR_REMOTE_KVS,预分配KV缓存,然后调用 kv_connector_no_forward 向元服务器发送请求并等待KV缓存传输完成。
  4. 代理的 metaserver 端点接收请求,调用 select_prefiller 选择一个P节点,并转发请求,设置 kv_transfer_paramsdo_remote_decode=Truemax_completion_tokens=1min_tokens=1
  5. 在处理过程中,P节点的调度器逐层推送KV缓存;所有层推送完成后,它释放请求并通知D节点开始解码。
  6. D节点执行解码并返回结果。

3. 接口设计

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

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

4. 规格设计

该特性灵活且支持多种配置,包括使用MLA和GQA模型的设置。它兼容A2和A3硬件配置,并支持跨多个P节点和D节点的相等TP设置和某些不等TP设置的场景。

功能特性 状态
A2 🟢 功能正常
A3 🟢 功能正常
equal TP configuration 🟢 功能正常
unequal TP configuration 🟢 功能正常
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)。