Prhub

#40961 [BugFix] Preserve max_seq_len in ubatch metadata during CUDA graph capture

原始 PR 作者 czhu-cohere 合并时间 2026-05-05 12:29 文件变更 1 提交数 8 评论 2 代码增减 +3 / -1

执行摘要

修复 SWA 模型 CUDA graph 捕获时内核选择错误

SWA 模型在 CUDA graph 捕获时,由于 seqlen 被误设为 1,导致错误地选择了全注意力内核。PR body 指出:"the current code would incorrectly select full attention kernels for SWA layers since the seqlen seen at cudagraph capture was 1"。

值得快速合并,修复简单且关键。建议阅读 _make_metadata_with_slice 函数以理解 CUDA graph 捕获时的元数据兼容性设计。

讨论亮点

无实质讨论。LucasWilkinson 评论 "Make sense; thanks for the fix!"。

实现拆解

vllm/v1/worker/ubatch_utils.py 文件的 _make_metadata_with_slice 函数中,将 max_seq_len 的计算从 int(seq_lens_cpu_upper_bound.max()) 改为 max(int(seq_lens_cpu_upper_bound.max()), attn_metadata.max_seq_len)。这样在 CUDA graph 捕获的虚拟运行期间,即使 seq_lens_cpu_upper_bound 的值为 1,attn_metadata.max_seq_len 中保存的原始最大序列长度也会被保留,从而确保注意力后端能正确选择 SWA 内核。

文件 模块 状态 重要度
vllm/v1/worker/ubatch_utils.py worker modified 5.11

关键符号

_make_metadata_with_slice

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

评论区精华

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

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

风险与影响

风险极低:改动仅 1 行,逻辑清晰,仅影响 CUDA graph 捕获时的元数据构建,不会影响正常推理。

影响范围极其有限:仅修复 SWA 模型在 CUDA graph 捕获时的内核选择错误,不影响其他模型或非 CUDA graph 场景。

核心路径变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论