Misc. bug: llama-server: GGML_ASSERT “missing result_norm/result_embd tensor” when using –embeddings together with –spec-type draft-mtp

在 llama-server 中,当同时启用 `--embeddings`(或 `--embedding`)和 `--spec-type draft-mtp` 时,启动过程会因 GGML_ASSERT 失败而中止。优先排查方案是确保不要同时启用这两个选项,或尝试暂时移除 `--spec-type d

快速结论:在 llama-server 中,当同时启用 `–embeddings`(或 `–embedding`)和 `–spec-type draft-mtp` 时,启动过程会因 GGML_ASSERT 失败而中止。优先排查方案是确保不要同时启用这两个选项,或尝试暂时移除 `–spec-type draft-mtp` 以完成 embedding 操作。

适用环境:llama.cpp 版本 `b10194-e1a1abb78`;操作系统:Ubuntu 24.04;后端:CUDA(NVIDIA GeForce RTX 5070)与 ROCm(AMD Radeon XT 7900 XTX);涉及模型包括 KAT-Coder-V2.5-Dev-MTP、Ornith-1.0-35B-MTP 和 Qwen3.6-35B-A3B-MTP。

最快修复方案:暂无确认的一步修复方案。当前 Issue 中的主要结论是:如果要使用 embeddings,需要避免同时启用 `–spec-type draft-mtp`;反之,使用 MTP 推理时不要加 `–embeddings`/`–embedding`。

注意事项:该报错出现在模型构建阶段,属于启动即失败的问题;不建议通过忽略断言或使用旧版本来规避,因为底层计算图结构不支持该组合。

问题场景

用户运行 `llama-server` 并加载 MTP 模型(如 KAT-Coder-V2.5-Dev-MTP、Qwen3.6-35B-A3B-MTP 等),同时使用 `–spec-type draft-mtp` 以及 `–embedding` 或 `–embeddings` 参数来启动服务。该问题发生在 Ubuntu 24.04 + CUDA 和 ROCm 后端环境下,均能复现。

报错原文

GGML_ASSERT(inp != nullptr &&
            "missing result_norm/result_embd tensor") failed

Backtrace:

common_speculative_init_result
↓

llama_init_from_model
↓

llama_context
↓

llama_model::build_graph
↓

llm_graph_context::build_pooling
↓

GGML_ASSERT(
    inp != nullptr &&
    "missing result_norm/result_embd tensor"
)

原因分析

可能原因是,在构建池化(pooling)计算图时(`build_pooling`),llama-server 期望找到能够产生 `result_norm` 或 `result_embd` 张量的节点。当同时启用 MTP 推测解码和 embedding 模式时,计算图的构建顺序或对模型输出的处理方式出现冲突,导致找不到预期张量,从而触发 GGML_ASSERT。该问题似乎与 llama-server 中特定的 embedding/pooling 图结构有关,因为 llama-cli 搭配相同的 MTP 模型和 `–spec-type draft-mtp` 时可以正常工作。

环境排查

  • 确认 llama.cpp 版本是否为 `b10194-e1a1abb78` 或包含相同逻辑的版本。
  • 检查当前使用的后端是否为 CUDA(NVIDIA)或 ROCm(AMD),该问题在两个后端上均有报告。
  • 确认是否为目标 MTP 模型(如 KAT-Coder-V2.5-Dev-MTP、Ornith-1.0-35B-MTP、Qwen3.6-35B-A3B-MTP)。
  • 检查启动参数中是否同时包含 `–embedding`/`–embeddings` 与 `–spec-type draft-mtp`。

解决步骤

  1. 当需要运行 embedding 服务时,暂时移除 `–spec-type draft-mtp` 参数,仅保留 `–embeddings`(或 `–embedding`)启动 llama-server。
  2. 当需要使用 MTP 推测解码功能时,不要添加 `–embeddings` 或 `–embedding` 参数,用 `–spec-type draft-mtp` 正常启动。
  3. 如果两种功能都需要,建议分别启动两个独立的 server 实例,一个用于 embedding,一个用于 MTP 推理,或等待上游修复该兼容性问题。
  4. 可优先尝试通过 GitHub Issue 跟踪后续补丁或相关 pull request,更新 llama.cpp 至修复版本后再进行组合测试。

验证方法

确认问题已解决的方法是:在保留所需功能的前提下,移除冲突参数后,`llama-server` 能正常启动并加载模型,不再出现 `GGML_ASSERT` 中止或 `missing result_norm/result_embd tensor` 报错。同时,可通过向 server 发送请求验证 embedding 接口或推理接口能正常返回结果。

参考来源

ggml-org/llama.cpp #26352

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 19681

发表回复

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