Compile bug: Cant build current git 6f41ac59e0a49a00483a316a22ada6b04edd2950

这个报错通常出现在 Linux 下用 CUDA 后端编译 llama.cpp 的时候,触发点是 ggml/src/ggml-cuda/fattn.cu 里 flash attention 的 MMA 模板实例化失败,导致整个编译中断在 96 个错误。最优先排查的是你当前 checkout 的 com

快速结论:这个报错通常出现在 Linux 下用 CUDA 后端编译 llama.cpp 的时候,触发点是 ggml/src/ggml-cuda/fattn.cu 里 flash attention 的 MMA 模板实例化失败,导致整个编译中断在 96 个错误。最优先排查的是你当前 checkout 的 commit 是否正好落在已知的 CUDA flash attention 编译回归区间,以及是否能用上游对应的修复 PR 替换。

适用环境:Issue 中确认的信息:Linux(Linux Mint 22.3,基于 Ubuntu 24.04)、GGML 后端为 CUDA、显卡为 NVIDIA Tesla V100 32GB(Volta 架构)、编译的 commit 为 6f41ac59e0a49a00483a316a22ada6b04edd2950。Python、CUDA Toolkit、驱动、CMake 具体版本 Issue 未给出。

最快修复方案:采用 Issue 评论中给出的修复 PR(ggml-org/llama.cpp #29224),切换到该 PR 的代码后重新编译,Issue 中说明 “The issue should be fixed by this PR”,可作为优先尝试。

注意事项:该 Issue 的标签为 bug-unconfirmed,正文没有给出构建成功的后续确认输出;PR #29224 是评论中给出的修复指向,但是否覆盖所有 Volta + CUDA 组合仍需自行验证。不要盲目改动 mma.cuh 的模板签名来绕过报错,可能引入静默的性能或数值问题。

问题场景

用户在 Linux 上以 CUDA 后端编译 llama.cpp 指定 commit,构建过程中在编译 ggml/src/ggml-cuda/fattn.cu 时失败。报错发生在 flash attention 的 MMA 路径模板实例化阶段,涉及 DKQ=576DV=512use_logit_softcap=trueis_fixup=true 等实例组合,与 Volta 架构(Tesla V100)上的 load_ldmatrix 模板推导失败相关。整个构建在 96 个错误后终止。

报错原文

/home/lemonzest/Temp/llama.cpp/ggml/src/ggml-cuda/mma.cuh(877): note #3327-D: candidate function template "ggml_cuda_mma::load_ldmatrix(ggml_cuda_mma::tile &, const T *, int, int, int)" failed deduction
                                       void load_ldmatrix(
                                            ^
          detected during:
            instantiation of "void flash_attn_ext_f16_iter<DKQ,DV,ncols1,ncols2,nwarps,use_logit_softcap,V_is_K_view,use_sparse,needs_fixup,is_fixup,last_iter,oob_check,T_A_KQ,T_B_KQ,T_C_KQ,T_A_VKQ,T_B_VKQ,T_C_VKQ>(...)" at line 1398
            instantiation of "void flash_attn_ext_f16_process_tile<...>(...) [with DKQ=576, DV=512, ncols1=2, ncols2=4, nwarps=2, use_logit_softcap=true, V_is_K_view=true, use_sparse=false, needs_fixup=false, is_fixup=true]" at line 1999
            instantiation of "void flash_attn_ext_f16<DKQ,DV,ncols1,ncols2,use_logit_softcap,V_is_K_view,use_sparse>(...) [with DKQ=576, DV=512, ncols1=2, ncols2=4, use_logit_softcap=true, V_is_K_view=true, use_sparse=false]" at line 2105
            instantiation of "void ggml_cuda_flash_attn_ext_mma_f16_case<DKQ,DV,ncols1,ncols2>(ggml_backend_cuda_context &, ggml_tensor *) [with DKQ=576, DV=512, ncols1=2, ncols2=4]" at line 160 of /home/lemonzest/Temp/llama.cpp/ggml/src/ggml-cuda/fattn.cu
            instantiation of "void ggml_cuda_flash_attn_ext_mma_f16_switch_ncols1<DKQ,DV,ncols2>(ggml_backend_cuda_context &, ggml_tensor *) [with DKQ=576, DV=512, ncols2=4]" at line 362 of /home/lemonzest/Temp/llama.cpp/ggml/src/ggml-cuda/fattn.cu

96 errors detected in the compilation of "/home/lemonzest/Temp/llama.cpp/ggml/src/ggml-cuda/fattn.cu".

原因分析

最可能的原因是该 commit 在 CUDA flash attention 的 MMA 实现上存在模板推导/特化缺失:ggml_cuda_mma::load_ldmatrix<swz,T,dl>ggml_cuda_mma::tile<16, 8, T, dl> 的候选模板在实例化时无法完成推导,因而 flash_attn_ext_f16 的一系列实例(DKQ=576、DV=512、ncols 组合、use_logit_softcap=true 等)全部编译失败并累积成 96 个错误。由于用户在 Volta(Tesla V100)上编译,可能与特定架构下的 ldmatrix / swizzle 特化分支有关。Issue 评论指出 PR #29224 修复该问题,说明这是一段可复现的回归,而非用户本地环境独有的问题。

环境排查

  • 确认当前 git commit 是否为 6f41ac59e0a49a00483a316a22ada6b04edd2950,以及工作区是否有本地改动影响 ggml/src/ggml-cuda 下的文件。
  • 确认 GGML 后端配置中启用了 CUDA。
  • 确认 GPU 计算能力对应的架构:Tesla V100 为 Volta(SM 70)。
  • 确认 CUDA Toolkit 与 NVIDIA 驱动版本是否满足当前 llama.cpp 对 CUDA 后端的最低要求(Issue 未给出具体版本,需按你自己环境的发行版文档核对)。
  • 确认 CMake 版本与编译参数是否与当前仓库文档一致,尤其是 CUDA 相关开关。
  • 如果使用了 GGML_CUDA_FA_QUANTSGGML_VULKANGGML_CUDA_NCCL 等额外开关,可先临时精简为仅 CUDA 以缩小报错范围。

解决步骤

  1. 记录当前 commit 与构建目录,便于回退和对比:确认 6f41ac59e0a49a00483a316a22ada6b04edd2950 就是你正在构建的版本。
  2. 可优先尝试:按 Issue 评论中的指引,获取修复 PR ggml-org/llama.cpp #29224 对应的代码,替换当前 checkout 后重新编译。
  3. 如果该 PR 已合并进上游,改为同步上游主分支到包含该修复的提交,然后重新执行你的原有构建流程。
  4. 在重试前清理旧的构建目录,避免 CMake 缓存继续引用失败 commit 下的中间产物。
  5. 若切换代码后仍然报同一处 mma.cuh 模板推导错误,按“环境排查”逐项确认 CUDA Toolkit / 架构设置,并在 Issue 中补充完整的编译日志与工具链版本。

验证方法

重新编译时不再出现 “96 errors detected in the compilation of …/ggml/src/ggml-cuda/fattn.cu”,并且 ggml/src/ggml-cuda/fattn.cu 对应的目标文件成功生成、整个构建以成功退出为止。保险起见,可在构建完成后跑一次带 flash attention 的推理任务,确认 CUDA 后端在 Volta 上能正常加载并执行,而不是只在编译层面通过。

参考来源

ggml-org/llama.cpp #29223(含评论中指向的修复 PR #29224

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 24917

发表回复

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