Mac Studio AI 部署指南
从开箱到推理:在 Apple Silicon 上搭建完整本地 AI 基础设施
硬件概览
| 项目 | 配置 |
|---|---|
| 机器 | Mac Studio |
| 芯片 | Apple M3 Ultra |
| 统一内存 | 512GB |
| 系统 | macOS Darwin 25.3.0 |
| 用途 | 本地大模型推理 + AI 开发 |
Apple Silicon 的统一内存架构是跑大模型的关键优势 —— CPU 和 GPU 共享同一块内存,零拷贝。512GB 可以直接加载 237GB 的 8-bit MoE 模型。
一、安装 MLX 生态
1. 基础依赖
code
# Homebrew 包
brew install python@3.14 node tmux
# MLX 推理框架(Apple Silicon 原生)
pip install mlx-lm
# HuggingFace 加速下载
pip install hf-transfer
export HF_HUB_ENABLE_HF_TRANSFER=1
# Claude Code CLI
npm install -g @anthropic-ai/claude-code
# bun(前端项目用)
curl -fsSL https://bun.sh/install | bash2. 验证安装
code
mlx_lm.server --help # MLX 推理服务器
claude --version # Claude Code CLI
bun --version # Bun 运行时二、模型下载与转换
方案 A:下载社区预量化版(推荐)
code
# 8-bit 主力模型(237GB,质量最优)
huggingface-cli download mlx-community/MiniMax-M2.5-8bit \
--local-dir ~/models/MiniMax-M2.5-MLX-8bit
# 4-bit 快速模型(120GB,速度更快)
huggingface-cli download mlx-community/MiniMax-M2.5-4bit \
--local-dir ~/models/MiniMax-M2.5-MLX-4bit方案 B:下载原始权重自行转换
code
# 下载原始 safetensors(214GB)
huggingface-cli download MiniMaxAI/MiniMax-M2.5 \
--local-dir ~/models/MiniMax-M2.5
# 转换为 MLX 8-bit
mlx_lm.convert \
--hf-path ~/models/MiniMax-M2.5 \
--mlx-path ~/models/MiniMax-M2.5-MLX-8bit \
-q --q-bits 8
# 转换为 MLX 4-bit
mlx_lm.convert \
--hf-path ~/models/MiniMax-M2.5 \
--mlx-path ~/models/MiniMax-M2.5-MLX-4bit \
-q --q-bits 44-bit vs 8-bit 怎么选?
| 4-bit | 8-bit | |
|---|---|---|
| 磁盘 | ~120GB | ~237GB |
| 运行时内存 | ~150GB | ~270GB |
| 速度 | ~51 tok/s | ~25 tok/s |
| 质量 | 轻微下降 | 基线 |
| 推荐 | 快速迭代 / 多任务 | 日常使用 / 高质量 |
M2.5 是 MoE 架构(456B 总参数,45.9B 激活),对量化的敏感度比 dense 模型低。4-bit 损失很小。
三、oMLX 推理引擎部署
oMLX 是我们选择的推理引擎,原生支持 Anthropic API 和 OpenAI API,无需格式转换中间层。
安装 oMLX
code
# 克隆源码
git clone https://github.com/jundot/omlx.git ~/omlx-repo
# 创建虚拟环境
python3 -m venv ~/omlx-env
source ~/omlx-env/bin/activate
# 可编辑安装(方便后续更新)
cd ~/omlx-repo
pip install -e .手动启动验证
code
source ~/omlx-env/bin/activate
omlx serve --model ~/models/MiniMax-M2.5-MLX-8bit --port 8000
# 测试 Anthropic API
curl http://localhost:8000/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: local" \
-H "anthropic-version: 2023-06-01" \
-d '{"model":"m2.5","max_tokens":100,"messages":[{"role":"user","content":"Hello"}]}'
# 测试 OpenAI API
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"m2.5","max_tokens":100,"messages":[{"role":"user","content":"Hello"}]}'四、LaunchAgent 自启配置
使用 macOS 原生 LaunchAgent 管理所有 AI 服务,开机自启、崩溃自重启。
oMLX 服务 plist
创建 ~/Library/LaunchAgents/ai.omlx.plist:
code
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>ai.omlx</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/Users/neo/omlx-env/bin/omlx</string>
<string>serve</string>
<string>--model</string>
<string>/Users/neo/models/MiniMax-M2.5-MLX-8bit</string>
<string>--port</string>
<string>8000</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>HOME</key>
<string>/Users/neo</string>
<key>MLX_METAL_FAST_SYNCH</key>
<string>1</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/neo/logs/omlx.log</string>
<key>StandardErrorPath</key>
<string>/Users/neo/logs/omlx.err.log</string>
<key>ThrottleInterval</key>
<integer>60</integer>
</dict>
</plist>注册并启动
code
mkdir -p ~/logs
# 注册服务
launchctl load ~/Library/LaunchAgents/ai.omlx.plist
# 查看状态
launchctl list ai.omlx
# 停止/卸载
launchctl unload ~/Library/LaunchAgents/ai.omlx.plist关键参数说明:
KeepAlive: true— 崩溃后自动重启ThrottleInterval: 60— 崩溃后至少等 60 秒再重启(防止崩溃循环)MLX_METAL_FAST_SYNCH=1— 加速 GPU-CPU 数据同步
五、ai-services.sh 统一管理
所有服务通过一个脚本统一管理:
code
# 服务状态
ai-status
# 启动/停止/重启
ai-start [service]
ai-stop [service]
ai-restart [service]
# 查看日志
ai-logs [service]
# 模型切换(带安全等待逻辑)
ai-switch 4bit
ai-switch 8bitShell 快捷命令(添加到 ~/.zshrc):
code
alias ai-status='bash ~/scripts/ai-services.sh status'
alias ai-start='bash ~/scripts/ai-services.sh start'
alias ai-stop='bash ~/scripts/ai-services.sh stop'
alias ai-restart='bash ~/scripts/ai-services.sh restart'
alias ai-logs='bash ~/scripts/ai-services.sh logs'
alias ai-switch='bash ~/scripts/ai-switch.sh'六、完整服务架构
部署完成后,你的 Mac Studio 上运行着这些服务:
| 服务 | 端口 | 职责 |
|---|---|---|
| oMLX Server | 8000 | 推理引擎(Anthropic + OpenAI 双 API) |
| OpenClaw | 18789 | AI 网关 + Telegram Bot |
| NeoWatch Backend | 3940 | 系统监控 API |
| NeoWatch Frontend | 3939 | 赛博朋克监控仪表盘 |
| Open WebUI | 3000 | Web 聊天界面 (Docker) |
七、排错指南
oMLX 启动失败
code
# 检查端口占用
lsof -i :8000
# 查看错误日志
tail -50 ~/logs/omlx.err.log
# 手动启动调试
source ~/omlx-env/bin/activate
omlx serve --model ~/models/MiniMax-M2.5-MLX-8bit --port 8000模型加载失败
code
# 检查模型文件完整性
ls -la ~/models/MiniMax-M2.5-MLX-8bit/
# 应该有 config.json, tokenizer.json, *.safetensors 等文件
# 检查内存是否足够
memory_pressure
# 8-bit 需要约 270GB 可用内存OOM / 内核 Panic 预防
- 永远不要同时运行两个大模型进程
- 使用
ai-switch切换模型(它会等待旧进程完全退出) - M2.5 8-bit 峰值内存 ~400GB,在 512GB 系统上要注意留有余量
- 详见 OOM 崩溃 的完整分析
LaunchAgent 服务崩溃循环
如果服务不停重启又崩溃:
code
# 临时禁用
launchctl unload ~/Library/LaunchAgents/ai.omlx.plist
# 排查问题后重新启用
launchctl load ~/Library/LaunchAgents/ai.omlx.plist确保 ThrottleInterval 设置为 60 秒以上。
八、不需要的工具
| 工具 | 原因 |
|---|---|
| LM Studio | mlx_lm 就是底层引擎,LM Studio 只是 GUI 封装 |
| Ollama | 只支持 GGUF,不支持 MLX 模型 |
| SGLang / vLLM | 不支持 Apple Silicon |
| LiteLLM | oMLX 原生双 API,不需要额外转换层 |
这套环境搭好之后,开机即可用。所有服务自启,无需手动干预。