oMLX:Mac 本地模型推理利器,比 Ollama 更强?
发布时间: 2026-04-09
来源: 微信公众号
GitHub: https://github.com/jundot/omlx
📌 简介:为什么 Mac 用户需要 oMLX?
苹果 M 系列芯片(M1/M2/M3/M4/M5)凭借统一内存架构,一直是本地运行大语言模型的理想平台。但长期以来,Mac 用户能用的推理工具选择并不多——Ollama 虽然方便,但在内存管理和并发性能上仍有局限;LM Studio 虽然功能丰富,但在 Mac 上的优化不够深入。
oMLX 填补了这个空白。它专为苹果硅芯片设计,基于 MLX 框架构建,带来了两项核心技术:连续批处理(Continuous Batching) 和 分层 KV 缓存(Tiered KV Cache,热 RAM + 冷 SSD)。
简单来说:oMLX 让你的 Mac 变成一个高效的本地 AI 服务器——速度快、内存管理智能、多模型同时运行、原生菜单栏体验。
🆚 与 Ollama、LM Studio 的对比
先说结论:如果你用 Mac 跑本地模型,oMLX 在多个维度上超越了现有方案。
| 特性 | oMLX | Ollama | LM Studio |
|---|---|---|---|
| 连续批处理 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 分层 KV 缓存 | ✅ 热 RAM + 冷 SSD | ❌ 全放内存 | ❌ 全放内存 |
| 多模型同时服务 | ✅ 原生支持 | ❌ 单模型 | 有限支持 |
| 持久缓存 | ✅ 跨重启保留 | ❌ 重启丢失 | ❌ 重启丢失 |
| 原生 macOS 菜单栏 | ✅ 系统级集成 | ❌ 命令行 | ❌ 桌面应用 |
| 网页管理面板 | ✅ 完整面板 | ❌ 无 | 有限 |
| OCR 集成 | ✅ 内置三种 OCR | ❌ 无 | ❌ 无 |
| 视觉模型支持 | ✅ 完整支持 | 有限 | 有限 |
核心差异解读
连续批处理: 这是 oMLX 最大的性能优势。传统推理工具一次只能处理一个请求,或者等到一批请求凑齐后才处理。oMLX 用 mlx-lm 的 BatchGenerator 实现了动态批处理——新请求随时加入,完成的请求随时返回,不浪费任何计算资源。
分层 KV 缓存: 大模型的 KV 缓存会随着上下文增长而膨胀,容易把内存撑爆。oMLX 的聪明做法是:
- 热数据放 RAM:最近使用的 KV 缓存存在内存中,访问极快
- 冷数据存 SSD:不常用的 KV 缓存转移到 SSD,释放内存
- 块级存储 + Copy-on-Write:高效的存储机制,避免不必要的内存复制
- 跨重启持久化:重启后缓存还在,不用重新预填充
用过 vllm-mlx 的同学,会感觉 oMLX 是它的进化版——更稳定、更易用、功能更全。
🚀 核心功能详解
1. 连续批处理:并发请求不排队
oMLX 内置了 mlx-lm 的 BatchGenerator,能够智能地将多个请求合并到一个批次中处理。
工作原理:
请求 A: [prefill...] → [generate token 1] → [generate token 2] → ✓ 完成
请求 B: [prefill...] → [generate token 1] → [generate token 2] → ✓ 完成
请求 C: [prefill...] → [generate token 1] → ...三个请求可以交错执行,而不是串行等待。对于多用户场景(比如团队共享一台 Mac 服务器),这意味着吞吐量提升 2-3 倍。
实际表现:
- 单请求:约 30-40 token/s(M3 Max, 64GB)
- 多请求并发:每个请求约 15-25 token/s,但总吞吐量翻倍
- 延迟增加不明显,用户体验流畅
2. 分层 KV 缓存:告别内存爆炸
这是 oMLX 最具创新性的功能。传统推理工具把 KV 缓存全部放在内存中,上下文越长,内存占用越大。64GB 内存的机器跑 128K 上下文就可能 OOM。
oMLX 的分层策略:
┌─────────────────────────────────────┐
│ RAM(热缓存) │
│ 最近使用的 KV 缓存 → 快速访问 │
├─────────────────────────────────────┤
│ SSD(冷缓存) │
│ 不常用的 KV 缓存 → 持久存储 │
└─────────────────────────────────────┘优势:
- 内存占用可控:设置 RAM 上限后,超出部分自动转移到 SSD
- 长上下文可行:256K 甚至更长的上下文不再受限于内存大小
- 重启不丢失:KV 缓存持久化到 SSD,重启后自动恢复
- Copy-on-Write:多个请求共享相同的前缀时,不重复存储
配置示例:
omlx serve \
--model-dir ~/models \
--max-model-memory 32GB \
--paged-ssd-cache-dir ~/.omlx/cache这样设置后,模型最多使用 32GB 内存作为热缓存,超出部分存入 ~/.omlx/cache 的 SSD 缓存。
3. 多模型支持:一台机器跑多个模型
oMLX 支持同时加载和运行多个模型,并提供了完整的管理功能:
| 功能 | 说明 |
|---|---|
| LRU 驱逐 | 内存不足时自动卸载最不常用的模型 |
| 手动加载/卸载 | 手动控制模型的的生命周期 |
| 模型固定(Pin) | 将常用模型固定在内存中 |
| TTL 设置 | 模型空闲 N 分钟后自动卸载 |
| 同时运行 | 多个模型可以并行服务 |
使用场景:
- 同时运行一个编程模型(Qwen3-Coder-Next)和一个通用模型(Llama 3)
- 编程请求走编程模型,聊天请求走通用模型
- 根据请求类型自动路由
4. 视觉和 OCR 集成:不只是文本
oMLX 不仅支持文本模型,还完整支持视觉语言模型(VLM)和 OCR。
支持的视觉功能:
- 多图像输入(base64 / URL / 文件路径)
- 工具调用(Tool Calling)
- 自动检测 OCR 模型
内置 OCR 模型:
- DeepSeek-OCR:通用 OCR,中英文都强
- DOTS-OCR:文档级 OCR,适合扫描件
- GLM-OCR:智谱 OCR,中文优化
这意味着你可以直接用 oMLX 做图片分析、文档识别、票据提取等工作,不需要额外的 OCR 服务。
5. 内置聊天 UI:开箱即用的对话界面
oMLX 自带网页聊天界面,访问 http://localhost:8000/admin/chat 即可使用。
功能包括:
- 对话历史记录
- 模型切换
- 图片上传(视觉模型)
- 多语言支持(英文 / 韩文 / 日文 / 中文)
- 完全离线运行
对于不想折腾前端配置的用户,这个内置 UI 已经足够好用。
6. 模型下载器:从 HuggingFace 一键拉取
oMLX 内置了模型下载器,直接从 HuggingFace 拉取模型到本地。
# 下载模型
omlx download jundot/Qwen3-Coder-Next-MLX
# 从 ModelScope 下载(国内推荐)
omlx download --source modelscope Qwen/Qwen3-Coder-Next-MLX支持区域镜像,国内用户可以优先从 ModelScope 下载,速度更快。
7. API 兼容:无缝接入现有工具链
oMLX 提供了广泛的 API 兼容性,可以直接对接现有的 AI 工具生态。
支持的 API 格式:
| API 格式 | 端点 | 用途 |
|---|---|---|
| OpenAI Chat | /v1/chat/completions | 对话生成 |
| OpenAI Embeddings | /v1/embeddings | 向量嵌入 |
| Anthropic Messages | /v1/messages | Anthropic 格式 |
支持的功能:
- 流式输出(Streaming)
- 工具调用(Tool Calling)
- 结构化输出(Structured Output)
- 多模态输入
兼容的模型家族:
- Llama(Meta)
- Qwen(阿里)
- Gemma(Google)
- GLM(智谱)
- 以及所有 MLX 支持的模型
8. 性能测试:内置基准跑分
oMLX 自带性能测试工具,方便评估硬件和模型组合的最佳配置。
omlx benchmark --model Qwen3-Coder-Next --context 8192测试指标:
- 预填充速度(prefill speed)
- 生成速度(generation speed)
- 缓存命中率(cache hit rate)
- 内存占用
- 并发吞吐量
🛠️ 安装指南
系统要求
| 要求 | 说明 |
|---|---|
| 操作系统 | macOS 15.0+(Sequoia 或更高) |
| 芯片 | Apple Silicon(M1/M2/M3/M4/M5) |
| Python | 3.10+(仅源代码安装需要) |
| 内存 | 16GB 起步,推荐 32GB+ |
方式一:Homebrew(推荐)
最简洁的安装方式,自动配置环境变量和服务。
# 添加 tap
brew tap jundot/omlx https://github.com/jundot/omlx
# 安装
brew install omlx
# 启动服务(后台运行)
brew services start omlx安装完成后,oMLX 会自动在后台运行,菜单栏出现图标。
方式二:macOS 应用
适合喜欢图形界面的用户。
- 去 GitHub Releases 下载最新
.dmg文件 - 拖到 Applications 文件夹
- 点击菜单栏图标启动服务器
优势:
- 自动重启(崩溃后自动恢复)
- 应用内更新提示
- 可视化模型管理
方式三:从源代码安装
适合需要定制或贡献代码的开发者。
# 克隆仓库
git clone https://github.com/jundot/omlx.git
cd omlx
# 安装核心
pip install -e .
# 可选:安装 MCP 支持(Model Context Protocol)
pip install -e ".[mcp]"验证安装
安装完成后,服务默认运行在:
- API:
http://localhost:8000/v1(OpenAI 兼容) - 管理面板:
http://localhost:8000/admin/chat
用 curl 测试:
curl http://localhost:8000/v1/models应该返回已加载的模型列表。
💻 实际使用教程
基础使用:启动服务器并对话
步骤 1: 准备模型
将 MLX 格式模型放到 ~/models 目录:
~/models/
├── Qwen3-Coder-Next-8bit/
├── Llama-3-8B-MLX/
└── bge-m3/步骤 2: 启动服务器
omlx serve --model-dir ~/models服务器会自动识别目录中的模型并加载。
步骤 3: 测试 API
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen3-Coder-Next-8bit",
"messages": [
{"role": "user", "content": "写一个 Python 快速排序"}
]
}'步骤 4: 打开聊天界面
浏览器访问 http://localhost:8000/admin/chat,选择模型,开始对话。
高级配置:定制内存和缓存
omlx serve \
--model-dir ~/models \
--max-model-memory 32GB \
--paged-ssd-cache-dir ~/.omlx/cache \
--max-concurrent-requests 10 \
--ttl-minutes 30参数说明:
| 参数 | 说明 | 推荐值 |
|---|---|---|
--max-model-memory | 模型最大内存 | 32GB(64GB 机器) |
--paged-ssd-cache-dir | SSD 缓存路径 | ~/.omlx/cache |
--max-concurrent-requests | 最大并发请求 | 10-20 |
--ttl-minutes | 模型空闲自动卸载时间 | 30 分钟 |
接入 OpenClaw
在 OpenClaw 配置中添加本地模型提供商:
{
"providers": {
"omlx-local": {
"baseUrl": "http://localhost:8000/v1",
"apiKey": "not-needed",
"models": {
"qwen3-coder-next": {
"name": "Qwen3 Coder Next (本地)",
"input": ["chat"],
"pricing": { "prompt": 0, "completion": 0 }
}
}
}
}
}接入 OpenCode
在项目根目录创建 opencode.json:
{
"provider": {
"omlx": {
"npm": "@ai-sdk/openai-compatible",
"name": "oMLX Local",
"options": {
"baseURL": "http://localhost:8000/v1",
"apiKey": "not-needed"
}
}
},
"models": {
"qwen3-coder": {
"name": "Qwen3 Coder Next",
"model": "omlx/qwen3-coder-next"
}
}
}接入 Aider
aider --model openai/qwen3-coder-next \
--openai-api-base http://localhost:8000/v1 \
--openai-api-key not-needed接入 Cursor / Windsurf
- 设置 → AI Provider → OpenAI Compatible
- API 地址:
http://localhost:8000/v1 - API Key:任意值(如
not-needed) - 模型名:
qwen3-coder-next
🎯 适用场景分析
✅ 推荐场景
1. Mac 开发者的日常编程
本地运行 Qwen3-Coder-Next 或 Llama 3,接入 OpenCode / Aider / Cursor,编程体验不输云端模型。
2. 团队共享 AI 服务器
一台高配 Mac mini(64GB+),通过 oMLX 同时服务多个开发者,连续批处理保证并发性能。
3. 隐私敏感项目
代码、数据完全不出本机,适合处理机密项目或客户数据。
4. 离线工作环境
飞机上、地铁里、没网的地方——本地模型随时可用。
5. 多模型工作流
同时运行编程模型 + 通用模型 + 嵌入模型,oMLX 自动路由请求。
❌ 不推荐场景
1. Intel Mac 用户
oMLX 依赖 Apple Silicon 的 MLX 框架,Intel Mac 不支持。
2. 16GB 内存以下
虽然能跑小模型(7B-8B),但 16GB 内存的机器体验一般,不如直接用 Ollama 的 GGUF 量化版本。
3. 需要云端最强模型
oMLX 是本地推理工具,模型质量取决于你能加载多大的模型。需要 Opus 级别的能力,还是得用云端。
📊 性能实测
测试环境
| 配置 | 数值 |
|---|---|
| 设备 | Mac mini M4 Pro |
| 内存 | 64GB 统一内存 |
| SSD | 1TB |
| 模型 | Qwen3-Coder-Next-8bit |
| 量化 | 8-bit |
测试结果
| 指标 | 数值 |
|---|---|
| 预填充速度 | 约 500 token/s(8K 上下文) |
| 生成速度 | 约 35 token/s |
| 并发(3 请求) | 每个约 15-20 token/s |
| 内存占用 | 约 45GB |
| 128K 上下文 | 可用(SSD 缓存约 10GB) |
| 冷启动 | 约 15 秒(模型加载) |
对比 Ollama(相同环境)
| 指标 | oMLX | Ollama | 提升 |
|---|---|---|---|
| 单请求生成 | 35 t/s | 30 t/s | +17% |
| 3 请求并发 | 15-20 t/s 每请求 | 排队等待 | 质的飞跃 |
| 128K 上下文 | ✅ SSD 缓存 | ❌ 内存不足 | 关键差异 |
| 多模型同时 | ✅ 原生 | ❌ 不支持 | 功能差异 |
| 重启后缓存 | ✅ 保留 | ❌ 丢失 | 体验提升 |
⚠️ 注意事项
1. 模型格式
oMLX 使用 MLX 格式的模型,和 GGUF 不通用。需要从 HuggingFace 下载 MLX 版本。
好消息: 大部分热门模型都有 MLX 转换版,社区活跃。
2. macOS 版本要求
需要 macOS 15.0(Sequoia)或更高版本。如果你的机器还停留在 Ventura 或更早,需要先升级系统。
3. SSD 缓存空间
分层 KV 缓存依赖 SSD 空间,确保有至少 50GB 可用空间。缓存目录可以自定义到外置 SSD。
4. 网络要求
模型下载需要网络连接,但推理过程完全离线。下载完成后可以断网使用。
🔮 未来展望
oMLX 代表了本地 AI 推理的一个重要方向:让消费级硬件发挥最大价值。
随着 MLX 生态的发展,我们可以期待:
- 更多模型原生支持 MLX 格式
- 更高效的量化和压缩技术
- 更好的多设备协同(多台 Mac 联合推理)
- 更完善的工具链集成
对于 Mac 用户来说,oMLX 是目前最好的本地模型推理选择之一。
📝 总结
| 维度 | 评价 |
|---|---|
| 性能 | ⭐⭐⭐⭐⭐(连续批处理 + 分层缓存) |
| 易用性 | ⭐⭐⭐⭐⭐(菜单栏一键启动) |
| 功能丰富度 | ⭐⭐⭐⭐⭐(VLM、OCR、多模型) |
| API 兼容性 | ⭐⭐⭐⭐⭐(OpenAI / Anthropic) |
| 生态成熟度 | ⭐⭐⭐⭐(还在快速迭代中) |
一句话: 如果你用 Mac 跑本地模型,oMLX 比 Ollama 和 LM Studio 更强,尤其是在内存管理、并发性能和多模型场景。
Mac + oMLX = 本地 AI 的最佳拍档。
本文基于微信公众号文章整理,原文已无法访问。