跳到主要内容

在 Apple Silicon 上使用 MLX LM

Libre WebUI 内置 MLX LM (Apple Silicon) 插件,可直接在 M 系列 Mac 上运行 MLX 格式的语言模型。该插件连接到 MLX LM 内置的 OpenAI 兼容 HTTP API。

如果希望使用原生 Metal 推理,又不想将 MLX 检查点转换成 Ollama 或 GGUF 模型,这条路径很合适。

架构​

Libre WebUI in native development mode
frontend http://localhost:5173
backend http://localhost:3001
|
| OpenAI-compatible chat request
v
mlx_lm.server http://127.0.0.1:8081
|
v
MLX model on Apple Silicon unified memory

端口 8081 是有意选择的。MLX LM 通常默认使用 8080,这会与打包的 npx libre-webui 服务器冲突。

要求​

  • Apple Silicon Mac(M1 或更新型号)。
  • 已提供 Xcode 命令行工具的 macOS。
  • Python 3.10 或更新版本。
  • 足够容纳所选模型、其 KV 缓存和 macOS 的统一内存。
  • 以原生方式运行 Libre WebUI。源代码开发工作流是最简单的设置方式,因为两个后端都能使用 Mac 环回接口。

默认 Ternary Bonsai 模型在磁盘上约占 8.5 GB,运行时需要更多内存。配备 16 GB 统一内存的 Mac 可处理较短上下文,但 24 GB 或更多会留下更实用的余量。如果内存紧张,请使用更小的 MLX 检查点,并将其仓库 ID 添加到复制出的插件定义中。

安装 MLX LM​

使用 uv 可将命令与 Homebrew Python 软件包隔离:

brew install uv
uv tool install --upgrade mlx-lm
rehash
mlx_lm.server --help

如果工具已存在:

uv tool upgrade mlx-lm
rehash

Qwen 3.5 模型需要 mlx-lm 0.30.7 或更新版本。仓库示例需要 0.31.3 或更新版本。

启动服务器​

对于 Ternary Bonsai 模型:

mlx_lm.server \
--model "prism-ml/Ternary-Bonsai-27B-mlx-2bit" \
--host 127.0.0.1 \
--port 8081 \
--max-tokens 262144 \
--allowed-origins "http://localhost:5173,http://127.0.0.1:5173"

首次运行会从 Hugging Face 下载模型,后续运行使用本地缓存。Ternary Bonsai 声明的最大位置数为 262144。提示词和生成输出共享该上下文窗口,因此长提示词会减少可生成的令牌数量,即便服务器限额设置为模型最大值也是如此。

较小的入门模型:

mlx_lm.server \
--model "mlx-community/Llama-3.2-3B-Instruct-4bit" \
--host 127.0.0.1 \
--port 8081 \
--max-tokens 2048

仓库还包含可复用的启动器:

cd examples/mlx-lm-server
uv run server.py

不加载模型,检查解析后的命令:

uv run server.py --dry-run

验证 OpenAI 兼容 API​

检查健康状态和模型发现:

curl http://127.0.0.1:8081/health
curl http://127.0.0.1:8081/v1/models

发送非流式聊天请求:

curl http://127.0.0.1:8081/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "prism-ml/Ternary-Bonsai-27B-mlx-2bit",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Reply with: MLX is ready."}
],
"temperature": 0.7,
"top_p": 0.95,
"max_tokens": 64,
"stream": false
}'

当 "stream": true 时,服务器也支持流式 Server-Sent Events。

连接 Libre WebUI​

从 Libre WebUI 仓库根目录运行:

npm install
npm run dev

打开 http://localhost:5173,然后:

  1. 打开设置 > 插件。
  2. 找到 MLX LM (Apple Silicon)。
  3. 确认端点为 http://127.0.0.1:8081/v1/chat/completions。
  4. 激活插件。本地 MLX 不需要 API 密钥。
  5. 返回聊天并选择 MLX 模型。

内置模型列表包括:

  • prism-ml/Ternary-Bonsai-27B-mlx-2bit

Libre WebUI 中选择的模型必须与 MLX 服务器可用的模型匹配。若要使用其他检查点,请导出或复制 plugins/mlx-lm.json,把仓库 ID 添加到 model_map,再从设置 > 插件导入编辑后的定义。

生成设置​

Ternary Bonsai 发布的建议设置为:

设置值
温度0.7
Top P0.95
Top K20

Libre WebUI 会通过插件发送温度和 Top P。若要采用其 Top K 建议,请用 --top-k 20 启动服务器:

mlx_lm.server \
--model "prism-ml/Ternary-Bonsai-27B-mlx-2bit" \
--host 127.0.0.1 \
--port 8081 \
--top-k 20 \
--max-tokens 262144

Work 与工具调用​

MLX 插件采用 OpenAI 兼容聊天格式,因此可出现在 Work 中。只有模型及其聊天模板能可靠支持 OpenAI 风格的工具调用时,才应在 Work 中选择它。普通文本生成能在聊天中工作,并不能证明某个检查点支持工具。

工具解析器和模型模板变化很快。如果 Work 运行返回格式错误的工具调用,请更新 mlx-lm,直接针对服务器测试同一工具请求,并尝试其 MLX 模型卡明确说明支持工具的模型。

Docker 网络​

建议以原生方式开发 Libre WebUI。容器无法访问 Mac 的 127.0.0.1。

如果 Libre WebUI 在 Docker 中运行:

  1. 使用 --host 0.0.0.0 启动 MLX LM。
  2. 使用 Mac 的私有局域网地址作为插件端点,例如 http://192.168.1.20:8081/v1/chat/completions。
  3. 只在受信任的本地网络上允许端口 8081。

不要将 mlx_lm.server 直接暴露到公网。其维护者将它描述为仅具备基础安全检查的本地服务器。任何非本地部署都应在它前面放置经过身份验证的 HTTPS 反向代理。

故障排查​

Model type qwen3_5 not supported

仍在使用旧启动器:

rehash
which -a mlx_lm.server
uv tool upgrade mlx-lm

Libre WebUI 显示模型,但请求失败

验证同一模型 ID 能否直接工作:

curl http://127.0.0.1:8081/v1/models

然后确认插件端点包含 /v1/chat/completions。

地址已被占用

Libre WebUI 保持使用常规端口,将 MLX 移到另一端口:

mlx_lm.server --model "owner/model" --port 8082

将插件端点更新为 http://127.0.0.1:8082/v1/chat/completions。

模型首次请求速度较慢

初始加载和提示词预填充的开销高于逐令牌生成。如果 macOS 开始使用交换空间,请在活动监视器中观察内存压力,并选择更小的模型或更短的对话。

相关文档​