Compile bug: Fail to build with mma.cuh:1424 v0.7.0 gfx1151

报错通常出现在使用 Clang 23.x 配合 ROCm/HIP、针对 RDNA 系列 GPU(如 gfx1151、RDNA 4)编译 llama.cpp 的 HIP 后端时,编译会在 ggml/src/ggml-cuda/mma.cuh 的 WMMA bf16 内置函数调用处失败。优先排查 Cla

快速结论:报错通常出现在使用 Clang 23.x 配合 ROCm/HIP、针对 RDNA 系列 GPU(如 gfx1151、RDNA 4)编译 llama.cpp 的 HIP 后端时,编译会在 ggml/src/ggml-cuda/mma.cuh 的 WMMA bf16 内置函数调用处失败。优先排查 Clang 版本与 mma.cuh 中 bf16 向量类型定义是否匹配,并按上游修复或临时 diff 调整类型。

适用环境:Issue 已确认的环境为 Linux、HIP 后端;clang 23.1.3;ROCm 7.13.0(另一复现者 hipcc 报 HIP version 7.16.0、clang 23.1.3);GPU 目标 gfx1151,另有用户在 RDNA 4 上复现。Python、CUDA、PyTorch 版本 Issue 未提供。

最快修复方案:暂无确认的一步修复方案。Issue 中已验证的做法是应用用户提供的 mma.cuh 局部 diff(将 bf16x16_t 改为 short 向量),或升级到包含上游 PR #30885 修复的 llama.cpp 版本。

注意事项:该 diff 来自用户自定义 workaround,原帖作者也指出“可能影响其他 RDNA 定义”,因此不保证对所有 RDNA 架构安全;上游修复需以 PR #30885 合并后的实际代码为准,升级前请确认目标版本已包含该提交。

问题场景

用户在 Linux 上使用 CMake 开启 -DGGML_HIP=ON,并以 -DGPU_TARGETS=gfx1151、-DGGML_NATIVE=ON 构建 llama.cpp 的 llama-server、llama-quantize 目标时触发。编译对象是 fattn-mma-f16-instance-*.cu 等模板实例,最终在 mma.cuh 第 1424 行的 __builtin_amdgcn_wmma_f32_16x16x16_bf16_w32 调用处报错。另一用户在 RDNA 4 上使用类似环境也遇到同类问题。

报错原文

llama.cpp/ggml/src/ggml-cuda/mma.cuh:1424:64: error: cannot initialize a parameter of type 'short __attribute__((ext_vector_type(16)))' (vector of 16 'short' values) with an lvalue of type 'const bf16x16_t' (vector of 16 '__bf16' values)
 1424 |         acc_frag = __builtin_amdgcn_wmma_f32_16x16x16_bf16_w32(a_frag, b_frag, acc_frag);
      |                                                                ^~~~~~
1 error generated when compiling for gfx1151.

原因分析

可能原因是 Clang 23 对 __builtin_amdgcn_wmma_f32_16x16x16_bf16_w32 的参数类型检查发生变化,期望的参数为 short 的 16 元素向量,而 mma.cuh 中 RDNA3 分支定义的 bf16x16_t 仍是 __bf16 的 16 元素向量,导致类型不匹配。Issue 讨论中引用了 llvm-project PR #183939 作为相关背景,并有用户推测该问题可能同样影响其他 RDNA 架构定义。

环境排查

  • 确认编译器版本:clang --version / hipcc --version,重点看是否为 clang 23.x(Issue 中为 23.1.3)。
  • 确认 ROCm/HIP 版本(Issue 中为 ROCm 7.13.0;另一复现者 hipcc 显示 HIP 7.16.0)。
  • 确认目标 GPU 架构,例如 gfx1151 或 RDNA 4 对应目标。
  • 确认 llama.cpp 版本及提交(Issue 正文提交为 620d2225cc436ab0b001e3200e590e3b286ef9ab,标题提及 v0.7.0)。
  • 确认是否使用 -DGGML_HIP=ON 并包含 fattn-mma-f16 模板实例的构建路径。

解决步骤

  1. 先记录当前 llama.cpp 版本与提交,确认构建环境中的 clang 是否为 23.x。
  2. 可优先尝试:对 ggml/src/ggml-cuda/mma.cuh 中 RDNA3 分支应用 Issue 提供的 diff,将 using bf16x16_t = __attribute__((ext_vector_type(16))) __bf16; 改为 using bf16x16_t = __attribute__((ext_vector_type(16))) short;,然后清理并重新构建。
  3. 若目标是其他 RDNA 架构(如 RDNA 4),可按同一思路检查对应分支的 bf16x16_t 定义;Issue 中仅说明有用户在 RDNA 4 上“适配后”可使 patch 生效,未给出完整代码。
  4. 更推荐的处理是升级到已包含上游 PR #30885 修复的 llama.cpp 版本,避免自行维护补丁。
  5. 重新执行原构建命令,确认 fattn-mma-f16-instance-*.cu 相关目标可成功编译。

验证方法

重新运行 cmake --build build --target llama-server llama-quantize -j$(nproc),确认不再出现 mma.cuh:1424:64: error 及 cannot initialize a parameter of type 'short __attribute__((ext_vector_type(16)))',且 HIP 目标文件生成、构建退出码为 0。

参考来源

ggml-org/llama.cpp #30839

ggml-org/llama.cpp PR #30885

llvm/llvm-project PR #183939

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29777

发表回复

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