speculative: combined –spec-type draft-mtp + external draft (-md) crashes at init — shared cparams forces LLAMA_CONTEXT_TYPE_MTP onto the d

当 --spec-type 同时启用 draft-mtp 与外部草稿模型(如 draft-dflash )并配合 -md 参数时,llama.cpp 服务会在模型加载阶段崩溃,报错 failed to create MTP context 。优先排查共享 cparams 是否错误地将 LLAMA_C

快速结论:--spec-type 同时启用 draft-mtp 与外部草稿模型(如 draft-dflash)并配合 -md 参数时,llama.cpp 服务会在模型加载阶段崩溃,报错 failed to create MTP context。优先排查共享 cparams 是否错误地将 LLAMA_CONTEXT_TYPE_MTP 类型传递给了外部草稿模型。

适用环境:llama.cpp(含 draft-dflash 能力分支)、ROCm 环境、Strix Halo / gfx1151 iGPU;结合 --spec-type draft-dflash,draft-mtp,ngram-mod-md <draft.gguf> 的服务器场景。

最快修复方案:暂无确认的一步修复方案。Issue 作者提供了补丁,通过拆分 cparams 使 MTP 上下文类型仅应用于目标模型,并区分 ctx_dftctx_mtp 的分配逻辑(在 262k token 配置下验证成功)。

注意事项:该补丁为作者本地验证,尚未合并到主分支;即使修复初始化问题,在 262k token 生产配置下 MTP 上下文 + 草稿上下文 + KV 缓存共存会导致 64GB GTT 内存压力过大(可触发核心转储),较小上下文可正常运行。

问题场景

用户在 llama.cpp 服务器中混合使用多种投机解码类型,同时指定了 --spec-type draft-dflash,draft-mtp,ngram-mod 和外部草稿模型参数 -md <draft.gguf>。服务在模型加载阶段直接退出,无法启动。

报错原文

common_speculative_init_result: failed to create MTP context
llama_server: exiting due to model loading error
# 根本原因日志片段:context type MTP requested but model doesn't contain MTP layers

原因分析

tools/server/server-context.cpp 的投机初始化路径(约第 1136 行)中,当 --spec-type 列表混合了 draft-mtp 与外部草稿模型类型且提供了 -md 参数时,单个共享的 cparams 会将 ctx_type = LLAMA_CONTEXT_TYPE_MTP 错误地带入外部草稿模型的 llama_init_from_model 调用。由于 MTP 层只存在于目标模型中,该调用返回 nullptr,从而触发误导性的 failed to create MTP context 错误——实际上草稿模型从未成功加载。

环境排查

  • 确认 llama.cpp 版本是否包含 draft-dflash 支持(补丁基于该分支开发)。
  • 确认 ROCm 驱动与硬件(Strix Halo / gfx1151 iGPU)是否满足 MTP 上下文内存需求。
  • 检查系统可用内存(GTT 预算):在 262k token 配置下,MTP 上下文 + 外部草稿上下文 + KV 缓存共存可能导致 64GB 内存超限。
  • 验证是否可复现:使用较小上下文(如低于生产配置)测试组合投机类型是否正常初始化。

解决步骤

  1. 应用 Issue 作者提供的补丁(基于 2e0816267 可能可干净应用):在 common_params_speculative_draft 结构体中新增 llama_context * ctx_mtp = nullptr;
  2. common/speculative.cppdraft_mtp 实现中,检查 this->params.ctx_mtp 是否存在;若存在(组合模式),则将其作为 ctx_dft 使用(因为此时 ctx_dft 属于外部草稿模型)。
  3. common_speculative_init_result::impl 中新增 llama_context_ptr context_mtp;,确保析构顺序正确。
  4. server-context.cpp 中分离 cparams_mtp,确保 MTP 上下文类型仅应用于针对目标模型创建的上下文,外部草稿模型保留默认类型上下文。
  5. 重新编译 llama.cpp,确保补丁完整应用(补丁应为 4 个文件、+37/−7 行)。
  6. 若初始化问题已修复但内存不足,可优先尝试减小上下文长度(如从 262k 降至 128k 或更低)进行验证。

验证方法

应用补丁后,使用相同的 --spec-type draft-dflash,draft-mtp,ngram-mod + -md <draft.gguf> 命令启动服务器,观察是否能通过初始化阶段(不再出现 failed to create MTP context 报错)。若初始化成功,可进一步进行推理测试;同时注意系统内存消耗,避免因 MTP 上下文 + 草稿上下文 + KV 缓存共存导致核心转储。

参考来源

ggml-org/llama.cpp #27850

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 21255

发表回复

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