Prhub

#38450 [ROCm][CI] Fix cross-attention dispatch for encoder-decoder models

原始 PR 作者 AndreasKaratzas 合并时间 2026-03-29 13:08 文件变更 6 提交数 2 评论 4 代码增减 +90 / -19

执行摘要

修复 ROCm 后端在编码器 - 解码器模型交叉注意力中的调度错误,确保正确后端选择。

PR body中详细说明:测试test_whisper_beam_search_single_beam在ROCm上失败,因为单波束波束搜索与贪婪解码不匹配。不匹配是由于ROCM_ATTN和ROCM_AITER_FA后端在max_query_len > 1时错误计算交叉注意力,而贪婪解码因max_query_len=1跳过错误路径。Issue评论提到由PR #38321的讨论引发。

该PR值得精读,特别是PR body中的技术解释部分,揭示了交叉注意力后端实现中的陷阱(如缓存语义和序列边界处理),以及设计权衡(如何通过调度而非修复后端来规避错误)。工程师可以学习如何优雅地处理跨后端调度和日志改进。

讨论亮点

review中只有一个核心讨论:gemini-code-assist[bot]指出文档attention_backends.md中ROCM_ATTN的条目仍显示支持所有类型,与代码变更不一致,作者AndreasKaratzas回应已修改文档生成器(generate_attention_backend_docs.py)以自动生成正确支持类型。结论是文档不一致问题已解决,无未解决疑虑。

实现拆解

关键改动点包括:

1) 在rocm_attn.pyrocm_aiter_fa.py中修改supports_attn_type方法,移除ENCODER_DECODER支持,并添加注释解释技术原因;
2) 在rocm.py中改进后端选择日志,显示跳过的不兼容后端以帮助调试;
3) 在测试文件中扩展参数化覆盖多个ROCm后端,确保修复有效;
4) 更新文档生成器和文档表格,反映支持类型变化。

文件 模块 状态 重要度
vllm/v1/attention/backends/rocm_attn.py attention/backends modified 8.0
vllm/v1/attention/backends/rocm_aiter_fa.py attention/backends modified 8.0
vllm/platforms/rocm.py platforms modified 5.0
tests/entrypoints/openai/speech_to_text/test_transcription_validation_whisper.py tests modified 6.0
docs/design/attention_backends.md documentation modified 4.0

关键符号

supports_attn_type

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

评论区精华

文档一致性更新 documentation

gemini-code-assist[bot] 指出文档 `attention_backends.md` 中 ROCM_ATTN 条目仍显示支持所有类型,与代码变更(移除 ENCODER_DECODER)不一致。作者 AndreasKaratzas 回应已修改文档生成器(`generate_attention_backend_docs.py`)以自动生成正确支持类型。

结论:文档不一致问题通过修改生成器解决,确保自动更新支持类型。 · 已解决

风险与影响

技术风险:

1) 文档更新可能遗漏其他部分,但作者通过修改生成器来自动化,降低了风险;
2) 移除ENCODER_DECODER支持可能导致用户意外行为(如依赖特定后端),但这是修复错误所需,且日志改进有助于监控;
3) 测试扩展增加了CI复杂度,但提高了覆盖。具体风险较低,因为变更仅影响ROCm后端在特定场景。

影响用户:ROCm用户使用编码器-解码器模型如Whisper进行波束搜索时,将获得正确结果,提升模型可靠性。影响系统:后端调度更准确,避免使用不兼容后端,减少计算错误。影响团队:测试覆盖扩展到更多后端,提高了CI的鲁棒性,并增强了日志调试能力。

文档不一致 测试覆盖扩展

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论