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 极致优化,一个为跨平台可移植性。
| 维度 | MLX | llama.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 共享物理内存 · 零拷贝 · 高带宽 │ └─────────────────────────────────────────────────┘
关键结论:选型只发生在 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.cpp | MLX | 说明 |
|---|---|---|---|
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_METAL | Apple Silicon GPU | macOS,-DLLAMA_METAL=ON |
GGML_CUDA | NVIDIA GPU | Linux/Windows + CUDA |
GGML_VULKAN | AMD / Intel GPU | Vulkan 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 + 计算图融合
- Python 代码调用 MLX 算子时,不立即执行,只记录计算图节点
- 当调用
mx.eval()时,框架分析整个图 - 相邻可融合算子(matmul + bias + activation 等)合并成一次 Metal dispatch
- 生成的 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/s | MLX tok/s | 差距 |
|---|---|---|---|
| M4 Mac Mini 16GB | 27–31 | 28–33 | +3%–7% |
| M4 Mac Mini 24GB | 34–39 | 37–43 | +5%–10% |
| M4 Pro 48GB | 72–80 | 80–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 内存档位
图的关键含义:内存档位决定你能站在曲线的哪个位置。从 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 往返 + 模型 TTFT | 20%–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)
将本文所有结论压缩成一个可复用、可引用的判断框架:
判断模型(可直接引用)
- 性能上限 = memory bandwidth
Apple Silicon 上 batch=1 推理的 tok/s 天花板由统一内存带宽决定(M4 约 120GB/s),框架无法突破物理限制。 - 框架差异 = dispatch 开销
MLX vs llama.cpp 的性能差距(3%–12%)来自 Metal dispatch 次数差异(480 vs 160),不是算子算法更优。 - 系统选型 = 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 或微调脚本。两者共享同一份统一内存,但模型格式不同,需要分别管理。