Prhub

#26655 Fix TRTLLM MHA draft decode cache seqlens replay

原始 PR 作者 merrymercy 合并时间 2026-05-29 11:58 文件变更 1 提交数 1 评论 1 代码增减 +9 / -6

执行摘要

修复 TRTLLM MHA draft decode 缓存序列长度重放

确保 draft decode 场景下 CUDA graph 重放时,缓存序列长度(cache_seqlens)正确绑定到当前 batch 子集,避免数据竞争或错误的内存写入。

值得立即合并,修复了可能导致不正确推理结果的 bug。建议未来为该路径增加单元测试。

讨论亮点

无 review 评论。

实现拆解

  1. init_forward_metadata_replay_cuda_graph 方法的 Draft Decode 分支中,将 metadata.cache_seqlens_int32 重新绑定到 self.decode_cuda_graph_metadata["cache_seqlens"][:bs] 切片,确保指向当前 batch 的预分配缓冲区。
  2. 然后调用 copy_ 将更新后的序列长度(seq_lens + self.speculative_step_id + 1)写入该切片。
  3. 移除旧的 seq_lens_cpu 相关行,改用 seq_lens.max().item() 计算 max_seq_len_k,因为 seq_lens_cpu 在此处不再需要。
  4. 移除了 max_len 局部变量,直接计算 max_seq_len_kmax_seq_pages
文件 模块 状态 重要度
python/sglang/srt/layers/attention/trtllm_mha_backend.py 注意力 modified 5.87

关键符号

init_forward_metadata_replay_cuda_graph

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

低风险:变更仅影响 TRTLLM MHA 后端的 CUDA graph 重放路径,且逻辑简化了数据流。未涉及其他注意力后端或模型。

影响范围限于使用 TRTLLM MHA 后端且启用 speculative decoding 的场景。修复可能影响 Blackwell 等 GPU 上的推理正确性。

缺少测试覆盖

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论