gemma4:26b (MoE, Q4_K_M) returns empty response on Ollama 0.30.2

用户在 Ollama 0.30.2 运行的 Docker 容器中,通过 API 调用 gemma4:26b 模型。模型能正常加载到显存(约 17GB),推理速度正常(~67 tokens/sec),API 响应中 context 数组包含有效的 token ID,但 response 字段始终为空字

gemma4:26b (MoE, Q4_K_M) returns empty response on Ollama 0.30.2

gemma4:26b (MoE, Q4_K_M) returns empty response on Ollama 0.30.2

快速结论:在 Ollama 0.30.2 中使用 gemma4:26b(MoE 架构、Q4_K_M 量化)模型时,API 的响应字段返回空字符串 "",但底层 token 已正常生成。优先排查是否为 Ollama 0.30 系列版本的特定 bug,并考虑使用 num_predict 参数或切换到 0.30.3+ 版本(如果可用)。

问题场景

用户在 Ollama 0.30.2 运行的 Docker 容器中,通过 API 调用 gemma4:26b 模型。模型能正常加载到显存(约 17GB),推理速度正常(~67 tokens/sec),API 响应中 context 数组包含有效的 token ID,但 response 字段始终为空字符串。用户也尝试了同系列 gemma4:31b-it-bf16 模型,同样复现该问题。

报错原文

curl -X POST http://localhost:11434/api/generate -d '{
  "model":"gemma4:26b",
  "prompt":"What is 2+2?",
  "options":{"num_predict":64,"num_ctx":4096}
}'
# Returns: response="" but context contains generated token IDs
# Actual: response: "", done_reason: "length", valid token IDs in context

原因分析

该问题极可能是 Ollama 0.30.2 版本的特定 bug,而非模型本身的错误。原因包括:

  • 版本回归:Issue 提及相关 closed issue #15428 虽然在之前的版本标记为已修复,但在 0.30.2 上仍然复现,表明 0.30 系列可能存在回归。
  • MoE 兼容性问题:gemma4:26b 是 MoE(Mixture of Experts)架构模型,可能和 Ollama 0.30.2 的 response 解码流程存在兼容问题。
  • 多 token response 解析异常:用户测试发现,当 num_predict 设置较大时,response 场最后一段 token 不返回;但立即跟随第二次请求时,前一次生成的 token 才会被显式输出,暗示 response 流式输出缓存/拼接有 bug。
  • 非硬件/驱动原因:同一环境下 granite4.1:30b-64k(dense 模型)正常工作,排除了 CUDA/驱动问题。

环境排查

  • Ollama 版本: 0.30.2
  • 模型: gemma4:26b (Q4_K_M, 量化版本号 2, 文件类型 15)
  • 硬件: NVIDIA GB10 (DGX Spark), 显存 128GB unified RAM
  • CUDA 版本: 13.0, 驱动版本: 580.142
  • 运行环境: Docker 容器,启动时含 --gpus all
  • 其他已排除的因素: num_gpu_layers:0 纯 CPU 运行仍复现;相同环境下密集模型 granite4.1:30b-64k 正常。

解决步骤

  1. 确认是否为版本 bug:检查 Issue 更新,确认是否有 Ollama 0.30.3 或更高版本发布。如果有,可优先尝试升级 Ollama 版本。
  2. 调整 API 调用方式作为临场 workaround:在 Issue 评论中,用户发现修改 num_predict 到较小值(例如 10 或直接不设置)可以使 response 字段正常输出。可尝试移除 num_predict,或将其设为小于 64 的值。
  3. 显式捕获流式输出(如果使用 API):按 Issue 所展示,响应以 JSON 行流式返回,每行有 response 字段。可编写脚本拼接所有流式响应的非空 response 值,避开最终汇总 response 为空的 bug 。
  4. 回退到已知的 stable 版本:如果紧急使用,可以尝试将 Ollama 降级到 0.29.x(需确认该版本对 gemma4 模型的支持情况)。

验证方法

执行以下 curl 命令,检查 response 字段在 done:true 之前是否逐段输出文字内容,而非空字符串:

curl -X POST http://localhost:11434/api/generate -d '{
    "model":"gemma4:26b",
    "prompt":"What is 2+2?",
    "options":{"num_predict":64,"num_ctx":4096}
}'
# 应看到类似:{"response":"2","done":false} ... {"response":"4","done":false} ... {"response":"","done":true}

如果响应中每个流式行的 response 字段都不为空(至少在生成过程中),则问题缓解。最终 done:true 行的 response 为空是正常的。如果整个流中只出现 response="",则问题未解决。

参考来源

ollama/ollama #16456

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 10850

发表回复

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