MLX runner startup timeout ignores OLLAMA_LOAD_TIMEOUT and can kill a model just before it becomes ready

用户在 Ollama 中运行 MLX 模型(如 gemma4:12b-mlx)时,模型在加载主张量和 Draft 模型后,Ollama 在正好 2 分钟时返回超时错误,即使设置了 OLLAMA_LOAD_TIMEOUT 环境变量也无法改变这个固定超时。该问题在 Ollama 0.31.1 和 0.3

MLX runner startup timeout ignores OLLAMA_LOAD_TIMEOUT and can kill a model just before it becomes ready

MLX runner startup timeout ignores OLLAMA_LOAD_TIMEOUT and can kill a model just before it becomes ready

快速结论:此报错发生在 Ollama 加载 MLX 模型(如 gemma4:12b-mlx)时,MLX runner 启动超时固定为 2 分钟,即使设置了 OLLAMA_LOAD_TIMEOUT 也会被忽略,导致模型在即将加载完成时被杀死。优先排查方法是检查 OLLAMA_LOAD_TIMEOUT 环境变量是否生效,以及模型启动日志中是否在接近 2 分钟时被中断。

问题场景

用户在 Ollama 中运行 MLX 模型(如 gemma4:12b-mlx)时,模型在加载主张量和 Draft 模型后,Ollama 在正好 2 分钟时返回超时错误,即使设置了 OLLAMA_LOAD_TIMEOUT 环境变量也无法改变这个固定超时。该问题在 Ollama 0.31.1 和 0.31.2 版本中均被复现。

报错原文

timeout waiting for mlx runner to start

日志中最后成功输出的内容类似:

Gemma4UnifiedForConditionalGeneration
loaded 1389 tensors
Gemma4UnifiedAssistantForCausalLM
Loaded draft model tensor_prefix=draft. config=draft/config.json arrays=49

原因分析

Ollama MLX runner 的 Client.WaitUntilRunning 函数中使用了一个硬编码的 2 分钟超时:

timeout := time.After(2 * time.Minute)

这个超时没有遵循 OLLAMA_LOAD_TIMEOUT 环境变量的设置。当 MLX 模型加载耗时超过 2 分钟时(例如 gemma4:12b-mlx 在特定硬件上需要 109-137 秒),Ollama 会提前杀死 runner 进程,而模型可能只需再多几秒就能完全就绪。一个测试案例显示,模型在 137.008 秒后才准备就绪,而硬编码的 2 分钟(120 秒)超时恰好在此前 17 秒就终止了进程。

环境排查

  • Ollama 版本:0.31.1 或 0.31.2(建议确认是否使用了受影响版本)
  • 操作系统:macOS(如 26.5.1)
  • 硬件:Apple Silicon(如 M2)
  • 内存:16 GB 或更多
  • 模型:gemma4:12b-mlx(以及其他 MLX 格式模型)
  • 量化类型:nvfp4
  • 存储:模型是否在外部 SSD 上(可能影响加载速度)
  • 环境变量:OLLAMA_LOAD_TIMEOUT 是否已设置但未生效

解决步骤

  1. 首先尝试升级:该问题已在 Ollama 后续版本中修复,请升级到包含修复版本(参考 PR #14796)。
  2. 如果无法升级,可尝试手动编译:从官方仓库检出 v0.31.2 的 commit a6293eb5164214f15e7856268f3adddeae1026e2,修改 x/mlxrunner/client.go 中的硬编码超时:
    原代码:timeout := time.After(2 * time.Minute)
    修改为:timeout := time.After(envconfig.LoadTimeout())
  3. 重新编译并替换 Ollama 二进制文件后,设置 OLLAMA_LOAD_TIMEOUT 为更大的值(如 OLLAMA_LOAD_TIMEOUT=15m)再运行模型。
  4. 可优先尝试:在修复版本中,确保 OLLAMA_LOAD_TIMEOUT 环境变量正确设置,且在 MLX runner 启动时生效。

验证方法

尝试加载模型,观察日志中是否不再出现 timeout waiting for mlx runner to start 错误,并且模型正常返回 HTTP 200 状态码。如果使用打补丁的版本,可以记录模型启动总耗时,确认其超过了原始的 2 分钟限制但仍在 OLLAMA_LOAD_TIMEOUT 设置的范围内。

参考来源

ollama/ollama #17157

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 13262

发表回复

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