localaiforum
登入
指南 › 執行與服務

推論引擎比較

引擎是把權重變成 token 的程式:它載入檔案、跑 transformer 前向計算、而且通常在上面講 HTTP。好消息是幾乎每個引擎在同樣硬體上跑同一個模型的速度大致相同——引擎選擇關乎工作流程、格式支援與並行,不是原始 tok/s。壞消息也一樣:在它們之間比價基準分數大多是白費力氣。

市場現況

引擎 是什麼 格式 硬體涵蓋 為何而生
llama.cpp C/C++ 推論核心,內建伺服器 GGUF CPU、CUDA、ROCm、Metal、Vulkan——涵蓋最廣 基石;幾乎到處都跑
Ollama llama.cpp 包上模型庫、CLI 與 REST GGUF llama.cpp 支援的都行 零摩擦的桌面使用
LM Studio 精緻 GUI 加 OpenAI 相容伺服器 GGUF(Mac 上還有 MLX) Windows/macOS/Linux GUI 想要按鈕、不想背旗標的人
vLLM Python 服務引擎:分頁注意力、連續批次 safetensors CUDA(部分 ROCm/TPU) 資料中心級的並行服務
SGLang 有 RadixAttention 前綴快取的服務引擎 safetensors CUDA 快速結構化輸出;共享前綴的智慧代理
exllamav2 為解碼速度調校的純 GPU 載入器 EXL2、GPTQ 僅 CUDA 單張消費級 NVIDIA GPU 上的最大單人 tok/s
MLX Apple 的陣列框架;mlx-lm 在上面跑模型 MLX Apple Silicon 近期 Mac 上快速的實用路線
transformers(HF) 一切移植來源的參考實作 safetensors CPU、CUDA 正確性檢查、實驗、訓練管線

一個血統註記:Ollama 與 LM Studio 底下都在跑 llama.cpp。拿它們與 llama.cpp 比是在比包裝,不是比推論。

也值得知道:llama.cpp 出的不只是伺服器——還有量化與轉換工具、基準測試框架、以及十幾種語言的綁定。

深入補充

vLLM 誕生自分頁注意力的洞見(見 並行處理):像 OS 對待 RAM 那樣對待 GPU 記憶體,就能塞進多更多的請求。它是「我有一台 GPU 伺服器與真實流量」的預設答案。

SGLang 跨請求快取前綴(RadixAttention):如果 40 個智慧代理共享同樣兩頁的系統提示詞,那份提示詞只處理一次,不是 40 次。它也以快速受限解碼聞名——見 結構化輸出。

exllamav2 是專為一個利基磨的利刃:單人、單張 NVIDIA GPU、想要每量化位元最多 tok/s。伺服器故事與硬體涵蓋都很薄;但利基是真的。

MLX 是 Apple 的機器學習框架,為統一記憶體而生。截至目前,mlx-lm 在較大模型上常勝過 llama.cpp 的 Metal 路徑——差距夠小,所以在 Mac 上兩個都值得試試(更多在 Apple Silicon)。

transformers 是緩慢而忠實的參考:當量化引擎行為怪異時,把同一個模型丟給它跑就能回答「是引擎還是模型的問題?」它也是微調工具底下的管線(見 微調)。

按需求選擇

你的情況 從這裡開始
在自己的桌前聊天 Ollama 或 LM Studio
從 shell 寫腳本(管線、cron、小工具) Ollama 的 REST API,或 llama-server
打造流量不大的應用後端 llama-server——一個程序、零維運
服務許多同時使用者 vLLM 或 SGLang
跑共享長系統提示詞的智慧代理艦隊 SGLang 或 vLLM;見 智慧代理
全 Mac 的家庭 先 Ollama/LM Studio;要更快選 MLX

關於這張表的兩個註記:

  • 「從這裡開始」不是「就此將就」——每個桌面引擎都讀同一個 GGUF,試第二個花五分鐘,不是一次搬家。
  • 真的要比時,把一切固定:同一個模型、同一個量化、同一個提示詞、模型已熱機。

格式分裂映照桌面/伺服器分裂

GGUF 對決 safetensors(見 模型格式)不只是容器偏好——它決定你的引擎。GGUF 是單檔、預量化、到處能跑的格式,整個桌面生態(llama.cpp、Ollama、LM Studio)都蓋在它上面。safetensors 是 Hugging Face 生態的分片張量格式;高吞吐伺服器引擎(vLLM、SGLang、transformers)吃的是它,通常是即時量化(AWQ/GPTQ 變體)而非預先打包。

所以真正的決策樹很短:桌面與單人 → GGUF 引擎;伺服器與並行 → safetensors 引擎。其他都是細節。

當某個東西「跑不動」時,先查格式——一半的「引擎 X 跑不動模型 Y」是 GGUF/safetensors 不匹配,不是能力差距。

開銷不是重點

在同樣硬體、同樣量化下,各引擎的單串流解碼速度大致相差 10–20% 以內——常常因為它們共享後端。真正讓你的體感速度以倍數而非百分比移動的是:

  • 模型是否已經載入——冷載入要花數秒到一分鐘。
  • 每輪是否重送整個對話——上下文成本,見 token 與分詞器。
  • 請求是否在彼此後面排隊——見 並行處理。
  • 層是否都在 GPU 上——見 引擎參數。
Same GPU, same 8B Q4_K_M, single stream (illustrative, not specs):
llama.cpp / Ollama / LM Studio    ~130–145 tok/s   (same engine underneath)
exllamav2 EXL2 ~4bpw              ~160–180 tok/s   (loader tuned for decode)

Same GPU, 8 concurrent chat streams:
llama-server serial queue         each stream waits; total throughput flat
vLLM                              all streams near single-stream speed

挑選符合你工作流程的引擎,然後把力氣花在 I/O 模式上,而不是引擎基準分數。

一個檔案,多個引擎

你為 Ollama 下載的 GGUF 也能直接在 llama.cpp 與 LM Studio 裡跑——引擎不轉換、不重新下載;你把它們指向同一個檔案(Ollama 能用一行 Modelfile 匯入本機路徑)。伺服器端 vLLM 與 SGLang 之間的 safetensors 也一樣。實際後果:沒有檔案層級的廠商鎖定,選錯引擎的代價是幾分鐘。

這就是這一頁不斷把工作流程擺在基準分數之前的原因:當需求改變,你已經下載的模型會跟著你走。

何時從 Ollama 畢業

Ollama 的預設值很優秀,直到不再優秀。在以下情況換到服務引擎:

  • 你需要超過個位數串流的持續並行(見 並行處理)。
  • 你想要跨多個共享系統提示詞的智慧代理做前綴快取(SGLang)。
  • 你必須直接從 HF 生態服務 AWQ/GPTQ safetensors 量化。
  • 你要在出貨前對產品功能做負載測試。
  • 你需要多 GPU 張量平行把一個大模型塞進多張卡。

在上述任一成真之前,便利性比吞吐量更值錢。

相關章節: 模型格式 · 引擎參數 · 端點服務 · 如何選模型