TL;DR(3 行版)

  • 性能 MLX 更快,但仅在 Apple Silicon 单机 benchmark 场景成立(快 3%–12%)
  • Agent 生产 llama.cpp + Ollama 更适合 Agent / 生产推理(HTTP runtime 是决定变量)
  • 真正瓶颈 大多数场景瓶颈是内存带宽,不是框架——swap 时两者同时垮

本文核心判断

硬件距离:MLX 更近(dispatch 次数少 3×,量化路径更短)。工程距离:llama.cpp / Ollama 更近(开箱 HTTP runtime,Claude Code 零配置接入)。两个维度不能互换。

核心统一解释(第一性原理层)

MLX vs llama.cpp 的本质差异不是"快一点还是慢一点",而是两种根本不同的执行哲学:

  • graph-fusion execution(MLX):lazy 收集算子图 → 运行时融合 → 批量 dispatch
  • per-op dispatch execution(llama.cpp):每个算子独立提交 → 跨平台兼容 → 可预测开销

以及两种截然不同的工程取向:

  • hardware-native specialization(MLX):Apple-only,榨干一种硬件
  • engineered portability(llama.cpp):跨 CUDA / Metal / Vulkan / CPU,可移植性优先

所有性能差异,都可以归结为三件事:
① dispatch 次数  ② kernel fusion 能力  ③ memory bandwidth 是否成为瓶颈

System Boundary:本文结论的适用范围与边界

任何有边界的结论比无边界的描述更可信。本文所有关于 MLX vs llama.cpp 性能与选型的结论,成立于以下明确条件下:

✅ 适用场景

  • Apple Silicon(M1–M4 / M5 系列)
  • batch = 1 / 小 batch 推理(decode 阶段)
  • decoder-only transformer(7B–14B 主流模型)
  • Metal backend(macOS 原生 GPU 路径)
  • 单机本地推理 / 小型团队共享节点
  • Claude Code / Cursor / Open WebUI 等 Agent 工具

❌ 不适用场景

  • CUDA / NVIDIA 多 GPU serving
  • Large batch training(批量训练)
  • Distributed inference(多节点分布式推理)
  • Speculative decoding pipeline
  • MoE 混合专家模型(架构差异较大)
  • 云端 GPU 实例(不含 Apple Silicon)

本文结论不适用于 NVIDIA / AMD GPU 场景——那是 CUDA vs ROCm 的讨论域,与 Apple Silicon 统一内存架构无关。

关键术语定义:Metal dispatch · Kernel fusion · Unified memory · GGUF vs MLX format

读后续技术内容前,先对齐几个核心概念。这也是 Apple Silicon LLM 推理领域最常被混淆的术语。

Metal dispatch(Metal compute dispatch)
CPU 向 Apple Silicon GPU 提交一个 compute kernel 的最小单位。每次 dispatch 都需要 CPU-GPU 之间的同步确认,产生约 1–3 μs 的调度开销。dispatch 次数越多,CPU 等待 GPU 的累计开销越大。
Kernel fusion(算子融合)
将多个独立算子(如 matmul → bias add → activation)合并成一个 GPU kernel 执行,从而减少 dispatch 次数和中间结果的全局内存读写。MLX 通过 lazy evaluation 自动做 kernel fusion;llama.cpp 依赖手写融合内核(如 flash attention),覆盖范围有限。
Unified memory(统一内存,Apple Silicon)
Apple Silicon 的 CPU 和 GPU 共享同一块物理内存,不存在独立显存。模型权重加载后无需在 CPU↔GPU 之间拷贝——这是 Mac 上 LLM 推理的硬件优势根基。MLX 和 llama.cpp 的 Metal 后端都自动利用统一内存,但 MLX 的内存分配器更贴近这一模型。
GGUF(llama.cpp 量化格式)
llama.cpp 使用的模型量化格式,支持 Q2_K 到 Q8_0 多种精度。模型文件为 .gguf,可在 Hugging Face 直接下载。Ollama 使用 GGUF 管理模型,与 MLX 格式不兼容
MLX format(mlx-community 量化格式)
MLX 使用的模型格式,基于 safetensors + MLX 量化元数据。通过 mlx_lm.convert 或从 mlx-community 获取。量化内核直接绑定 Metal shader,与 GGUF 完全不兼容,同一基础模型需分别转换。

MLX vs llama.cpp 架构总览:Apple Silicon inference framework 完整对比

在深入细节之前,先用一张表建立整体认知。mlx vs llama.cpp 的根本分歧在于设计目标:一个为 Apple-only 极致优化,一个为跨平台可移植性。

维度MLXllama.cpp
设计目标 Apple Silicon 专用 跨平台(CUDA / Metal / Vulkan / CPU)
调度模型 Lazy graph fusion(图分析后批量 dispatch) Per-op dispatch(逐算子独立提交)
Metal 方式 Runtime JIT kernel(按张量形状特化编译) Precompiled kernels(随二进制打包)
内存模型 Native unified memory(原生统一内存分配) ggml allocator(通用,非 Apple-specific)
量化格式 safetensors + MLX metadata(mlx-community) GGUF(Q2_K ~ Q8_0)
HTTP runtime 无内置(需自建 FastAPI 网关) Ollama 封装,开箱即用(:11434
能否直接接 Claude Code / Cursor ❌ 需自建网关 ✅ Ollama 零配置
适合场景 benchmark、research、LoRA 微调 Agent runtime、生产推理、团队共享

最后两行定工程选型;tok/s 差异见 § 性能差异真实来源,不参与 Agent runtime 决策。

Apple Silicon LLM Inference Stack Model(2026)

把上面的对比表转化为四层分工模型,是理解本文所有结论的最简框架:

┌─────────────────────────────────────────────────┐
│            Application Layer                    │
│   Claude Code  ·  Cursor  ·  Open WebUI         │
├─────────────────────────────────────────────────┤
│            Runtime Layer                        │
│   Ollama (llama.cpp)  │  FastAPI (MLX wrapper)  │
│   ✅ 推荐 Agent 路径   │  ⚠️ 自建,工程成本高    │
├─────────────────────────────────────────────────┤
│            Compute Layer                        │
│   ggml-metal (per-op) │  MLX (graph fusion)     │
│   跨平台,预编译内核   │  Apple-only,JIT 特化   │
├─────────────────────────────────────────────────┤
│            Hardware Layer                       │
│       Apple Silicon Unified Memory              │
│   CPU + GPU 共享物理内存 · 零拷贝 · 高带宽       │
└─────────────────────────────────────────────────┘
图 · Apple Silicon LLM 推理四层栈 — 选型发生在 Runtime 层,性能差异来自 Compute 层,天花板在 Hardware 层

关键结论:选型只发生在 Runtime 层。Compute 层(MLX vs ggml-metal)的性能差异不影响 Runtime 层的选择——两者服务于不同层级,不互相替代。

核心差异:Metal dispatch 次数(480 vs 160)——Apple Silicon 推理性能来源

这是整篇文章最值得记住的一个数字。理解了 dispatch 次数的差异,就理解了 MLX vs llama.cpp 性能差异的根源。

对于 7B transformer 模型,每生成一个 token 需要走一次 32 层的 forward pass。每层包含 QKV projection、attention score、softmax、output projection、FFN gate、FFN up/down、RMS Norm、RoPE 等算子:

llama.cpp(逐算子 dispatch):32 层 × ~15 算子/层 ≈ 480 次 Metal dispatch
MLX(lazy graph fusion 后):32 层 × ~4–5 fusion block/层 ≈ 128–160 次 Metal dispatch

💡 核心洞察(可引用)

MLX 的优势不是算力更强,而是减少 CPU↔GPU dispatch 次数约 3×。
在 batch=1 场景,每次 [commandBuffer commit] 的 CPU 调度开销约 1–3 μs。480 次 vs 160 次,每个 token 额外节省约 0.3–1 ms——这是 benchmark 中 MLX 领先的主要机制,不是内核算法更优。

每次 Metal dispatch 都是一个 CPU-GPU 同步点:CPU 必须等待 GPU 确认 command buffer 入队,才能发起下一个算子的内核调用。当 GPU compute 时间很短(小 batch 推理),dispatch 开销就成为瓶颈。MLX 的 lazy evaluation 把多个算子融合成一个 dispatch,直接绕过了这个同步成本。

Token Latency 分解模型(Dispatch Cost Model)

把单个 token 的生成延迟分解为三项可量化的分量:

Token latency ≈
  dispatch_count × cpu_sync_cost     ← dispatch 开销(框架差异来源)
  + gpu_compute_time                 ← GPU 实际算力(带宽 / 算力 bound)
  + memory_bandwidth_time            ← 权重搬运时间(物理天花板)

batch=1、7B 模型、M4 Mac Mini 16GB 下的典型分布:

分量llama.cppMLX说明
dispatch_count × cpu_sync_cost ~480 × 2 μs ≈ 0.96 ms ~160 × 2 μs ≈ 0.32 ms 框架差异来源,约占总延迟 10%–30%
gpu_compute_time ~1–3 ms(两者相近) 算力与量化格式决定
memory_bandwidth_time ~4GB ÷ 120GB/s ≈ 33 ms(主导项) 物理天花板,框架无法优化

以上为近似估算(batch=1,7B Q4_K_M,M4 16GB)。memory_bandwidth_time 是决定性主导项,这解释了为什么 MLX 在带宽饱和时优势接近零。

维度llama.cpp(ggml-metal)MLX
内核生命周期 预编译,随二进制打包(.metal.metallib 运行时按需编译,首次运行有编译延迟,之后缓存
算子融合 有限:部分手写融合内核(如 flash attention) 框架级自动融合,lazy graph 分析后合并相邻算子
每次 forward pass dispatch 次数(7B) 约 400–600 次(逐算子) 约 80–160 次(融合后)
CPU 调度路径 ggml 调度线程 → Metal command buffer MLX scheduler 直接写 Metal command buffer
多流并行 单 Metal command queue(主流配置) 支持多 stream,可并行相邻层的计算

为什么 MLX 会诞生:Apple Silicon 专用推理框架的设计起点

2023 年底,Apple 机器学习研究团队开源了 MLX。它的设计动机与众不同——不是为了跨平台,而是为了榨干一种硬件

在 MLX 出现之前,Apple Silicon 上的 LLM 推理依赖:

  • Core ML / MPS:苹果官方推理栈,模型格式封闭,对研究人员不友好
  • llama.cpp + Metal:社区主力,但 ggml 为 CUDA 世界设计,带来跨平台抽象开销
  • PyTorch + MPS backend:MPS 算子覆盖不完整,推理速度未能充分利用 Apple Silicon

Apple 工程师的判断:要真正利用统一内存 + 高带宽总线 + Metal GPU 的组合,需要一个从零为 Apple Silicon 设计的数组计算框架。

MLX 的四条核心设计原则

  • CPU 和 GPU 共享同一内存空间,零拷贝传输数据
  • Lazy evaluation:运算不立即执行,等需要结果时批量调度,期间做图优化
  • 动态图 + JIT,API 风格接近 NumPy / JAX,对研究人员友好
  • Metal compute shader 在运行时按需编译,不预打包固定内核

llama.cpp 的架构:ggml 多平台抽象 + llama.cpp Metal backend + GGUF 量化

llama.cpp 由 Georgi Gerganov 于 2023 年 3 月发布,目标是用纯 C/C++ 在消费级硬件上跑 LLaMA可移植性是第一优先级。

ggml:通用张量后端

llama.cpp 的核心是 ggml——一个轻量 C 张量库,通过后端插件支持多种硬件:

后端硬件激活条件
GGML_METALApple Silicon GPUmacOS,-DLLAMA_METAL=ON
GGML_CUDANVIDIA GPULinux/Windows + CUDA
GGML_VULKANAMD / Intel GPUVulkan driver
GGML_CPU所有 CPU默认回退

好处是一套代码跑所有平台;代价是每个后端都是通用适配,无法针对特定硬件深度优化,且抽象层带来调度开销。

Metal backend(ggml-metal)与预编译内核

在 Apple Silicon 上,llama.cpp 启用 ggml-metal.metal——一个预编译的 Metal 着色器文件,包含:

  • 矩阵乘法:为 Q4_K、Q8_0 等 GGUF 量化格式分别实现专用内核
  • Softmax、RoPE、RMS Norm:逐算子独立内核
  • KV cache 操作:内存视图复用,避免拷贝

关键限制:内核预编译固定,运行时不根据张量形状重新优化。序列长度或 batch size 变化时,内核参数通过 Metal buffer 传入,但内核本身不变——这正是 MLX 运行时特化可以占到便宜的地方。

GGUF 量化格式

llama.cpp 使用 GGUF,量化精度从 Q2_K(极度压缩)到 Q8_0(接近 fp16)不等。每种量化格式在 Metal 内核中有对应实现,是它在 Apple Silicon 上性能不差的原因——但这也意味着每增加一种量化格式就要维护一套内核。

MLX 的架构:lazy evaluation + runtime JIT kernel + Apple Silicon 统一内存

MLX 与 llama.cpp 的根本差异在于抽象层的位置:llama.cpp 的 Metal 是一个"插件后端",而 MLX 的整个计算图从设计之初就活在 Metal 的语义之上。

Lazy Evaluation + 计算图融合

  1. Python 代码调用 MLX 算子时,不立即执行,只记录计算图节点
  2. 当调用 mx.eval() 时,框架分析整个图
  3. 相邻可融合算子(matmul + bias + activation 等)合并成一次 Metal dispatch
  4. 生成的 Metal compute shader 运行时编译并缓存,之后复用

统一内存的深度利用

  • 所有张量在统一内存池分配,CPU 和 GPU 共享同一物理地址
  • 不存在"显存"概念,模型权重加载后 GPU 直接读取,无需 cudaMemcpy 等价操作
  • Metal buffer 与 MLX 数组底层同指针,零拷贝传参

llama.cpp 的 Metal 后端同样利用统一内存(这是 Apple Silicon 的硬件特性,任何 Metal 程序都自动获得),但 ggml 的内存分配器并非专为此设计,存在额外的对齐与分配逻辑。

GGUF vs MLX 量化格式:两套不兼容的生态

MLX 使用 safetensors + MLX 量化元数据,与 GGUF 完全不兼容。同一个基础模型需要分别转换:

  • llama.cpp 用:从 HuggingFace 下载 → convert.py 转 GGUF 再量化
  • MLX 用:mlx_lm.convert 转换,或直接从 mlx-community 拉取预转换版本

量化位宽支持 4-bit、8-bit 及混合精度,算子实现直接与 Metal shader 深度绑定——这是 MLX 量化解压路径比 GGUF 短的根本原因。

MLX vs llama.cpp 性能差异的真实来源:dispatch 次数 vs memory bandwidth

这是 mlx benchmark 里最容易被误解的部分。MLX 的速度优势不是来自更好的矩阵乘法算法,而是来自三个可量化的工程因素:

1. dispatch 融合:少 3× 的 CPU-GPU 同步

§ 核心差异 所述,MLX 将每个 token 的 Metal dispatch 从约 480 次降至 160 次。这在 batch=1、短序列 时收益最大——GPU compute 时间短,CPU 调度开销占比高。

2. 运行时内核特化:针对具体张量形状优化

MLX 在首次运行特定形状的计算时编译 Metal shader,可针对具体矩阵维度调整 tile size 和 workgroup 大小。llama.cpp 的预编译内核使用保守的通用参数,对非标准序列长度适应性差。

3. 量化解压路径更短

llama.cpp 为支持多平台,量化解压(dequant)需兼顾 CPU fallback 路径;MLX 的量化内核直接以 Metal 为唯一目标,解压 + 矩阵乘可在同一个 shader 中完成,减少全局内存读写。

实测区间参考

以下数据来自 Macstripe Lab,Llama-3.1-8B / Q4_K_M,batch=1,2026-06 测量。仅供趋势参考,不作为购买或选型依据。

设备llama.cpp(Ollama)tok/sMLX tok/s差距
M4 Mac Mini 16GB27–3128–33+3%–7%
M4 Mac Mini 24GB34–3937–43+5%–10%
M4 Pro 48GB72–8080–90+8%–12%

规律:内存越充裕、模型越大,MLX 优势越明显。原因是大模型 forward pass GPU compute 时间更长,dispatch 融合的绝对收益更大;16GB 跑 7B 时,带宽已是瓶颈,融合收益被稀释。

Performance Convergence Model(性能收敛图)

将上表趋势可视化:MLX 的性能优势如何随内存档位增长,以及在带宽饱和点处归零:

  MLX advantage
  (tok/s delta)

  +12% │                                        ● 48GB (14B)
       │                                   ·
   +8% │                              ·
       │                         ·
   +5% │                    ● 24GB (7B–14B)
       │               ·
   +3% │          ● 16GB (7B)
       
    0% │━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  ← memory bandwidth ceiling
       │   (swap)  (swap)
  -∞% │     ↓ swap 触发时两者同时崩溃
       
       └────────────────────────────────────────────
              16GB       24GB       48GB       内存档位
图 · MLX vs llama.cpp 性能差异收敛模型 — 内存带宽天花板以下 MLX 有优势,swap 区间两者同时归零

图的关键含义:内存档位决定你能站在曲线的哪个位置。从 16GB → 24GB 的收益(换框架无法获得),远大于 MLX vs llama.cpp 的 3%–12% 差距。

为什么大多数场景 mlx benchmark 差异≈0:memory bandwidth 才是天花板

并非所有场景都能看到 MLX 的优势。这是本文最重要的"反直觉价值点":

内存带宽饱和:框架差异被物理限制压平

batch=1 推理的性能天花板是权重搬运带宽,不是 GPU 算力。每生成一个 token,需读取一遍所有层权重(7B Q4 ≈ 4GB 数据移动)。M4 的内存带宽约 120GB/s(16GB 版),这个物理上限决定 tok/s 上界。无论 MLX 还是 llama.cpp,都无法突破它——带宽饱和时两者收敛。

内存 swap 时两者同时垮掉

统一内存不足时,系统将权重换到 SSD,带宽从 120GB/s 骤降至 3–5GB/s(NVMe 顺序读上限)。两者 tok/s 都跌至个位数,框架差异完全消失。解决方案只有升内存档位,换框架无效。

长上下文 prefill:GPU 算力成瓶颈,dispatch 开销占比趋零

prefill(处理长 prompt)是计算密集型操作,GPU 利用率接近 100%。2048 token prompt 的 prefill 时间,两者差距通常 <5%。

小模型(≤3B):绝对 compute 时间太短

3B Q4 权重仅约 2GB,一次 forward pass GPU 时间约 5–10ms。dispatch 融合节省的 0.3–1 ms 占比上升,但绝对值小到用户无感知。

高精度量化(Q8_0 / fp16):带宽更早饱和

精度越高,权重越大,带宽越早成为瓶颈。Q8 模型在 16GB 机器上几乎必然 swap,此时谈框架差异毫无意义。

Ollama vs MLX 工程选型:Agent runtime 为什么不关心 tok/s

如果 MLX 在硬件层更近,为什么 Claude Code 推荐栈是 Ollama(llama.cpp)?因为这是两个不同维度的问题。

HTTP server 才是关键变量

Ollama 在 llama.cpp 之上提供了一整套推理服务工程

  • 开箱 HTTP 推理服务:11434,OpenAI 兼容 API)——Claude Code 直接对接,零配置
  • 模型生命周期管理ollama pull / rm,自动卸载不用的模型)
  • 多请求并发调度(多个 Claude Code 窗口共享同一模型实例,不重复加载)
  • 团队局域网共享ollama serve --host 0.0.0.0,全组接同一 :11434

MLX 没有这些。用 MLX 接 Claude Code 需要:自建 FastAPI 网关 → 实现模型加载/卸载逻辑 → 处理并发请求队列 → 维护 OpenAI API 兼容层。这是一个完整的推理服务工程,不是一条命令的事。

Agent tool loop 中 tok/s 差异占比 <5%

在 Agent tool loop 中,Claude Code 每轮调用包括:prompt 组装 → HTTP 请求 → 等待响应 → 解析工具调用 → 执行工具 → 下一轮。延迟分布:

因素占比(典型 Agent 任务)能被框架优化?
工具执行时间(文件读写、shell 命令)50%–70%
HTTP 往返 + 模型 TTFT20%–35%主要靠内存档位
框架级 tok/s 差异(MLX vs llama.cpp)<5%是,但影响极小

Agent 体验的决定性变量是内存档位和模型大小。框架差异被 HTTP 层和工具执行时间完全淹没。

Ollama vs MLX 的工程边界

明确各自的工程边界,就不会再混淆:

  • Ollama(llama.cpp):HTTP runtime 层,解决"怎么接进去"的问题
  • MLX:计算层工具,解决"在 Python 里怎么跑得快"的问题
  • 两者不互斥:同一台 Mac 可以装 MLX 做 benchmark,同时跑 Ollama 服务 Claude Code

→ Ollama vs MLX 选型完整逻辑:Ollama vs MLX:Claude Code 本地模型怎么选?
→ M4 Pro 上 MLX 部署实战:Apple Silicon M4 Pro 本地大模型运行指南:性能实测与 MLX 部署

我应该选 MLX 还是 llama.cpp?(30 秒决策树)

根据你的实际场景选择,不存在"哪个更好"的绝对答案:

Apple Silicon LLM 推理结论模型:三条可引用规则(mac m4 llm inference speed)

将本文所有结论压缩成一个可复用、可引用的判断框架:

判断模型(可直接引用)

  1. 性能上限 = memory bandwidth
    Apple Silicon 上 batch=1 推理的 tok/s 天花板由统一内存带宽决定(M4 约 120GB/s),框架无法突破物理限制。
  2. 框架差异 = dispatch 开销
    MLX vs llama.cpp 的性能差距(3%–12%)来自 Metal dispatch 次数差异(480 vs 160),不是算子算法更优。
  3. 系统选型 = runtime vs research
    Agent runtime 选 Ollama(llama.cpp)——HTTP server 是决定变量;研究 / benchmark / 微调选 MLX——计算层最近硬件。

框架优化只能优化 5%–15%,内存档位决定 85%。
所有 MLX vs llama.cpp 的讨论,最终都会归结到这一句。

相关问题:Apple Silicon 推理选型常见搜索

MLX 和 llama.cpp 哪个更适合本地部署?

取决于"部署"的含义。如果是部署推理服务(给 Claude Code / Cursor / 自建 API 使用),llama.cpp + Ollama 更适合——开箱 HTTP server,模型管理完善。如果是部署研究环境(测试新模型、做 benchmark、写 Python 脚本),MLX 更适合——更接近硬件,Python 接口灵活。

Apple Silicon 上 LLM 推理为什么不用 CUDA?

Apple Silicon 没有 NVIDIA GPU,不支持 CUDA。苹果的 GPU 通过 Metal API 调用,统一内存架构让 CPU 和 GPU 共享同一物理内存池——这与 NVIDIA 的独立显存模型完全不同。MLX 和 llama.cpp 都基于 Metal,利用的是统一内存而非显存。

GGUF 和 MLX 量化格式有什么区别?

两者不兼容,是两套独立的量化生态。GGUF(llama.cpp)支持 Q2_K 到 Q8_0 多种精度,在 ggml-metal 内核中有专用实现;MLX 使用 safetensors + MLX 量化元数据,量化内核直接绑定 Metal shader。同一基础模型需要分别转换才能在两个框架中使用。

为什么 Mac 上 LLM 主要用 Ollama?

Ollama 解决了"怎么把 LLM 用起来"的工程问题:一条命令启动 HTTP server,OpenAI 兼容 API,Claude Code / Cursor / Open WebUI 等工具直接对接。底层是 llama.cpp,在 Apple Silicon 上通过 Metal 加速,性能足够用,而且不需要任何 Python 环境或自建服务。

FAQ

MLX vs llama.cpp 哪个更快?性能差异有多大?

多数 benchmark 场景下 MLX 快 3%–12%,主要来自算子融合(dispatch 次数约 480 vs 160)与运行时 Metal kernel 特化。但在 batch=1 带宽饱和、内存 swap、或长 prefill 时,两者差距接近零。内存越大(48GB 节点)、模型越大(14B+),MLX 优势越明显;16GB 跑 7B 时差距仅 3%–7%。

llama.cpp 的 Metal backend 和 MLX 有什么本质区别?

llama.cpp 通过 ggml 抽象多平台,Metal 是众多后端之一,内核预编译、逐算子独立 dispatch;MLX 从设计之初只针对 Apple Silicon,lazy evaluation 在运行时融合算子,dispatch 次数少 3×,量化路径更短,统一内存对齐更深。

GGUF 和 MLX 量化格式能互转吗?

不能直接互转,两套格式完全独立。GGUF 用 llama.cpp 的 convert.py 从原始权重生成;MLX 格式用 mlx_lm.convert 转换,或从 mlx-community 直接拉取。同一基础模型需要分别转换。

Claude Code 为什么选 Ollama 而不是 MLX?

Ollama 提供开箱 HTTP 服务(:11434,OpenAI 兼容),无需自建网关。在 Agent tool loop 中,框架级 tok/s 差异仅占总延迟 <5%,工具执行时间和 HTTP 层才是瓶颈。MLX 没有内置 HTTP server,接入 Claude Code 需要完整的自建推理服务栈,工程成本吃掉所有速度优势。

swap 时哪个框架更抗造?

两者都会严重劣化,差距消失。内存带宽从 120GB/s 降至 3–5GB/s(NVMe 上限),任何框架都无法优化 SSD 瓶颈。升内存(24GB 或 48GB 节点)是唯一解法。

可以同时安装 MLX 和 Ollama 吗?

可以,完全不冲突。推荐配置:Ollama 常驻后台服务 Claude Code,MLX 按需在 Python 环境里跑 benchmark 或微调脚本。两者共享同一份统一内存,但模型格式不同,需要分别管理。

相关阅读