Eval bug: ROCm error: device kernel image is invalid

用户在 Ubuntu 22.04.5 LTS 系统上使用 llama.cpp (v9307, commit 549b9d843)通过 HIP 后端加载 Qwen3.6-27B-Q4_K_M.gguf 模型。显卡为 AMD Radeon RX 7900 XTX (gfx1100, 24GB VRAM)

Eval bug: ROCm error: device kernel image is invalid

Eval bug: ROCm error: device kernel image is invalid

快速结论:该错误在 llama.cpp 使用 HIP 后端于 AMD Radeon RX 7900 XTX 显卡上执行批量推理时出现,典型特征是短请求(≤200 tokens)正常,长请求(>200 tokens)崩溃。优先排查 CMake 构建类型与 ROCm 版本兼容性。

问题场景

用户在 Ubuntu 22.04.5 LTS 系统上使用 llama.cpp(v9307, commit 549b9d843)通过 HIP 后端加载 Qwen3.6-27B-Q4_K_M.gguf 模型。显卡为 AMD Radeon RX 7900 XTX (gfx1100, 24GB VRAM),ROCm 版本 7.11.0。执行 llama-server 时,生成 token 数超过 200-500 区间即触发崩溃,短请求(≤200 tokens)正常。CPU-only 模式(-ngl 0)也存在问题——即使不加载 GPU 层,只要 HIP 库被加载就会触发相同错误。

报错原文

ggml-cuda.cu:102: ROCm error
  current device: 0, in function ggml_cuda_op_mul_mat at ggml-cuda.cu:2072
  hipGetLastError()

llama-server 日志显示在 ggml_backend_sched_graph_compute_async 过程中 segfault/abort。

原因分析

可能原因:

  • Debug 构建已知 bug:根据 ROCm 上游反馈(ROCm #6042),ROCm 7.11 的 LLVM 后端在 -O0(即 Debug 模式)下可能生成无效指令,仅影响特定核路径(如大矩阵乘法操作),因此小请求通过而大请求崩溃。
  • Release 构建同样崩溃:即使切换到 -DCMAKE_BUILD_TYPE=Release,用户尝试后仍出现相同错误,说明问题不限于 Debug 模式。
  • 驱动/ROCm 版本不匹配:Windows HIP 用户更新显卡驱动至 26.5.2 后也遇到相同问题(使用官方 GitHub 构建或 lemonade-sdk/llamacpp-rocm 构建),llama-bench 同样崩溃,暗示 ROCm 7.11 或对应驱动版本可能存在普遍兼容问题。

环境排查

  • ROCm 版本:确认当前安装的 ROCm 版本(本例中为 7.11.0)。PyTorch 2.12.0+rocm7.2 在同一硬件上正常工作,7.11 版本可能引入回归。
  • llama.cpp 构建类型:检查 CMake 构建配置中 CMAKE_BUILD_TYPE 是否为 Debug(-DCMAKE_BUILD_TYPE=Debug)。
  • HIP 平台变量:确保 HIP_PLATFORM=amd 已正确设置。
  • GPU 目标架构:确认 AMDGPU_TARGETSGPU_TARGETS 与显卡匹配(本例为 gfx1100)。
  • 依赖版本:GCC 11.4.0、CMake 3.22.x、Clang 22.0.0。

解决步骤

  1. 切换到 Release 构建(可优先尝试):完全清除构建目录并重新编译:
    rm -rf build
    cmake -B build -DGGML_HIP=ON -DGPU_TARGETS=gfx1100 -DCMAKE_BUILD_TYPE=Release -DHIP_PLATFORM=amd
    cmake --build build -j12
  2. 如果仍需要调试符号,使用 RelWithDebInfo 而非 Debug。
  3. 若 Release 构建仍然崩溃,考虑降级 ROCm:回退到 ROCm 7.2 或 7.0 版本(如 PyTorch 使用的 7.2),因为该版本在同一硬件上已验证可正常工作。
  4. 检查驱动更新:Windows 用户若遇到此问题,尝试回滚显卡驱动至较早版本(如 26.5.2 之前的版本)。

验证方法

使用短请求和长请求分别测试:

  • 短请求:curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"模型名","messages":[{"role":"user","content":"Hello"}],"max_tokens":200}' ——应成功返回。
  • 长请求:将 max_tokens 设为 500+,确认服务端不崩溃且正常返回完整输出。
  • 也可使用 llama-bench -n 50 -p 128 测试——若之前崩溃,修复后应通过。

确认无 ROCm error: device kernel image is invalid 错误且无 segfault 即问题解决。

参考来源

ggml-org/llama.cpp #23934

附加参考(Issue 中提及的上游 ROCm bug):ROCm/ROCm #6042

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 11018

发表回复

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