waybarrios/vllm-mlx · 上手攻略
- 仓库:waybarrios/vllm-mlx
- 链接:https://github.com/waybarrios/vllm-mlx
- 分类:llm-infra / multimodal
- 作者:Tom
- 更新:2026-07-31
是什么
vllm-mlx 是一个专为 Apple Silicon(M 系列芯片)打造的推理服务器,核心思路是:把 vLLM 在 CUDA 硬件上的核心优化(连续批处理、页级 KV 缓存、前缀缓存)移植到苹果的 MLX 框架上,通过 Metal 驱动统一内存直接跑模型,无需任何格式转换。
它同时暴露 OpenAI /v1/* 和 Anthropic /v1/messages 两套 API,应用只需改一个 base URL 就能在苹果本地跑起 GPT-4o 级推理能力。截至 2026 年 7 月最新版本为 v0.4.0(2026 年 6 月 28 日发布)。
解决什么问题
在 vllm-mlx 出现之前,Apple Silicon 本地跑 LLM 主要靠 Ollama 或直接用 mlx-lm 库,两者的共同问题是:缺乏连续批处理(continuous batching)能力——高并发请求时只能串行处理,吞吐远低于 CUDA 生态的 vLLM。
vllm-mlx 补上了这块短板:在 M4 Max 上,Qwen3-0.6B-8bit 可达 417.9 tok/s,Llama-3.2-3B-4bit 可达 205.6 tok/s,30B MoE 模型(Qwen3-30B-A3B-4bit)也能跑到 127.7 tok/s,单 Stream 性能与 mlx-lm 持平的基础上,并发场景下吞吐优势明显。
快速安装
环境要求
- macOS 13+(Apple Silicon M1/M2/M3/M4/M5)
- Python 3.10+
- 推荐使用
uv包管理器(性能最优)
安装步骤
# 方式一:uv(推荐)
uv tool install vllm-mlx
# 方式二:pip
pip install vllm-mlx
# 音频功能(可选)
pip install vllm-mlx[audio]
brew install espeak-ng # macOS 上非英语 TTS 需要
# 从源码安装
git clone https://github.com/waybarrios/vllm-mlx.git
cd vllm-mlx
pip install -e .
⚠️ 注意:仅支持 Apple Silicon,Intel Mac 不支持。需提前安装好 MLX(安装 vllm-mlx 时会自动依赖)。
核心用法
启动推理服务
# 最简启动(默认端口 8000)
vllm-mlx serve mlx-community/Llama-3.2-3B-Instruct-4bit
# 带连续批处理和生产级配置
vllm-mlx serve mlx-community/Llama-3.2-3B-Instruct-4bit \
--port 8000 \
--continuous-batching \
--ssd-cache-dir ./cache \
--warm-prompts ./warm_prompts.txt
OpenAI SDK 调用
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
r = client.chat.completions.create(
model="default",
messages=[{"role": "user", "content": "Hi, explain what MLX is in 2 sentences."}]
)
print(r.choices[0].message.content)
Anthropic SDK / Claude Code
export ANTHROPIC_BASE_URL=http://localhost:8000
export ANTHROPIC_API_KEY=not-needed
claude
# 然后直接用 Claude Code 对话,流量走本地 vllm-mlx
视觉模型(多模态)
r = client.chat.completions.create(
model="default",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "What is in this image?"},
{"type": "image_url", "image_url": {"url": "https://example.com/cat.jpg"}}
]
}]
)
支持的视觉模型包括:Gemma 3/4、Qwen3-VL、Pixtral、LLaMA Vision 等。
结构化输出(JSON Schema)
r = client.chat.completions.create(
model="default",
messages=[{"role": "user", "content": "List 3 colors."}],
response_format={
"type": "json_schema",
"json_schema": {
"schema": {
"type": "object",
"properties": {"colors": {"type": "array", "items": {"type": "string"}}}
}
}
}
)
思维链推理(Reasoning Extraction)
# Qwen3 / DeepSeek-R1 等推理模型可用 --reasoning-parser
# 启动时加参数:
# vllm-mlx serve mlx-community/Qwen3-8B-4bit --reasoning-parser qwen3
r = client.chat.completions.create(
model="default",
messages=[{"role": "user", "content": "What is 17 * 23?"}]
)
print("Thinking:", r.choices[0].message.reasoning)
print("Answer:", r.choices[0].message.content)
Rerank
curl http://localhost:8000/v1/rerank \
-H 'Content-Type: application/json' \
-d '{
"model": "default",
"query": "apple silicon inference",
"documents": [
"MLX is Apples framework",
"Metal kernels on M-series",
"CUDA on NVIDIA"
]
}'
嵌入模型
vllm-mlx serve <llm-model> --embedding-model mlx-community/all-MiniLM-L6-v2-4bit
emb = client.embeddings.create(
model="mlx-community/all-MiniLM-L6-v2-4bit",
input=["Hello", "World"]
)
内置压测工具
vllm-mlx bench-serve \
--url http://localhost:8000 \
--concurrency 5 \
--prompts prompts.txt \
--output results.csv
模型管理
# 查看模型元数据、文件大小、是否适合本地运行
vllm-mlx model inspect mlx-community/Llama-3.2-3B-Instruct-4bit
# 下载模型(含断点续传)
vllm-mlx model acquire mlx-community/Llama-3.2-3B-Instruct-4bit \
--target-dir ./models/llama-3b-4bit
# 本地量化转换
vllm-mlx model convert meta-llama/Llama-3.2-3B-Instruct \
--output ./models/llama-3b-mlx-q4 \
--quantize --q-bits 4 --q-group-size 64 --q-mode affine
监控指标
vllm-mlx serve <model> --metrics
curl http://localhost:8000/metrics
# Prometheus 格式,暴露吞吐、延迟等关键指标
典型适用场景
| 场景 | 说明 |
|---|---|
| 本地开发调试 | 在 MacBook 上跑等效 GPT-4o 的模型,无需调用云端 API,保护隐私 |
| Claude Code 本地替代 | Claude Code 流量直接路由到本地,零成本实验 AI 编程 |
| 多租户/高并发 API 服务 | 连续批处理使 M 系列 Mac Mini/Studio 可作为小团队共享推理节点 |
| 多模态原型开发 | 文本+图片+音频+视频一个服务搞定,支持 TTS/STTS |
| 本地评测/Benchmark | 内置 bench-serve + CSV/JSON/SQLite 输出,适合做模型横向对比 |
| 离线/内网部署 | 完全本地运行,无任何外部依赖 |
坑与注意
- Apple Silicon only:不支持 Intel Mac,不支持树莓派(需 Metal)。
- 统一内存是瓶颈:模型越大越吃内存,M2/M3 8GB 用户能跑的模型很有限,M4 Max 128GB 才能跑 30B MoE。
- 连续批处理不等于极速单请求:单 Stream 性能与 mlx-lm 持平;连续批处理的优势在高并发时才显现。
- v0.4.0 版本前有 breaking change:旧版本启动参数格式不同,升级后需重调命令行。
- SSD 缓存需手动配置:
--ssd-cache-dir默认关闭,开启后对长上下文 Agent 场景 TTFT 改善明显(1.3-2.25x),但需要 macOS 13+ 且 SSD 剩余空间充足。 - TTS 依赖 espeak-ng:非英语 TTS 需提前安装 espeak-ng,否则报错。
- 模型来源限制:目前只能跑 Hugging Face 上有 MLX 格式的模型,原生 PyTorch 模型需转换。
与同类对比
| 特性 | vllm-mlx | Ollama | mlx-lm(库) |
|---|---|---|---|
| API 兼容性 | OpenAI + Anthropic | OpenAI(部分) | 无内置 API |
| 连续批处理 | ✅ | ❌ | ❌ |
| Paged KV Cache | ✅ | ❌ | ❌ |
| 前缀缓存(trie) | ✅ | ❌ | ❌ |
| SSD-tiered 缓存 | ✅ | ❌ | ❌ |
| 多模态(视觉+音频) | ✅ | ✅ | 仅文本 |
| MCP Tool Calling | ✅(12 种解析器) | ❌ | ❌ |
| 内置压测工具 | ✅ | ❌ | ❌ |
| TTS / STT | ✅ | ❌ | ❌ |
| 适用硬件 | Apple Silicon | 全平台 | Apple Silicon |
结论:如果你的场景是高并发 API 服务或需要Claude Code 本地化,vllm-mlx 是目前 Apple Silicon 上唯一同时具备连续批处理和双协议兼容的方案。如果只是单 Stream 跑一个小模型,mlx-lm 更轻量;如果需要全平台兼容,Ollama 更合适。
一句话推荐结论
Apple Silicon 本地跑高并发 LLM API 的最优选——把 vLLM 的生产级优化带进了 MLX 生态,让 M 系列 Mac 真正成为可部署的推理节点。