Eval bug: Dense Llama 4 model crashes

这个报错发生在将一个稠密(非 MoE)Llama 4 模型从 HuggingFace 转换 GGUF 后尝试加载时,llama.cpp 引擎因模型配置中的专家字段矛盾而崩溃。优先排查转换前的 config.json 中是否残留了不匹配的专家配置字段,删除它们是最快的验证路径。

快速结论:这个报错发生在将一个稠密(非 MoE)Llama 4 模型从 HuggingFace 转换 GGUF 后尝试加载时,llama.cpp 引擎因模型配置中的专家字段矛盾而崩溃。优先排查转换前的 config.json 中是否残留了不匹配的专家配置字段,删除它们是最快的验证路径。

适用环境:llama.cpp(master,commit 1d2869c6e);通过 Ollama 0.32.9 复现;Linux;GGML 后端为 HIP;显卡为 Radeon 8060S Graphics;模型为 meta-llama/Llama-Guard-4-12B。

最快修复方案:暂无“一步修复”且被官方直接验证的方案;社区成员 fairydreaming 提出并在其本地验证的可用办法是:在转换前手动编辑模型 config.json,删除其中与专家相关的配置字段(如 num_experts_per_toknum_local_experts),然后再执行 convert_hf_to_gguf.py 转换。此方法可优先尝试。

注意事项:该方案属于 Issue 讨论链中的社区验证,并非官方发布补丁;删除字段操作需要保证模型本身确实是稠密模型(非 MoE)才不会引入其他行为偏差。llama.cpp 官方尚未在 Issue 关闭时给出合并代码修复,也没有此场景下的正式发布版本确认。

问题场景

使用 llama.cpp 的转换脚本 convert_hf_to_gguf.py 处理一个不带稀疏专家(MoE)机制的 Llama 4 模型(如 Llama-Guard-4-12B)时,转换本身能正常完成且架构被标记为 llama4general.architecture = llama4llama4.expert_count = 0)。但在后续通过 Ollama 或 llama-server 加载该 GGUF 文件时,进程立即终止,报出运行时异常,提示“模型不能有零个专家”。

报错原文

Error: 500 Internal Server Error: llama-server process has terminated: exit status 1: error loading model: llama4 model cannot have zero experts

原因分析

根据 Issue 讨论,根因并非 GGUF 转换本身产生的二进制问题,而更可能出在 HuggingFace 原始模型的 config.json 数据不一致上。对于实际是稠密(非 MoE)的模型,其 config.json 中仍包含 num_experts_per_toknum_local_experts 这类 MoE 专有配置字段,且数值自相矛盾(例如 num_experts_per_tok 为 1,而 num_local_experts 为 0)。llama.cpp 的加载逻辑中,load_arch_hparams 部分虽已考虑并支持 n_expert == 0(即稠密 Llama 4 / MobileLLM 场景),但在 load_arch_tensors 中对 n_expert == 0 仍显式抛错。这种代码层面的前后矛盾被源模型的错误配置触发,进而导致加载直接崩溃。

环境排查

  • 确认 llama.cpp 版本是否基于 master 分支 commit 1d2869c6e;若使用其他版本,请同时确认该版本的 load_arch_tensors 行为。
  • 确认通过 Ollama 调用时的版本,Issue 复现版本为 0.32.9。
  • 确认操作系统为 Linux,GGML 后端为 HIP(AMD GPU 环境),显卡为 Radeon 8060S。
  • 如后续复现,建议检查转换前的原始 HuggingFace config.json 是否带有 num_experts_per_toknum_local_experts 字段,以及这些字段的值是否匹配模型的真实稠密结构。

解决步骤

  1. 先从 HuggingFace 下载原始模型目录(如 meta-llama/Llama-Guard-4-12B),找到 config.json 文件。
  2. 打开 config.json,检查是否存在 num_experts_per_toknum_local_experts 字段。若是稠密模型却出现这些字段,或这些字段的数值组合不匹配(例如 num_local_experts 为 0),先备份原文件。
  3. 在备份后,移除上述两个字段(Issue 社区验证时同时删除这两个 key 后转换成功),保存修改。
  4. 使用修改后的 config.json 重新运行 llama.cpp 的 convert_hf_to_gguf.py 生成新的 GGUF 文件。
  5. 使用 llama-server 或 Ollama 加载新生成的 GGUF,确认不再触发“llama4 model cannot have zero experts”错误。

验证方法

完成转换并加载后,若 llama-server 能正常启动,且没有出现 llama4 model cannot have zero experts 或“exit status 1”错误,即可视为问题已解决。你也可以在 llama-server 或 Ollama 中执行一次简单的推理请求(例如发送短文本),确认模型能够正常生成输出而不是立即崩溃。

参考来源

ggml-org/llama.cpp #27020

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22508

发表回复

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