Apple Silicon 的统一内存架构让本地运行大模型成为可能,而在 macOS 上,目前主要有两条路:通用方案 Ollama(基于 llama.cpp),以及 Apple 官方为 Apple Silicon 定制的 MLX 框架。

这篇文章记录我在 M2 MacBook Pro (32GB) 上的实测过程,重点回答一个问题:在日常使用中,MLX 到底比 Ollama 快多少?值不值得切换?

测试环境与方法#

  • 硬件: M2 MacBook Pro,32GB 统一内存
  • 系统: macOS(后台无其他 GPU 密集型任务)
  • 测试 Prompt: 固定同一段中文提问,限制输出 128 tokens
  • 重复次数: 每组跑 3 次取平均,排除冷启动影响
引擎 模型 量化格式
Ollama qwen3.5:latest GGUF Q4_K_M
MLX mlx-community/Qwen3.5-9B-MLX-4bit MLX 4-bit

两者均使用 Qwen3.5 9B,量化精度对齐为 4-bit,尽量排除模型本身的变量。

MLX 与 GGUF:两种格式的本质差异#

理解这两种格式的区别,有助于解释为什么它们的性能表现不同。

GGUF(llama.cpp 使用的格式)是一种跨平台的模型格式,设计目标是兼容性:同一个文件可以在 CPU、NVIDIA GPU、AMD GPU、Apple Silicon 上运行。Ollama 底层就是 llama.cpp,通过 Apple 的 Metal API 调用 GPU,但这层抽象有额外的调度开销。

MLX 是 Apple 专门为 Apple Silicon 设计的机器学习框架,其模型格式也只能运行在 Apple Silicon 上。它直接利用统一内存(CPU 和 GPU 共享同一块物理内存,无需数据拷贝)和 Apple Neural Engine,在内存带宽利用率上天然占优。

简单类比:GGUF 像是国际通用插头转换器,哪里都能用,但多了一层;MLX 是直接插本地插座,没有转换损耗。

两者的量化精度(如 4-bit、8-bit)含义相同,都是压缩模型体积和降低内存占用的手段,在同等精度下模型质量基本一致。因此本文的测试中,两者使用相同的 4-bit 量化,差异来源纯粹是运行框架,而非模型质量的妥协

9B 模型:核心对比结果#

引擎 生成速度 (tokens/s) 相对速度
Ollama 18.58 1.00x
MLX 28.35 1.53x

MLX 的生成速度比 Ollama 快约 50%

这个差距的来源在于架构层面:Ollama 底层的 llama.cpp 是跨平台方案,需要通过 Metal 接口调用 GPU;而 MLX 直接面向 Apple Silicon 的统一内存设计,CPU 与 GPU 共享内存,省去了数据搬运的开销,对带宽利用更充分。

在 128 tokens 的短输出场景下差距已经明显,更长的生成任务(如写作、代码生成)中,这个优势会进一步放大

35B 模型:更大参数下的延伸验证#

为了验证规律是否在更大的模型上依然成立,我通过 LM Studio(同时支持 GGUF 和 MLX 格式)测试了 Qwen3.5 35B A3B 这个 MoE 模型。

使用同一问题,分别加载 GGUF 和 MLX 格式:

GGUF 格式下的 Qwen3.5 35B A3B

MLX 格式下的 Qwen3.5 35B A3B

结果与 9B 的规律一致:MLX 格式的速度优势在更大的模型上同样显著,且由于 35B MoE 模型对内存带宽更敏感,MLX 的相对提升幅度比 9B 时更大。

32GB 统一内存运行 4-bit 量化的 35B 模型已经绰绰有余,内存压力不是瓶颈。

MLX 的已知问题#

MLX 并非没有代价,社区里有两类反馈值得注意:

1. 特定工作负载下速度未必更快 Reddit 上有用户在 M1 Max 上测试了多个真实任务场景,发现 MLX 的"有效 tokens/s"在某些场景下并不领先(原帖)。测试方法不同结论可能差异很大,单一 benchmark 不能代表全部场景。

2. 多轮对话后的"降智"现象 有用户反映在 MLX 下进行多轮对话时,模型输出质量会出现下降(相关讨论)。这可能与 MLX 的 KV cache 实现有关,目前尚不稳定。

怎么选?#

根据以上测试和日常体验,我目前的使用策略是:

  • 轻量任务(翻译、摘要、简单问答)→ MLX:速度优势明显,体验更流畅
  • 复杂推理、长上下文多轮对话 → 云端 API:本地模型在这类任务上的稳定性还差一截
  • 需要 OpenAI 兼容接口集成到其他工具 → Ollama:生态最完善,接入成本最低

如果你是普通用户,Ollama 的安装和管理体验更傻瓜,社区模型库也更丰富,是更低摩擦的起点。如果你已经熟悉本地模型部署,想在 Apple Silicon 上压榨性能,值得把常用模型切换到 MLX 格式试试。


本次测试使用的脚本和测试 Prompt 已上传至 GitHub 仓库