Eval bug: CDNA2 ROCM Performance Issue: QAT Q4 vs Q8

用户在 llama.cpp (build 9619, commit d8a24cce) 中,使用 llama-bench 工具,后端为 HIP (ROCm),硬件为 2x AMD Instinct MI210 (CDNA2, gfx90a)。分别测试了 gemma-4-31B 模型的 QAT Q4_

Eval bug: CDNA2 ROCM Performance Issue: QAT Q4 vs Q8

Eval bug: CDNA2 ROCM Performance Issue: QAT Q4 vs Q8

快速结论:在 AMD CDNA2 (MI210) 双卡环境下运行 gemma-4-31B 模型时,QAT Q4_0 量化版本相比非 QAT Q8_0 版本,prompt processing 速度下降,token generation 速度未获得预期提升,尽管模型权重体积显著减小。优先排查 -fa (flash attention) 和 -sm (split mode) 参数组合对性能的影响,并建议限制单卡测试以排除 PCIe 传输干扰。

问题场景

用户在 llama.cpp (build 9619, commit d8a24cce) 中,使用 llama-bench 工具,后端为 HIP (ROCm),硬件为 2x AMD Instinct MI210 (CDNA2, gfx90a)。分别测试了 gemma-4-31B 模型的 QAT Q4_0Q8_0 版本,发现性能不符合预期。

报错原文

Gemma 4 31B, no QAT, Q8_0:
| model                          |       size |     params | backend    | ngl |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | --------------: | -------------------: |
| gemma4 31B Q8_0                |  30.38 GiB |    30.70 B | ROCm       | 999 |           pp512 |      1007.44 ± 11.58 |
| gemma4 31B Q8_0                |  30.38 GiB |    30.70 B | ROCm       | 999 |           tg128 |         27.44 ± 0.05 |

Gemma 4 31B, QAT, Q4_0
| model                          |       size |     params | backend    | ngl |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | --------------: | -------------------: |
| gemma4 31B Q4_0                |  16.42 GiB |    30.70 B | ROCm       | 999 |           pp512 |        787.30 ± 6.59 |
| gemma4 31B Q4_0                |  16.42 GiB |    30.70 B | ROCm       | 999 |           tg128 |         35.22 ± 0.05 |

原因分析

可能原因:QAT Q4_0 量化在 CDNA2 ROCm 后端上的性能优化不足,导致 prompt processing 阶段速度下降,token generation 阶段提升不明显。这可能与量化格式的矩阵运算效率、ROCm 对 Q4_0 的 kernel 实现效率有关。后续测试进一步显示,-fa off -sm layer 组合在 Q8_0 上可获得最佳性能,而 -sm none -fa on 组合性能最差,但即使最佳性能也未必达到理论预期,暗示可能存在更底层的优化问题。

环境排查

  • llama.cpp 版本:9619 (d8a24ccee) 及 9641 (6e9007ae6)
  • 操作系统:Linux
  • 后端:HIP (ROCm)
  • 显卡:2x AMD Instinct MI210 (CDNA2, gfx90a:sramecc-:xnack-), 单卡 VRAM 65520 MiB
  • 模型:gemma-4-31B (QAT Q4_0 与 Q8_0)
  • 工具:llama-bench
  • CPU 编译器:GNU 16.1.1

解决步骤

  1. 限制单卡测试以隔离 PCIe 传输影响:使用 -dev ROCm0 参数,仅在第一张卡上运行测试,避免双卡间数据传输干扰。
  2. 测试不同 -fa-sm 参数组合:对 Q8_0 和 QAT Q4_0 模型分别执行以下命令,记录每种组合的 pp512 和 tg128 指标:
    • llama-bench -ngl 999 -m /path/to/model.gguf -fa 0,1 -sm layer,none -dev ROCm0

    在 Issue 中,-fa off -sm layer 组合在 Q8_0 上表现最佳,QAT Q4_0 上也接近最佳。可优先尝试此组合。

  3. 对比不同 llm.cpp build 版本:观察 Issue 中的测试,build 9641 下的结果与原始 9619 版本趋势一致,提示该问题可能在新版本中仍未解决。建议在最新稳定版上复测以确认问题是否持续。
  4. 尝试不同 GGUF 来源:原始 Issue 中用户使用了 unsloth 的 Q8_0 和 QAT Q4_0 版本。如果可能,尝试使用其他来源或自行量化的 Q4_0 模型,以排除模型文件本身的问题。

验证方法

运行上述参数组合测试后,比较 QAT Q4_0 相较于 Q8_0 在 prompt processing (pp512) 和 token generation (tg128) 上的提升比例。如果采用 -fa off -sm layer -dev ROCm0 后,QAT Q4_0 的 pp512 速度能接近或超过 Q8_0,且 tg128 提升明显(例如 >30%),则可视为问题缓解。否则,可能确为 Q4_0 kernel 或 ROCm 驱动的优化不足。

参考来源

ggml-org/llama.cpp #24589

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 8652

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注