
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是否已设置但未生效
解决步骤
- 首先尝试升级:该问题已在 Ollama 后续版本中修复,请升级到包含修复版本(参考 PR #14796)。
- 如果无法升级,可尝试手动编译:从官方仓库检出 v0.31.2 的 commit
a6293eb5164214f15e7856268f3adddeae1026e2,修改x/mlxrunner/client.go中的硬编码超时:
原代码:timeout := time.After(2 * time.Minute)
修改为:timeout := time.After(envconfig.LoadTimeout()) - 重新编译并替换 Ollama 二进制文件后,设置
OLLAMA_LOAD_TIMEOUT为更大的值(如OLLAMA_LOAD_TIMEOUT=15m)再运行模型。 - 可优先尝试:在修复版本中,确保
OLLAMA_LOAD_TIMEOUT环境变量正确设置,且在 MLX runner 启动时生效。
验证方法
尝试加载模型,观察日志中是否不再出现 timeout waiting for mlx runner to start 错误,并且模型正常返回 HTTP 200 状态码。如果使用打补丁的版本,可以记录模型启动总耗时,确认其超过了原始的 2 分钟限制但仍在 OLLAMA_LOAD_TIMEOUT 设置的范围内。



