快速结论:这个 Compile bug: Build error with sm_70 on Windows 11 通常出现在用 CUDA 加上 -DCMAKE_CUDA_ARCHITECTURES 包含 70-real(Volta / V100,sm_70)编译 llama.cpp 时,fattn.cu.obj 编译失败。优先排查你是否在编译 sm_70 架构,以及是否落入了引入回归的 commit 1884824fd。
适用环境:Issue 已确认的环境为 Windows 11、CUDA 12.9、NVIDIA V100(sm_70)、llama.cpp commit 1884824fdaeb19af27cd8ba0ca50fcbed28eca44;评论中另有 Debian 13、NVIDIA 驱动 580、CUDA 12.9、V100 16GB 与 RTX 3090 24GB 的复现。
最快修复方案:暂无确认的一步修复方案。Issue 中未给出已合并或已验证的补丁,建议临时规避或跟踪上游修复。
注意事项:该 Issue 标签为 bug-unconfirmed,说明当时尚未被维护者正式确认为 bug,也没有明确给出修复 commit 或 PR,请勿把下面的排查步骤当作已验证的官方修复。
问题场景
用户在 Windows 11 上用 CMake 构建 llama.cpp,开启 CUDA 后端,并在 CMAKE_CUDA_ARCHITECTURES 中指定 70-real;89-real(即包含 Volta sm_70),编译目标为 llama-server。失败发生在 CUDA 源文件 fattn.cu.obj,报错位置在它包含的 fattn-mma-f16.cuh。评论中同类复现出现在 Debian 13 + V100 / RTX 3090,架构写成 70-real;86-real。
报错原文
FAILED: [code=1] ggml/src/ggml-cuda/CMakeFiles/ggml-cuda.dir/Release/fattn.cu.obj
D:\...\ggml\src\ggml-cuda\fattn-mma-f16.cuh(683): error: no instance of overloaded function "load_ldmatrix" matches the argument list
argument types are: (ggml_cuda_mma::tile<8, 4, half2, ggml_cuda_mma::DATA_LAYOUT_I_MAJOR_MIRRORED>, half2 *const __restrict__, const int, int, const int)
load_ldmatrix<swz>(K_A, tile_K, i_KQ_0, k_KQ_0 - k0_start, stride_tile_K);
^
D:\...\ggml\src\ggml-cuda\mma.cuh(877): note #3327-D: candidate function template "ggml_cuda_mma::load_ldmatrix<swz,T,dl>(tile<16, 8, T, dl> &, const T *, int, int, int)" failed deduction
注释中列出的候选重载均不匹配 tile<8, 4, ...>,其中包括:
note #3323-D: substituting explicit template arguments ... for function template "ggml_cuda_mma::load_ldmatrix(ggml_cuda_mma::tile<8, 8, T, ggml_cuda_mma::DATA_LAYOUT_I_MAJOR> &, const T *, int)" failed
note #3323-D: substituting ... "ggml_cuda_mma::load_ldmatrix(ggml_cuda_mma::tile<16, 4, T, dl> &, const T *, int)" failed
note #3323-D: substituting ... "ggml_cuda_mma::load_ldmatrix(ggml_cuda_mma::tile<16, 8, T, dl> &, const T *, int)" failed
note #3327-D: candidate function template "ggml_cuda_mma::load_ldmatrix<swz,T,dl>(tile<16, 8, T, dl> &, const T *, int, int, int)" failed deduction
原因分析
根据 Issue 正文的描述:
- 回归由 commit
1884824fdaeb19af27cd8ba0ca50fcbed28eca44引入(作者标注为 First Bad Commit)。 - 该 commit 新增的 5 参数
load_ldmatrix重载只对tile<16, 8>定义,而 Volta 路径调用的是tile<8, 4, half2, DATA_LAYOUT_I_MAJOR_MIRRORED>,因此模板推导失败。 - 在该 commit 之前,
fattn-swizzle.cuh中的 wrapper 能在非 swizzled 路径上处理任意 tile 形状;重构把这条路径去掉了。 - 作者检查了其他架构,只有 sm70 受影响;CI 不构建 sm70,所以没有被捕获。
因此根因可判断为重构时删除了 Volta 非 swizzled 路径对任意 tile 形状的处理,而不只是“可能是”这样。sm_70 以下之外是否还有边界情况,Issue 未展开。
环境排查
- 确认构建命令中的
CMAKE_CUDA_ARCHITECTURES是否包含70-real(或等价 sm_70)。 - 确认当前 git commit 是否等于或晚于
1884824fdaeb19af27cd8ba0ca50fcbed28eca44。 - 确认 CUDA 版本(Issue 复现为 12.9)。
- 确认显卡架构:V100 / sm_70 是已确认复现的硬件。
- 确认操作系统与编译器环境:Windows 11(原 Issue)、Debian 13(评论复现)。
解决步骤
- 先确认自己是否真的在编译 sm_70。检查 CMake 缓存或构建命令中的
-DCMAKE_CUDA_ARCHITECTURES值,是否包含70-real。 - 如果目标机器并不运行 sm_70 硬件(例如只跑 RTX 30/40 系),可优先尝试从
CMAKE_CUDA_ARCHITECTURES中移除70-real后重新配置并编译。 - 如果必须为 V100 产出 sm_70 代码,可优先尝试回退到 commit
1884824fd之前的版本进行构建,以规避该回归。 - 保留完整报错日志(含候选重载的 note #3323-D / #3327-D 行),便于上游定位。
- 关注上游是否针对该回归提交修复;在确认修复 commit 前,不建议把“添加自定义 5 参数重载”当作标准解法,因为 Issue 未验证该做法。
验证方法
重新执行原有构建命令(例如 cmake --build build --config Release --target llama-server)。若 fattn.cu.obj 不再出现 no instance of overloaded function "load_ldmatrix",且目标成功链接完成,则说明规避或修复生效。若使用回退版本方法,还需确认回退后的 commit 不再包含 1884824fd。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug] Ascend NPU: RMSNorm crashes with elementwise_affine=False; _native_npu FA rejects [B, N, 1, Skv] masks (LTX-2)](https://www.chat-gpts.plus/wp-content/uploads/2026/09/14380-1858c464-768x403.jpg)