Eval bug: hy_v3 loads exp_probs_b with no .bias suffix — existing Hy3 GGUFs (AngelSlim, pre-merge quants) fail with “wrong number of tensors

用户在 llama.cpp b10000 版本(含)之后,使用 llama-server 或 llama-cli 加载 Tencent 量化团队 AngelSlim 发布的 Hy3 GGUF 模型(例如 Hy3-IQ1_M-mtp.gguf 、 Hy3-Q4_K_M-mtp.gguf )时触发。也适

Eval bug: hy_v3 loads exp_probs_b with no .bias suffix — existing Hy3 GGUFs (AngelSlim, pre-merge quants) fail with "wrong number of tensors

Eval bug: hy_v3 loads exp_probs_b with no .bias suffix — existing Hy3 GGUFs (AngelSlim, pre-merge quants) fail with “wrong number of tensors

快速结论:该错误发生在 llama.cpp b10000 加载早期(2026年7月前)使用预合并补丁构建的 Hy3 GGUF 模型时。原因是 hy_v3 模型加载器仅接受不带 .bias 后缀的张量名 exp_probs_b,而早期量化文件(如 AngelSlim 的)使用的是带 .bias 后缀的命名方式。优先检查你的 GGUF 文件来源和创建时间,确认是否为早期版本。

问题场景

用户在 llama.cpp b10000 版本(含)之后,使用 llama-serverllama-cli 加载 Tencent 量化团队 AngelSlim 发布的 Hy3 GGUF 模型(例如 Hy3-IQ1_M-mtp.ggufHy3-Q4_K_M-mtp.gguf)时触发。也适用于任何在该 Issue 修复前使用预合并补丁栈(patches/01-hyv3-arch.patch)构建的 Hy3 模型。

报错原文

llama_model_load: error loading model: done_getting_tensors: wrong number of tensors; expected 1298, got 1218
llama_model_load_from_file_impl: failed to load model

原因分析

hy_v3 支持在 #25395 合并后,其模型定义(src/models/hy-v3.cpp)中 MoE 专家选择偏置(exp_probs_b)张量的加载使用了裸名称(即 blk.N.exp_probs_b),而树中所有其他 MoE 架构(如 deepseek2、afmoe 等)都使用带 .bias 后缀的名称(blk.N.exp_probs_b.bias)。

早期量化文件(例如 AngelSlim/Hy3-GGUF 仓库中的首次发布版本)是使用预合并补丁栈构建的,该补丁在 create_tensor 调用中明确使用了 tn(LLM_TENSOR_FFN_EXP_PROBS_B, "bias", i),因此生成了带 .bias 后缀的张量。合并后的代码改用裸名称,导致不兼容。

注意:此问题不影响 2026年7月21日后 AngelSlim 重新上传的模型,这些模型已使用合并后的标准转换器重新生成,采用了裸名称格式。

环境排查

  • 确认 llama.cpp 版本:具体为 b10000 及包含 #25395 合并后的版本(首次坏提交:2969d6d1)。如果使用早期版本(如预合并补丁栈的仓库)则不会出现此问题。
  • 确认 GGUF 模型来源:如果是 AngelSlim/Hy3-GGUF 在 2026年7月21日之前下载的模型,或者使用预合并补丁栈自行转换的模型,可能受影响。
  • 可以通过 python3 -c "import gguf; r=gguf.GGUFReader('你的模型.gguf'); print([t.name for t in r.tensors if 'exp_probs' in t.name])" 检查张量名称是否包含 .bias 后缀。

解决步骤

  1. 优先尝试:下载最新版的 GGUF 模型。根据 Issue 评论,AngelSlim 已在 2026年7月21日更新了仓库中的模型,新版本使用裸名称张量,与合并后的 llama.cpp 兼容。请到 AngelSlim/Hy3-GGUF 重新下载模型。
  2. 如果无法更换模型文件(例如自行转换的模型),需要修改 llama.cpp 源代码并重新编译:在 src/models/hy-v3.cpp 中将加载逻辑改为支持两种命名方式,具体修改如下(已验证本地工作):
    layer.ffn_exp_probs_b = create_tensor(tn(LLM_TENSOR_FFN_EXP_PROBS_B, "bias",   i), {n_expert}, TENSOR_NOT_REQUIRED);
    if (!layer.ffn_exp_probs_b) {
        layer.ffn_exp_probs_b = create_tensor(tn(LLM_TENSOR_FFN_EXP_PROBS_B,           i), {n_expert}, TENSOR_NOT_REQUIRED);
    }

    即首先尝试带 .bias 后缀的版本,如果未找到则尝试裸名称。此修改已确保向后兼容。或者也可以选择恢复到 #25395 合并前使用预合并补丁的版本。

  3. 另一个替代方案(更接近长线修复):标准化 hy_v3 转换器输出,使其始终生成 exp_probs_b.bias(与其他 MoE 架构一致),同时在加载器中保留裸名称回退。这需要修改 convert_hf_to_gguf.py 中的映射逻辑。

验证方法

加载之前报错的 GGUF 模型文件,如果不再出现 wrong number of tensors 错误,且模型能正常推理,则说明问题已解决。也可以通过 llama-cli -m 你的模型.gguf -p "test" -n 10 检查是否正常生成输出。

参考来源

ggml-org/llama.cpp #25657

PR #25395: model: add Hy3 (hy_v3) support with MTP speculative decoding

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 14585

发表回复

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