Skip to content

[Performance][MRV2] Remove the per-step D2H metadata barrier from Ascend dense decode #188

Description

@CubeLander

背景

Ascend Model Runner V2(MRV2)已经继承了 core vLLM 的 device-resident request state、增量 block table 和设备侧 input preparation;但当前 Ascend 路径仍在每轮结束后把整张 num_computed_tokens 从 NPU 拷回 Host,并在下一轮 prepare_inputs 中无条件执行 event synchronize(),只是为了重建 attention backend 仍需要的 seq_lens_cpu

当前热路径是:

  1. postprocess[_sampled]()_copy_num_computed_tokens_to_cpu()
  2. 下一轮 prepare_inputs()_update_seq_lens_cpu()
  3. num_computed_tokens_event.synchronize()
  4. attention builder 又对已有 device query_start_loc 做一次 H2D,并把部分 metadata .tolist()

非 speculative 的普通自回归 decode,scheduler 交给 runner 的 CPU num_computed_tokens mirror 没有 rejection correction,因而可作为精确值。这条无条件 D2H + Host barrier 会抵消 MRV2 把 metadata 留在设备侧的主要工程收益。

这是一项 engineering/performance hardening,不是新的调度研究,也不改变“请求晚到就进入下一轮”的调度语义。

目标

把 Ascend MRV2 的普通 dense decode 做成真正无每轮 metadata D2H barrier 的路径,并用真实 NPU workload 证明正确性和收益边界;speculative decode、CP、dynamic EPLB 分阶段处理,不混在第一刀里。

当前状态(2026-07-31)

状态:工程实现和证据整理已完成;等待 tutor/maintainer review,不在 review 前扩大适用范围或提出 default-on。

  • verified-core 兼容性前置项已按上游补丁做带归因的窄适配,见 draft PR #190;CI 已通过。
  • metadata 实现位于 jingyuan/mrv2-device-metadata-188-20260731:ordinary single-token 路径绕过 num_computed_tokens D2H/event barrier,multi-token/spec/diffusion 保留 device-authoritative correction。
  • exact core 1f486d96 下 combined worker suite 39 passed;Ruff、markdownlint、JSON 与 diff 检查通过。
  • 一张卡 MRV2 graph smoke 已覆盖模型加载、KV cache、graph capture、prefill 和 decode;full-weight Qwen2.5-7B A/B 输出完全一致。
  • 八步 profiler 证明目标 acl_memcpy_device_to_hostwait_event 各减少 8 次,即每个 decode step 各去掉一次。
  • full-weight in-process 平均耗时下降 1.61%(batch 1)和 1.92%(batch 8)。
  • 服务级三次独立启动/变体、共 576 个请求、0 失败:吞吐提升 1.51%–1.75%,Mean TPOT 下降 1.49%–1.68%;但 P99 ITL 上升 2.16%–2.32%,不声称 tail latency 改善。
  • reviewer 入口和全部原始证据:evidence packet

第一实现切片(本 issue 立即落地)

  • 在普通 single-token 路径中,直接使用 scheduler-maintained CPU request state 生成 seq_lens_cpu
  • 跳过每轮 num_computed_tokens D2H copy 与下一轮 event synchronize
  • speculative decode 和其他 multi-token generation(包括 diffusion-style)保留现有 device-authoritative correction 路径,避免 rejection 后长度漂移
  • 增加单测,分别证明:
    • 普通 single-token 路径不等待 NPU event,且长度由 scheduler mirror 正确生成
    • multi-token 路径仍等待 copy completion,并使用 rejection-corrected device result
    • postprocess 只在需要 device-authoritative correction 时安排 D2H
  • 修复/补齐一张卡 dense MRV2 correctness smoke,覆盖已声明的 graph 支持边界

后续里程碑

M1:去掉重复 metadata 搬运

  • 复用 model runner 已有的 device query_start_loc,取消 attention builder 的重复 H2D
  • 在 FIA/MLA operator ABI 能直接消费 tensor 的位置,减少 .tolist() / scalar materialization
  • 不在 Host 侧重新发明一套与 device state 并行漂移的状态机

M2:真实负载评测

#146 的测量契约固定 core/plugin/model/CANN/torch_npu 和 workload:

  • MRV1 vs MRV2,同机 same-spec
  • batch 1/8/32,短/长 context,graph/eager 分开
  • 至少 3 次独立服务启动并交替运行
  • 报告 TTFT、TPOT/TBT、throughput、P95/P99、错误率、峰值显存
  • profiler/counter 单独报告 Host prepare time、D2H/H2D 次数和 device sync 次数

只有机制证据与端到端结果一致,才讨论默认启用 MRV2;smoke 或单次 probe 不算性能结论。

M3:能力边界

  • speculative decode 与其他 multi-token generation 分别设计 accepted-token correction,不偷用普通 decode 的假设
  • CP / dynamic EPLB / pooling 等能力分别补齐后,再扩大默认适用范围
  • eager 基础用例恢复后才把 eager 纳入正式支持声明

验收标准

  1. scoped ordinary single-token decode 每轮不再发生 num_computed_tokens D2H copy 或对应 event synchronize。
  2. scheduler request churn(new / cached / finished / preempted)下 seq_lens_cpu 与 device seq_lens 保持一致。
  3. speculative decode 与 diffusion-style multi-token 行为不变,rejection 后长度无漂移。
  4. 至少一个真实一张卡 dense workload 给出可复现的正确性与性能 artifact;若端到端无收益,也如实记录并停止扩大投入。
  5. unsupported feature fail closed,不静默切到错误 metadata 语义。

与现有工作的关系

负责人

  • GitHub assignee:@CubeLander
  • Fletcher × Lumi 共同推进;实现将标注 AI assistance,并由 Fletcher 做最终 human review。

Metadata

Metadata

Assignees

Labels

module:coreperformancePerformance work requiring measured evidence

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions