快速结论:该报错通常发生在 llama-server 以 embedding 模式运行 EmbeddingGemma 模型,且 --parallel 参数不是 2 的幂时,触发 GGML 矩阵乘法形状断言失败。优先排查 --parallel 取值,并确认是否使用了 --kv-unified 且上下文长度不能被并行序列数整除。
适用环境:llama.cpp(build 7527),Linux,NVIDIA RTX 4090(仅在 CPU 后端复现亦可),模型为 ggml-org/embeddinggemma-300M-GGUF。
最快修复方案:暂无确认的一步修复方案。Issue 创建者确认该问题已由 PR #18536 修复,但后续评论显示在较新版本中,当用户使用 --parallel 15 且启用 --kv-unified 时仍会复现。可优先尝试将 --parallel 设置为 2 的幂(如 16),并确保总 n_ctx 能被序列数整除。
注意事项:修复 PR 仅覆盖了非 unified cache 的场景;使用 --kv-unified 时上下文长度与嵌套序列数的整除关系仍需人工确认,否则可能再次触发断言。
问题场景
用户使用 llama-server 加载 embeddinggemma-300M-GGUF 模型,启用 --embeddings 嵌入模式,设置 --parallel 65(非 2 的幂),在 CPU 后端启动服务时直接崩溃,抛出 GGML 矩阵乘法形状断言失败。后续又有用户在更新版本中使用 --parallel 15 搭配 --kv-unified 复现了相同崩溃。
报错原文
ggml/src/ggml.c:3282: GGML_ASSERT(ggml_can_mul_mat(a, b)) failed
原因分析
可能原因:GGML 内部在图构建阶段计算矩阵乘法时,a 和 b 的维度不满足乘法约束。当 --parallel 不是 2 的幂时,某些嵌入(embedding)相关的矩阵运算在并行批处理维度上出现形状不匹配。Issue 创建者提到修复 PR #18536 已经处理了非 unified cache 场景;但后续评论显示,使用 --kv-unified 且 n_ctx(如 16005)无法被 --parallel(如 15)整除时,问题会再次出现。
环境排查
- 确认 llama.cpp 版本(报错版本为 build 7527,后续复现版本未标明具体 build,建议升级到包含 PR #18536 的最新版)。
- 检查
--parallel是否为 2 的幂(如 1、2、4、8、16、32、64)。 - 检查总上下文长度
-c能否被--parallel整除;若使用--kv-unified,更需确认该整除关系。 - 在纯 CPU 环境(
CUDA_VISIBLE_DEVICES=)下也可复现,排除 GPU 后端特定问题。
解决步骤
- 将
--parallel改为 2 的幂,例如将--parallel 65改为--parallel 64,或--parallel 15改为--parallel 16(可优先尝试)。 - 调整总上下文长度,确保
-c能被--parallel整除。例如--parallel 15时,可将-c 16005改为-c 16005 - 5 = 16000或直接设为15360(15 的倍数)。 - 如果不需要并发多序列,可考虑设置
--parallel 1,但注意这会限制服务并发能力。 - 升级 llama.cpp 到包含 PR #18536 的最新发布版,该 PR 修复了非 unified cache 场景下的部分形状问题。
验证方法
修改参数后重新启动 llama-server,观察启动日志中是否出现 GGML_ASSERT(ggml_can_mul_mat(a, b)) failed 断言。若服务正常启动且 HTTP 端口成功绑定,再发送一个嵌入请求验证推理是否正常返回结果。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug] All models hang on GB300 (SM103) with FlashInfer 0.6.7](https://www.chat-gpts.plus/wp-content/uploads/2026/08/38729-54a22b97-768x403.jpg)