Prhub

#45782 [ROCm][Bugfix]: Fallback GFX942 sparse MLA ops to Triton

原始 PR 作者 vllmellm 合并时间 2026-06-17 19:41 文件变更 1 提交数 2 评论 0 代码增减 +15 / -34

执行摘要

修复 ROCm GFX942 上稀疏 MLA 精度退化

解决 ROCm GFX942 上稀疏 MLA 模型的严重精度退化问题:GLM-5.1-FP8 在 GSM8K 上准确率骤降至约 55%,DeepSeek-V3.2 下降约 3%。根本原因是 block_size 未对齐或非 16 倍数时,原生 C++ 索引内核触发硬件异常和内存错误。

该 PR 是关键的 bugfix,值得精读以理解 GPU 内存对齐问题如何影响模型精度。建议关注后续性能优化,重新考虑是否以及如何在保障精度的前提下恢复 C++ 内核。

讨论亮点

无讨论。PR 只有一个批准评论:"LGTM. Thanks for fixing this critical bug which is also needed for newly released GLM 5.2 model"

实现拆解

本 PR 仅修改一个文件。

  1. 移除 GPU 分支条件:在 vllm/v1/attention/ops/rocm_aiter_mla_sparse.py 中,删除 if _ON_GFX942: 的条件分支,移除对 _custom_ops 的导入和对 ops.indexer_k_quant_and_cacheops.cp_gather_indexer_k_quant_cache 的调用。
  2. 统一使用 Triton 内核:将所有 GFX942 路径下的逻辑无条件路由到已验证的 Triton 实现 indexer_k_quant_and_cache_tritoncp_gather_indexer_k_quant_cache_triton,这两个函数已存在于同一文件中。
  3. 消除内存对齐问题:通过绕过向量化 C++ 索引层,避免 block_size<16 或未对齐时引起的硬件异常和内存错误,从而稳定精度。
文件 模块 状态 重要度
vllm/v1/attention/ops/rocm_aiter_mla_sparse.py 注意力模块 modified 6.04

关键符号

rocm_aiter_sparse_attn_indexer

关键源码片段

vllm/v1/attention/ops/rocm_aiter_mla_sparse.py infrastructure

唯一变更文件,删除 GFX942 分支,统一使用 Triton 内核,修复精度退化。

# vllm/v1/attention/ops/rocm_aiter_mla_sparse.py ( 简化片段 )# ... 省略其他导入 ...
# 不再导入 _custom_opsdef rocm_aiter_sparse_attn_indexer(...):
    # ... 其他逻辑 ...
    if not skip_k_cache_insert:
        # 移除 GFX942 分支,直接使用 Triton 内核
        indexer_k_quant_and_cache_triton(
            k, kv_cache, slot_mapping, quant_block_size, scale_fmt,
        )
    # ... 其他逻辑 ...
    if has_prefill:
        for chunk in prefill_metadata.chunks:
            k_fp8 = k_fp8_full[: chunk.total_seq_lens]
            k_scale = k_scale_full[: chunk.total_seq_lens]
            # 移除 GFX942 分支,直接使用 Triton 内核
            cp_gather_indexer_k_quant_cache_triton(
                kv_cache, k_fp8, k_scale,
                chunk.block_table, chunk.cu_seq_lens,
                token_to_seq=chunk.token_to_seq,
            )

评论区精华

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

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

风险与影响

  1. 性能退化风险:Triton 内核在 GFX942 上性能可能低于原生 C++ 实现,但 PR 提供的基准测试显示吞吐量(通过 vllm bench serve)在 block_size=64 时保持稳定。
  2. 回归风险:仅在 ROCm GFX942 上修改,影响范围受限,但仍需关注其他 ROCm 变体或未来 C++ 内核优化。
  3. 测试覆盖:无新增单元测试,依赖现有 CI 和 LM-Eval 验证,可能存在未被覆盖的边界情况。
  1. 用户影响:ROCm 用户使用稀疏 MLA 模型(如 GLM 系列、DeepSeek-V3.2)时,精度恢复至正常水平。
  2. 系统影响:移除 GFX942 专属 C++ 内核路径,简化代码维护,但可能牺牲部分极致性能。
  3. 团队影响:为后续修复类似内存对齐问题提供参考,但需在后续 PR 中重新评估 C++ 内核的性能优势。
核心路径变更 缺少测试覆盖 性能潜在退化

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论