Agentic Research
首頁/工具/其他推理框架對比:llama.cpp、MLX、ExLlamaV2 完整指南

其他推理框架對比:llama.cpp、MLX、ExLlamaV2 完整指南

2026/05/107 分鐘Bryan Chan最後更新 2026/05/10
這篇屬於工具主題MLXInferenceLocal LLM

先讀這些

這篇文章在學習路徑上假設你已經讀過下列內容。

三大推理框架概覽

特性llama.cppMLXExLlamaV2
平台全平台Apple Silicon onlyNVIDIA GPU only
格式GGUFMLX / safetensorsGPTQ / EXL2
速度 (M3 Ultra)中等最快不支援
量化Q2-Q8, K-quantsQ4, Q82-8 bit
生態最成熟 (Ollama)Apple 官方高階 GPU 用戶

llama.cpp

Ollama 的底層引擎,支援所有平台的 CPU/GPU 混合推理。

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j

# 下載 GGUF 模型後運行
./llama-cli -m model.gguf -p "Hello world" -ngl 99
  • 優勢:生態最大、Ollama 整合、GGUF 模型最豐富
  • 劣勢:在 Apple Silicon 上不如 MLX 快

MLX (Apple)

Apple 官方推出,專為 M 系列芯片優化。

pip install mlx-lm
mlx_lm.generate --model mlx-community/Qwen2.5-7B-Instruct-4bit --prompt "Hello"
  • 優勢:Apple Silicon 上最快、統一記憶體利用最充分
  • 劣勢:限 Apple Silicon、模型庫較小

ExLlamaV2

專為 NVIDIA GPU 設計的高效能推理引擎。

git clone https://github.com/turboderp/exllamav2
pip install exllamav2
  • 優勢:NVIDIA GPU 上最快、支援 GPTQ
  • 劣勢:僅 NVIDIA GPU、門檻較高

選擇建議

你的環境推薦
Mac M 系列MLX (最快) > llama.cpp (Ollama)
NVIDIA GPUExLlamaV2 > llama.cpp
CPU onlyllama.cpp
追求簡單Ollama (底層 llama.cpp)
追求極致效能MLX (Mac) / ExLlamaV2 (NVIDIA)

模型格式與量化的取捨

三個框架各自綁定不同格式,選框架某種程度上就是選格式,值得先想清楚再下載模型。

GGUF(llama.cpp):單一檔案自帶中繼資料,支援 CPU 與 GPU 混合卸載,K-quants 提供多個壓縮層級。優點是跨平台分發方便、模型來源最廣;缺點是同一模型的檔案命名與量化標籤較繁雜,要確認自己下載的是哪一版。

MLX / safetensors(MLX):貼合 Apple 統一記憶體架構,量化以低位元為主,生態圍繞社群轉換好的 MLX 版本。若手邊只有 safetensors,通常需要先做一次轉換。

GPTQ / EXL2(ExLlamaV2):針對 NVIDIA GPU,EXL2 的彈性在於可以為不同層分配不同位元寬度,換取顯存與品質之間的平衡。

取捨較低位元量化較高位元量化
記憶體佔用較低較高
生成速度通常較快較慢
輸出品質有機會下降較接近原始
適用情境記憶體吃緊記憶體充足

實務建議是先從中等量化跑通整條流程,確認能正常載入與回覆,再依記憶體餘量與品質需求調整。不要一開始就追求最低位元,否則可能把品質問題與設定問題混在一起,難以判斷原因。另一個常見陷阱是格式不通用:拿到 GGUF 就只能在支援 GGUF 的框架使用,換框架要重新轉換,轉換前務必保留原始權重。


各框架的調優要點

llama.cpp:核心參數包括卸載到 GPU 的層數、執行緒數、批次大小與上下文長度。層數調高會更依賴 GPU,記憶體不足時要往下調;上下文長度直接影響記憶體佔用,開太大即使模型本身放得下也會失敗。長時間使用建議以伺服器模式啟動,提供 OpenAI 兼容接口,方便被其他工具呼叫。

MLX:模型需為 MLX 格式,若只有原始權重可先轉換。由於統一記憶體讓模型與上下文共享同一個池,長上下文要預留足夠餘量,否則容易在生成中途失敗。使用社群已量化好的版本可以省去轉換步驟,但要留意量化方式是否與你的需求相符。

ExLlamaV2:多數情況透過 Python API 或範例腳本使用,需先把模型轉成對應格式。顯存大小決定每層可用的位元配置,顯存越緊就越要在位元寬度上妥協。這一套適合追求單卡低延遲、且願意處理轉換流程的使用者。

三個框架的共同原則是:先用小模型驗證流程,再用目標模型調參數;每改一個參數就記錄一次結果,避免同時改動多個變數而無法歸因。


效能驗證方式

效能比較必須在同一基礎上進行,否則結論沒有意義。

  • 固定提示內容與輸出長度,分別量測生成速度與第一個 token 的延遲。
  • 每次只改一個變數(量化層級、卸載層數、上下文長度),比對差異。
  • 監控記憶體峰值,確認沒有落入交換空間,一旦落入,速度數據不可用。
  • 注意散熱與降頻:長時間連續測試的後段結果會低於前段,比較時要取相同條件。
  • 跨框架比較時,使用同一模型的等效量化版本,並在相同提示下執行。

建議把測試腳本化,固定輸入與測量方式,這樣換版本或換參數時可以快速重跑並對照。


常見錯誤與檢查清單

常見錯誤

  • 拿不同量化版本互相比較速度,結論無效。
  • 只看生成速度,忽略第一個 token 的延遲,互動體驗其實很差。
  • 在 Apple Silicon 上期待 ExLlamaV2 可用,或反過來在 NVIDIA 上期待 MLX。
  • 模型已落入交換空間仍宣稱可用,實際速度與穩定性都不可接受。
  • 忽略上下文長度對記憶體的影響,開大後才發現載入失敗。
  • 混用不同框架的量化檔案,載入直接報錯。

檢查清單

  • 已確認目標平台的框架支援範圍。
  • 已確認模型格式與框架匹配,必要時完成轉換。
  • 已依記憶體餘量選擇量化層級。
  • 已記錄卸載層數、執行緒數與上下文長度的組合。
  • 已量測生成速度與首 token 延遲。
  • 已確認測試期間沒有觸發交換空間。
  • 已把測試流程腳本化,方便重跑對照。

推薦閱讀

在這條路徑上的下一步