Eval bug: MTP with fit causes crash

该报错发生在启用 MTP(Multi-Token Prediction)且开启 --fit 内存估算功能时,llama.cpp 服务端在启动阶段就会崩溃,报错文案为 Eval bug: MTP with fit causes crash 。优先排查方向是关闭 --fit 选项或升级到更高版本。

快速结论:该报错发生在启用 MTP(Multi-Token Prediction)且开启 --fit 内存估算功能时,llama.cpp 服务端在启动阶段就会崩溃,报错文案为 Eval bug: MTP with fit causes crash。优先排查方向是关闭 --fit 选项或升级到更高版本。

适用环境:llama.cpp 版本 b9503;受影响的模型包括 Qwen 系列以及基于 #23398 改版的 Gemma4;ROCm 和 Vulkan 后端均受影响。

最快修复方案:在启动命令中添加 --fit off 可以避免崩溃(Issue 作者已确认此规避方法有效);另外有评论指出该问题至少在版本 9554 中已修复,因此升级到较新版本也应能解决。

注意事项:--fit off 是绕过方法而非根本修复,会失去内存估算功能;版本 9554 的修复声明来自评论,并未在原始 Issue 中给出具体修复 commit 或对比验证,建议升级后自行回归测试。

问题场景

在 llama.cpp 服务端(server)中同时启用 MTP(--spec-type draft-mtp)和 --fit 内存估算功能时,模型加载阶段直接崩溃。触发条件与模型本身无关,Qwen 和 Gemma4 都能稳定复现,说明问题出在 llama.cpp 的 MTP 与 fit 代码路径。

报错原文

Eval bug: MTP with fit causes crash

原因分析

根据 Issue 作者给出的分析,问题出在 --fit 的内存估算路径上,而不是 MTP 分配本身。具体流程是:当使用 --spec-type draft-mtp 时,server 在加载真实模型之前会调用 common_get_device_memory_data();该函数会创建一个设置 no_alloc = true 的“假”上下文(fake context),并调用 llama_get_memory_breakdown() 来查询内存占用。然而对于 MTP 场景,这个假上下文并不总是具备完整的运行时有效性——MTP 的 draft 上下文可能需要 target 上下文/来源,或至少需要一个保留的 scheduler,然后才能正确查询其内存明细。但 llama_context::memory_breakdown() 中假设 scheduler 一定存在,导致在 MTP + fit 组合下崩溃。

环境排查

  • 确认 llama.cpp 版本:b9503(该版本确认崩溃),版本 9554 及以上据报道已修复。
  • 确认后端类型:ROCm 和 Vulkan 均受影响,其他后端(如 CUDA)未在 Issue 中提及。
  • 确认启动参数中是否同时包含 --spec-type draft-mtp--fit

解决步骤

  1. 快速绕过(已验证):在启动命令中添加 --fit off,或直接省略 --fit 参数,确认服务可以正常启动。
  2. 升级版本(推荐):升级到 b9554 或更高版本,然后重新测试 MTP + fit 组合是否恢复正常。
  3. 回归验证:如果升级后仍然有问题,可以提供一个最小复现命令(模型 + 参数)到 Issue 中继续跟踪,因为原始 Issue 的修复声明并未附带详细验证信息。

验证方法

在添加 --fit off 或升级后,使用相同的模型和参数启动 server,确认不再出现 “Eval bug: MTP with fit causes crash” 崩溃信息,并能正常完成模型加载和推理请求。

参考来源

ggml-org/llama.cpp #24117

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 21315

发表回复

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