create: MLX panic “no Stream(gpu, 1)” quantizing safetensors on Apple Silicon — regression in v0.23.1

用户在 macOS Apple Silicon 上通过 ollama create --experimental --quantize 命令(例如 int4 , int8 , mxfp4 , mxfp8 , nvfp4 )对 safetensors 格式模型进行量化时触发 panic。输

create: MLX panic "no Stream(gpu, 1)" quantizing safetensors on Apple Silicon — regression in v0.23.1

create: MLX panic “no Stream(gpu, 1)” quantizing safetensors on Apple Silicon — regression in v0.23.1

快速结论:在 macOS Apple Silicon 上使用 `ollama create –experimental –quantize` 对 safetensors 模型进行量化时触发 `panic: mlx: There is no Stream(gpu, 1) in current thread`。此为 v0.23.1 引入的回归问题,优先确认 Ollama 版本是否为 v0.23.1 或更高版本(包括 v0.30.10),并等待固定版(#16919)发布。

问题场景

用户在 macOS Apple Silicon 上通过 ollama create --experimental --quantize <any> 命令(例如 int4, int8, mxfp4, mxfp8, nvfp4)对 safetensors 格式模型进行量化时触发 panic。输入模型为 google/gemma-4-E4B-it(BF16 safetensors, 15.0 GB)或 Qwen3.5-0.8B 等小型公开模型。量化前导入 safetensors 成功,但在处理第 2130 个主张量时 panic。

报错原文

importing model.safetensors (2130 tensors, quantizing to int4) ⠧
panic: mlx: There is no Stream(gpu, 1) in current thread.
  at /Users/runner/work/ollama/ollama/build/metal-v3/_deps/mlx-c-src/mlx/c/transforms.cpp:73

goroutine 1 [running]:
github.com/ollama/ollama/x/mlxrunner/mlx.mlxCheck(...) /x/mlxrunner/mlx/mlx.go:68
github.com/ollama/ollama/x/mlxrunner/mlx.doEval(...) /x/mlxrunner/mlx/mlx.go:86
github.com/ollama/ollama/x/create/client.loadAndQuantizeArray(...) /x/create/client/quantize.go:106
github.com/ollama/ollama/x/create/client.quantizeTensor(...) /x/create/client/quantize.go:140
github.com/ollama/ollama/x/create/client.createQuantizedLayers(...) /x/create/client/create.go:365

原因分析

根本原因是 v0.23.1 中 PR #15845 引入了严格规则:所有 MLX CGO 调用必须在专用的锁定 OS 线程上运行(通过 x/internal/mlxthread)。推理路径已迁移使用 mlxthread.Thread,但 create 量化路径 x/create/client/ 未迁移。x/create/client/quantize.go 中的 loadAndQuantizeArray 在任意 goroutine 上调用 mlx.Eval()mlx.Quantize(),首个调用会锁定一个未注册默认 GPU stream 的新 OS 线程,从而触发 panic。

验证点:

  • 不使用 --quantize(纯导入 BF16)成功,因为未调用 mlx.Eval()/mlx.Quantize()
  • 已量化的模型推理正常,因为推理路径使用 mlxthread
  • 所有量化格式(int4/int8/mxfp4/mxfp8/nvfp4)均同等地 panic,与量化格式无关
  • 与 DRAFT 节点无关(在 Modelfile 中移除 DRAFT 后仍复现)

环境排查

  • Ollama 版本:v0.23.1, v0.23.2, v0.30.10(官方 CLI)
  • macOS 版本:macOS (Apple Silicon, e.g., MacBook Air M3, 16 GB unified memory)
  • 安装方式:brew install --cask ollama-app
  • 确认 v0.23.0 可正常工作(回归基线)
  • 输入模型:公开 safetensors 模型,如 google/gemma-4-E4B-it, Qwen3.5-0.8B
  • 确认 OLLAMA_HOST 环境变量配置正确

解决步骤

  1. 回退到 v0.23.0:已知该版本未触发此 panic,可正常生成有效量化模型。
  2. 等待固定版本:Issue 中确认修复在 PR #16919 中。预计发布后升级即可。
  3. 手动应用修复(仅限开发者):参考 x/mlxrunner 的模式,在 x/create/client 中初始化 mlxthread.Thread worker,并将所有 MLX 操作(mlx.Eval, mlx.Quantize, mlx.Contiguous 等)路由通过 thread.Do(...) 执行。这与 PR #16071 的修复方式类似。
  4. 临时规避:不用量化(不传 --quantize 参数),直接以 BF16 格式导入使用(但可能导致 OOM,取决于主机内存容量)。

验证方法

执行以下命令确认问题是否解决:

ollama create --experimental -q int4 test -f /path/to/Modelfile
  • 预期行为:成功完成量化,不出现 panic,输出正确的量化模型。
  • 若仍出现 panic: There is no Stream(gpu, 1),则修复尚未应用或需检查版本。
  • 可选:用 Qwen3.5-0.8B 等小型公开模型快速复现验证。

参考来源

ollama/ollama #16070

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 13964

发表回复

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