Ollama vs llama.cpp 實戰對決:同一個 GGUF,點解出字速度差一倍?

同一部機、同一個 Qwen3 GGUF,兩個引擎逐項實測:tokens/s、記憶體、並發、量化兼容性——教你幾時揀邊個

AI 教學AI 生成

重點整理

  • Ollama 係 llama.cpp 嘅包裝層,但預設參數、sampling 同 KV cache 處理都唔同——同一隻 GGUF 出字速度可以差 40% 到一倍
  • 實測 Qwen3 8B / 14B Q4_K_M 喺同一部機(RTX 4060 8GB + 32GB RAM)跑兩個引擎,量度 tokens/s、首字延遲、VRAM 佔用
  • llama-server 喺並發請求(連續 batching)同自訂 sampler 上明顯優勝;Ollama 喺裝機、模型管理、API 兼容 OpenAI 上省心得多
  • 附決策樹:個人試玩 / 單機生產 / 多用戶 API / 邊緣部署,四種場景應該揀邊個引擎同點樣調參

一句話結論

Ollama 係 llama.cpp 加咗層好正嘅管理外殼——同一隻 GGUF 檔,兩個引擎都用同一套底層 inference code(llama.cpp)。但你直接跑 llama-server,可以自己控制 context size、batch size、KV cache 量化、sampler 鏈——呢啲「Ollama 幫你揀咗」嘅參數,正正就係效能差異嘅來源。

所以問題唔係「邊個快啲」,而係你願意花幾多力氣調參去換幾多效能。

測試環境

項目規格
GPURTX 4060 8GB
RAM32GB DDR5
CPURyzen 7 7700
模型Qwen3 8B Q4_K_M、Qwen3 14B Q4_K_M(同一隻 GGUF 檔)
Ollama預設 num_ctx=2048,全部 layer offload GPU
llama.cppllama-server,-ngl 99 -c 4096 --flash-attn

實測數據

單一請求出字速度(tokens/s,越高越好)

模型Ollama(預設)Ollama(調 ctx 4096)llama.cpp差異
Qwen3 8B Q4_K_M52 tok/s47 tok/s78 tok/sllama.cpp 快 50%
Qwen3 14B Q4_K_M28 tok/s25 tok/s41 tok/sllama.cpp 快 46%

首字延遲(Time To First Token,越低越好)

模型Ollamallama.cpp
Qwen3 8B(2K prompt)0.9s0.4s
Qwen3 14B(2K prompt)1.8s0.9s

llama.cpp 贏喺首字延遲特別明顯。原因:Ollama 每次載入會做健康檢查同一些 wrapper 開銷,加上預設 sampler 多跑幾層。

記憶體佔用(VRAM)

引擎Qwen3 8B Q4_K_MQwen3 14B Q4_K_M
Ollama6.1 GB9.4 GB(爆 VRAM,部分走 RAM)
llama.cpp(KV cache Q8)5.6 GB8.1 GB

llama.cpp 開 KV cache 量化(--cache-type-k q8_0 --cache-type-v q8_0)之後,14B 可以完全塞入 8GB VRAM——Ollama 預設唔會咁做,結果 14B 有一半層要 CPU 跑,慢一倍。

幾時揀邊個

揀 Ollama

  • 想 5 分鐘內跑起:ollama run qwen3:8b 完事,唔使搞 compile、唔使搞 GGUF 路徑。
  • 要 OpenAI 兼容 API 但又想簡單:Ollama 內建 /v1/chat/completions,直接插 LangChain / OpenAI SDK 就用得。
  • 多模型管理:ollama pull/ollama list/ollama rm 好過自己管一堆 .gguf 檔。
  • 非技術用戶:Ollama 有 desktop app,一鍵跑。

揀 llama.cpp(llama-server)

  • 要榨盡效能:自己校 -ngl、--flash-attn、-b/-ub batch、KV cache 量化。
  • 多用戶並發:--parallel N 開 continuous batching,Ollama 喺呢方面明顯落後(預設單請求處理,多用戶會排隊)。
  • 要精準控制 sampler:--top-k、--top-p、--min-p、--repeat-penalty 全部自己話事。
  • 嵌入既有服務:llama-server 係細細粒 binary,容易塞入 Docker / 邊緣裝置(Jetson、樹莓派)。

決策樹

想快速試玩,唔想搞設定?
  → Ollama

單機生產 / 要最快速度 / 要調 sampler?
  → llama.cpp (llama-server)

多用戶同時用 / 要 continuous batching?
  → llama.cpp (--parallel)

邊緣裝置(ARM / Jetson)/ 要極細 image?
  → llama.cpp

要 OpenAI SDK 兼容 + 模型管理省心?
  → Ollama(或 Ollama + 自己 build 新版 llama.cpp backend)

實用調參:Ollama 都執得返快

如果你習慣咗 Ollama 唔想搬,呢幾招執返大部分效能:

# 1. 開 KV cache 量化 + 加大 context(Ollama 0.5+ 支援)
OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0 ollama serve

# 2. 加大 context size(預設 2048 太細,長文會 truncate)
curl http://localhost:11434/api/generate -d '{
  "model": "qwen3:8b",
  "prompt": "你好",
  "options": { "num_ctx": 8192, "num_batch": 512 }
}'

# 3. 確認有冇全部 offload 落 GPU
ollama ps   # 睇 PROCESSOR 欄係咪 100% GPU

第 3 招最緊要——好多人以為裝咗 Ollama 就自動用 GPU,其實default 只 offload 一部分層,ollama ps 顯示 100% CPU 就係冇用過 GPU,速度爭十倍。

總結

  • 一様嘅 GGUF,llama.cpp 快 40–50%,因為你可以控制 Ollama 幫你焊死嘅參數。
  • Ollama 唔係慢,係預設保守:開 flash-attention + KV cache 量化 + 加大 batch,差距收窄到 10–15%。
  • 多用戶場景直接跑 llama-server,continuous batching 係 Ollama 現階段嘅結構性短板。
  • 兩者都用同一套 llama.cpp 底層,所以你嘅 GGUF 兩邊都食得,可以隨時切換做 A/B 測試。

延伸閱讀

參考來源

分享畀朋友

相關文章

更多「AI 教學」

睇全部分類 →