Pull Request已成功合入, 合并人@wangyang
(感谢 tobking 的贡献)变更摘要
本 PR 主要实现"引擎原生拉起"场景下 layerwise CDP 调度模式的适配:为 coordinator 增加按 worker 独立的 metaserver 回调解耦机制,新增 CoordinationMode.TRIGGER 调度模式,使 vLLM 原生实例先由 Decode 侧发起请求、在 KV 传输回调中触发 Prefill 的按需调度,并配套新增 worker_metaserver_base_port 配置与校验、vLLM 协议适配及 node_manager 侧 trigger 连接器能力发布等改动。
主要改动
-
新增 metaserver 端口配置与校验:
InferenceWorkersConfig新增worker_metaserver_base_port(默认 0 表示禁用,worker i 监听 base+i),CoordinatorConfig新增运行时字段worker_metaserver_port,并新增_validate_worker_metaserver_ports校验端口范围及回调可达性(要求POD_IP或具体的coordinator_api_host);同时新增net.is_unspecified_host工具,示例配置同步补充该字段并将/v1/metaserver加入限流/鉴权白名单 -
Worker 独立 metaserver 服务:
run_inference_worker_proc在 worker 进程内按worker_metaserver_port额外启动一个 uvicorn metaserver,InferenceServer.create_metaserver_app()提供POST /v1/metaserver端点,dispatch.handle_metaserver_request解析回调、校验request_id与attempt参数后转发给路由器处理 -
UnifiedPDRouter新增 TRIGGER 调度模式:通过实例dispatch_capabilities(CONCURRENT_ENGINE_SYNCvsPREFILL_HANDOFF_DECODE)探测 vLLM 集群是否为 layerwise/trigger 模式(混合部署返回 503),该模式下先调度 D 实例发起 decode(请求携带 metaserver 回调地址),收到回调后经handle_metaserver_request再调度 P 实例执行 prefill;AttemptContext新增trigger_lock保证回调重试幂等,prefill 取消与请求停止联动,分配冲突时回滚已分配 workload -
vLLM 协议适配层扩展:
pd_protocol.py新增CoordinationMode.TRIGGER、trim_vllm_engine_request_id(裁剪chatcmpl-/cmpl-前缀以还原原始 req_id)、build_trigger_decode_request(设置kv_transfer_params.metaserver且do_remote_decode=False)与build_trigger_prefill_request(max_tokens=1、do_remote_prefill=False、透传 remote block 信息) -
node_manager 侧能力发布:vLLM 后端允许
trigger调度配置文件(不再仅限 handoff),NodeManagerConfig._infer_dispatch_capabilities对MooncakeLayerwiseConnector等配置发布CONCURRENT_ENGINE_SYNC能力,使层间调度模式可被调度器识别


- ❌ PR 未关联里程碑或 Issue
- ❌ PR 新增代码 1152 行超过 1000 行,且标题未标注"反合"
请修正后重新提交,或联系仓库管理员。


1. 合入背景
vLLM layerwise P/D 由 Decode 先接收请求,再通过 metaserver callback 触发 Prefill 和逐层 KV 传输。Coordinator 当前缺少完整的 Trigger 调度链路,无法保证 callback 回到持有原始请求状态的 Worker,也无法将异步 Prefill 纳入原请求的取消、重试和 workload 回收生命周期。
本改动补齐 vLLM concurrent_engine_sync 的端到端调度,并处理 callback 并发幂等、资源回滚以及 IPv4/IPv6 回调地址可达性。
#503
2. 修改内容
1)增加 vLLM P/D 协同模式选择:
prefill_handoff_decode 继续使用现有 handoff 流程。
concurrent_engine_sync 使用 Trigger 流程,先分配并请求 Decode,再由 Decode callback 触发 Prefill。
对同一拓扑中 handoff/trigger 能力混用返回 HTTP 503。
2)增加 Trigger 协议适配:
Decode 请求注入 do_remote_prefill 和 metaserver URL。
callback 携带的远端 block、host、port 参数转换为 Prefill 请求。
NodeManager 原生 vLLM backend 根据 layerwise 配置上报对应 dispatch capability。
3)增加每 Worker 独立 metaserver:
新增 inference_workers_config.worker_metaserver_base_port,默认 0 表示关闭。
Worker i 使用 base_port + i,独立 uvicorn app 仅暴露 POST /v1/metaserver。
callback 通过 request_id + attempt 找到发起 Decode 的同一 Worker 和当前 attempt。
4)完善 callback 生命周期:
使用 AttemptContext.trigger_lock 串行化并发 callback。
将 callback task 注册为 Prefill task,客户端断开、Decode 失败或 callback 取消时停止整个 attempt。
Prefill 已完成后的重复 callback 返回幂等成功,不重复分配实例。
Scheduler 分配成功但 Worker 本地 workload 登记失败时立即回滚。
3. 资料变更
更新 P/D 分离设计文档,说明 vLLM layerwise Trigger 调度流程。
更新 Coordinator 开发文档,说明每 Worker metaserver、attempt 校验、callback 生命周期和地址选择。
更新配置参考及示例配置,说明 worker_metaserver_base_port 的用途和端口范围。
4. 接口变更
不涉及
5. 测试结果
6. CheckList
[x] 代码注释完备
[x] 正确记录维测日志
[x] 是否有UT用例
[ ] 若涉及多线程场景,考虑了并发场景,不存在死锁问题