快速结论:该报错出现在 RTX 5090(Blackwell,compute 12.0)上用 llama.cpp CUDA 后端加载 cohere2moe 架构模型(如 North-Mini-Code-1.0)进行推理时,MoE 路径的 MUL_MAT 触发 CUDA illegal memory access。优先确认两件事:Flash Attention 是否为唯一触发条件,以及是否为特定量化文件复现。报错原文为 Eval bug: CUDA illegal memory access (MUL_MAT) on RTX 5090 with cohere2moe。
适用环境:Issue 已确认:llama.cpp(Ollama 内置 bundle 的 llama-server)、Windows 11、CUDA 后端、RTX 5090;报告者本机使用 Ollama v0.32.3 及之后版本,v0.32.1 正常;测试上下文 n_ctx=8192、n_batch=1024、n_ubatch=1024。另一位复现者环境为 RTX 5070 Ti Laptop 12 GB(sm_120)、Windows 11、驱动 617.14、CUDA 13.4。Issue 未给出具体 Python/PyTorch 版本,不要据此推断。
最快修复方案:暂无确认的一步修复方案。可优先尝试:在启动参数中加入 --flash-attn off;报告者在关闭 Flash Attention 后不再崩溃。另请注意,该复现条件来自报告者本人的 RTX 5090 环境,Issue 中未得到独立验证。
注意事项:关闭 Flash Attention 只是绕过问题,长上下文会占用更多显存,且并不等同于修复 Ollama 内置二进制中的回归。Issue 标签为 bug-unconfirmed,发起的复测在 RTX 5070 Ti 上未复现,因此问题可能局限于特定显卡、驱动、CUDA 版本或具体 GGUF 量化文件的组合,尚不能定论。
问题场景
用户通过 Ollama(Windows 11)加载 cohere2moe 架构的 GGUF 模型(North-Mini-Code-1.0-UD-Q4_K_M.gguf,约 19.2 GB),并用自定义 Modelfile 注入较长的 system prompt 后发起 completion/chat 请求。崩溃发生在 Ollama 内置的 llama-server.exe 评估阶段,而不是 Ollama 封装层。报告者同时给出了不依赖 Ollama 的原生复现命令:在 RTX 5090 上运行 llama-server --model <cohere2moe gguf> -c 8192 --flash-attn auto -b 1024 -ub 1024,然后发送普通请求即可触发。
报错原文
ggml_cuda_compute_forward: MUL_MAT failed
CUDA error: an illegal memory access was encountered
C:\...\ggml\src\ggml-cuda\ggml-cuda.cu:108: CUDA error
current device: 0, in function ggml_cuda_compute_forward at C:\...\ggml\src\ggml-cuda\ggml-cuda.cu:2422
原因分析
最可能的触发点在 CUDA 后端的 Flash Attention 路径与 MoE 矩阵乘法(ggml_cuda_compute_forward / MUL_MAT)的组合上,且与 Blackwell(compute 12.0)相关。证据如下:报告者关闭 Flash Attention 后不再崩溃;同一 GGUF 在 macOS/MLX 上正常,说明模型文件本身未损坏;Ollama v0.32.1 正常而 v0.32.3 起崩溃,回归窗口落在两次发布之间的 llama.cpp 上游更新。
另一个重要线索是 prompt 长度:短 system prompt 正常,加长 system prompt 后在 prompt 评估阶段立刻崩溃,说明问题与长 prompt 触发的批量矩阵乘法路径有关,而非模型加载失败。
但需注意,Issue 中复测方在 RTX 5070 Ti Laptop(同为 sm_120)上使用 b10091(对应 Ollama 0.32.3)、当前 master 4213a1924、Ollama 0.40.2 内置 llama-server(b11351),分别以默认放置和 --fit off -ngl 99 全量卸载到 GPU 运行,并用约 3450 token 的 prompt 测试,均未崩溃;针对该模型 MoE 形状的 test-backend-ops 用例(mxfp4、nvfp4、q4_K、q8_0)也全部通过,fp4 用例在 compute-sanitizer memcheck 下干净。因此复现条件可能还与具体量化文件、驱动/CUDA 版本组合或 5090 特有的运行时行为有关。
环境排查
- 确认显卡型号与 compute capability:RTX 5090 为 sm_120 / compute 12.0;复测用的 5070 Ti 同为 sm_120 但未复现,可作为对照。
- 确认实际运行的 llama.cpp 构建号(发起的复测涉及 b10091、4213a1924、b11351),不要只记录 Ollama 外层版本号。
- 确认 CUDA 版本与 NVIDIA 驱动版本是否与崩溃环境一致(复测环境为 CUDA 13.4、驱动 617.14,仅作对照,不代表回退目标)。
- 确认启动参数中的
--flash-attn取值、-c、-b、-ub。 - 确认 GGUF 具体文件与量化(报告者用 UD-Q4_K_M,复测者用 UD-Q2_K_XL),并核对文件大小与校验。
- 确认 prompt 长度:短 prompt 是否正常、长 prompt 是否稳定复现。
- Windows 下留意日志中的 load_tensors 行,确认各层卸载位置与显存占用是否异常。
解决步骤
- 先用短 system prompt 做基线测试,确认模型本身可正常加载和推理。
- 在同样的长 prompt 下加长上下文,观察是否稳定在 prompt 评估阶段崩溃,以确认触发条件。
- 将
--flash-attn设为 off 后重跑同一请求,观察是否不再出现MUL_MAT failed/illegal memory access。这是 Issue 中唯一被报告者验证有效的规避方式。 - 如仍需要 Flash Attention,尝试切换或重新下载 GGUF 量化文件(例如更换 Q4_K_M 与其他量化做对照),以排除文件层面的因素。
- 记录精确的 llama.cpp 构建号、CUDA 与驱动版本、完整错误堆栈和 crash 前的 load_tensors 日志,便于进一步定位回归提交。
- 若在 Ollama 内复现,同时记录 Ollama 版本并确认底层 llama-server 构建号,否则无法判断是否落在同一回归区间。
验证方法
以相同的模型、相同的长 prompt、相同的 -c 8192 -b 1024 -ub 1024 参数重复发送 completion/chat 请求:若不再出现 ggml_cuda_compute_forward: MUL_MAT failed 与 an illegal memory access was encountered,且能正常输出完整回复,说明规避生效。若要确认是否真正修复而非仅规避,需在开启 Flash Attention 的条件下复跑并保持稳定,目前 Issue 中尚无此结论。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug]: Stream cut after finish_reason but before the include_usage chunk is logged as success with locally counted usage (cached_tokens lost](https://www.chat-gpts.plus/wp-content/uploads/2026/10/47332-45006be2-768x403.jpg)

