Eval bug: `GGML_ASSERT(ggml_can_mul_mat(a, b)) failed` when –parallel is not power of 2 (embeddinggemma)

该报错通常发生在 llama-server 以 embedding 模式运行 EmbeddingGemma 模型,且 --parallel 参数不是 2 的幂时,触发 GGML 矩阵乘法形状断言失败。优先排查 --parallel 取值,并确认是否使用了 --kv-unified 且上下文长度不能被

快速结论:该报错通常发生在 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 内部在图构建阶段计算矩阵乘法时,ab 的维度不满足乘法约束。当 --parallel 不是 2 的幂时,某些嵌入(embedding)相关的矩阵运算在并行批处理维度上出现形状不匹配。Issue 创建者提到修复 PR #18536 已经处理了非 unified cache 场景;但后续评论显示,使用 --kv-unifiedn_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 后端特定问题。

解决步骤

  1. --parallel 改为 2 的幂,例如将 --parallel 65 改为 --parallel 64,或 --parallel 15 改为 --parallel 16(可优先尝试)。
  2. 调整总上下文长度,确保 -c 能被 --parallel 整除。例如 --parallel 15 时,可将 -c 16005 改为 -c 16005 - 5 = 16000 或直接设为 15360(15 的倍数)。
  3. 如果不需要并发多序列,可考虑设置 --parallel 1,但注意这会限制服务并发能力。
  4. 升级 llama.cpp 到包含 PR #18536 的最新发布版,该 PR 修复了非 unified cache 场景下的部分形状问题。

验证方法

修改参数后重新启动 llama-server,观察启动日志中是否出现 GGML_ASSERT(ggml_can_mul_mat(a, b)) failed 断言。若服务正常启动且 HTTP 端口成功绑定,再发送一个嵌入请求验证推理是否正常返回结果。

参考来源

ggml-org/llama.cpp #18532

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18929

发表回复

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