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:Apple 官方推理堆疊,模型格式封閉,對研究人員不友好
  • 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。Apple 的 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 上大型模型主要用 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 或微調腳本。兩者共享同一份統一記憶體,但模型格式不同,需要分別管理。

相關閱讀