HF-import derives incorrect `stop` parameters for Muse-Glimmer-30B GGUF pulls — output truncated to ~3 tokens

该报错发生在通过 Ollama 拉取 `hf.co/*/Muse-Glimmer-30B*-GGUF` 第三方 GGUF 模型时,Ollama 接收到的 `stop` 参数来自 Hugging Face 自动生成的元数据,其中包含了模型自身用于开场的结构令牌,导致生成在输出约 3 个 token 后

快速结论:该报错发生在通过 Ollama 拉取 `hf.co/*/Muse-Glimmer-30B*-GGUF` 第三方 GGUF 模型时,Ollama 接收到的 `stop` 参数来自 Hugging Face 自动生成的元数据,其中包含了模型自身用于开场的结构令牌,导致生成在输出约 3 个 token 后被立即截断。优先排查 Hugging Face 仓库的 `params` 配置,并在 Ollama 侧通过自定义 Modelfile 覆盖 `stop` 参数作为临时方案。

适用环境:Ollama 0.32.13,macOS(Apple Silicon, M5 Pro),Metal 后端。已在两个独立转换的 GGUF 仓库上复现:`hf.co/0bserverx/Muse-Glimmer-30B-Heretic-Uncensored-GGUF:Q5_K_M` 和 `hf.co/Blackfrost-AI/Muse-Glimmer-30B-Abliterated-GGUF:Q4_K_M`。另一个未确认的报告涉及 Linux/AMD ROCm 环境(Ollama 0.32.9/0.32.10-rc1-rocm)。

最快修复方案:暂无确认的一步修复方案。可优先尝试使用自定义 Modelfile,仅覆盖 `stop` 参数并保留自动推导的 TEMPLATE,具体步骤见下文。Issue 维护者已确认根因在 Hugging Face 侧,并已向 HF 官方反馈。

注意事项:Hugging Face 侧会因仓库缺少 `params` 文件而自动生成错误的 `stop` 列表;即使该问题在 HF 端修复,已有仓库的元数据可能仍未更新。自定义 Modelfile 方案仅作为绕过,不会影响 Ollama 对模型的其他自动推导。

问题场景

用户通过 Ollama 拉取并运行任意第三方 `hf.co/*/Muse-Glimmer-30B*-GGUF` 模型时,模型加载和生成过程正常,但请求几乎立即终止,返回空响应或极短的截断输出(通常仅 2-3 个 token)。该问题在多个独立转换的 GGUF 仓库上均可复现,不局限于单一来源。

报错原文

HF-import derives incorrect `stop` parameters for Muse-Glimmer-30B GGUF pulls — output truncated to ~3 tokens

# curl 返回的响应片段
"response": " to=self", "eval_count": 3, "done_reason": "stop"

# `ollama show  --parameters` 显示的 stop 列表
stop "<|begin_of_text|>"
stop "<|start|>"
stop "<|message|>"
stop "<|eot|>"
stop "<|start|>user<|message|>"

原因分析

根据 Issue 维护者(Ollama 官方)确认的结果:Ollama 本身并未对 Muse-Glimmer-30B 架构做自动的 `stop` 参数推导,错误的 `stop` 列表实际来自 Hugging Face 拉取流程中返回的元数据。通过直接请求 Hugging Face API 可以看到该模型仓库返回了与 `ollama show` 完全一致的 `stop` 列表。由于该仓库(如 `Blackfrost-AI/Muse-Glimmer-30B-Abliterated-GGUF`)缺少 Ollama 拉取所需的 `params` 文件,Hugging Face 会根据模型词汇表自动生成一份包含所有特殊 token 的 `stop` 参数。其中 “ 和 “ 是模型每轮开场时都会写出的结构令牌,并非终止符,因此一旦模型开始生成自己的 assistant 头部,输出就会被立即截断。

可能原因:Hugging Face 的自动 stop-token 推导逻辑将全部“added special token”视为停止字符串,而忽略了模型实际的 `eos_token_id` / generation config。根据 Meta 模型卡,该模型正确的 EOS token 仅为 `[200001, 200008]`(即 “ 和 “)。

环境排查

  • 确认 Ollama 版本是否为 Issue 中报告的 0.32.13(或发生问题的版本)。
  • 确认操作系统和硬件后端:macOS Apple Silicon + Metal 后端已确认;Linux/AMD ROCm 环境下有未确认的类似报告。
  • 检查拉取的模型仓库是否包含 `params` 文件——缺失该文件会触发 Hugging Face 自动生成默认 stop 参数。
  • 使用 ollama show <model> --parameters 检查实际推导出的 stop 列表是否与上述错误列表一致。
  • 确认模型本身是否可正常运行:排除模型文件损坏后,问题仍指向 stop 参数。

解决步骤

  1. 使用 ollama show <model> --modelfile 获取自动推导的 TEMPLATE 和模型 blob 哈希,确认 TEMPLATE 部分是正确的。
  2. 创建自定义 Modelfile,内容包含 FROM blob 哈希和原本的 TEMPLATE,仅覆盖 stop 参数为正确的 EOS token:
    FROM <blob shas from `ollama show <model> --modelfile`>
    TEMPLATE """<paste auto-derived TEMPLATE — it was correct>"""
    PARAMETER stop <|eot|>
    PARAMETER stop <|end_of_text|>
    
  3. 使用 ollama create 创建新模型,然后重新运行对话测试。
  4. 若希望修复所有同架构模型的体验,需在 Hugging Face 仓库添加正确的 params 文件(包含仅 EOS token 的 stop 列表),或等待 Hugging Face 侧修正自动推导逻辑。

验证方法

修复后,重新运行 ollama run 或调用 /api/generate 接口,确认响应不再为空,且 eval_count 明显提升(Issue 中正常生成时为 137+ 而非 3)。输出内容应为完整回答而非类似 `” to=self”` 的截断文本,且 done_reason 不再因 stop 参数触发于开头。

参考来源

ollama/ollama #17939

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 19920

发表回复

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