# PR #45782 完整报告

- 仓库：`vllm-project/vllm`
- 标题：[ROCm][Bugfix]: Fallback GFX942 sparse MLA ops to Triton
- 合并时间：2026-06-17 19:41
- 原文链接：http://prhub.com.cn/vllm-project/vllm/pull/45782

---

# 执行摘要

- 一句话：修复 ROCm GFX942 上稀疏 MLA 精度退化
- 推荐动作：该 PR 是关键的 bugfix，值得精读以理解 GPU 内存对齐问题如何影响模型精度。建议关注后续性能优化，重新考虑是否以及如何在保障精度的前提下恢复 C++ 内核。

# 功能与动机

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

# 实现拆解

本 PR 仅修改一个文件。

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

关键文件：
- `vllm/v1/attention/ops/rocm_aiter_mla_sparse.py`（模块 注意力模块；类别 infra；类型 infrastructure）: 唯一变更文件，删除 GFX942 分支，统一使用 Triton 内核，修复精度退化。

关键符号：rocm_aiter_sparse_attn_indexer

## 关键源码片段

### `vllm/v1/attention/ops/rocm_aiter_mla_sparse.py`

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

```python
# vllm/v1/attention/ops/rocm_aiter_mla_sparse.py ( 简化片段 )

# ... 省略其他导入 ...
# 不再导入 _custom_ops

def 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,
            )

```

# 评论区精华

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

- 暂无高价值评论线程

# 风险与影响

- 风险：
 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++ 内核的性能优势。
 - 风险标记：核心路径变更 , 缺少测试覆盖 , 性能潜在退化

# 关联脉络

- 暂无明显关联 PR