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 | bash

2. 验证安装

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 4

4-bit vs 8-bit 怎么选?

4-bit8-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 8bit

Shell 快捷命令(添加到 ~/.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 Server8000推理引擎(Anthropic + OpenAI 双 API)
OpenClaw18789AI 网关 + Telegram Bot
NeoWatch Backend3940系统监控 API
NeoWatch Frontend3939赛博朋克监控仪表盘
Open WebUI3000Web 聊天界面 (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 Studiomlx_lm 就是底层引擎,LM Studio 只是 GUI 封装
Ollama只支持 GGUF,不支持 MLX 模型
SGLang / vLLM不支持 Apple Silicon
LiteLLMoMLX 原生双 API,不需要额外转换层

这套环境搭好之后,开机即可用。所有服务自启,无需手动干预。