Về blog

llama.cpp vs Ollama: Nên chạy cái nào năm 2026?

10 tháng 9, 2026

llama.cpp thuần nếu bạn muốn tối đa tokens/second và toàn quyền kiểm soát; Ollama nếu bạn muốn cài bằng một lệnh và một API server chạy được ngay. Ollama không phải một engine đối thủ — nó là một service viết bằng Go đóng gói llama.cpp làm backend inference, thêm phần quản lý model (ollama pull llama3.1), và phục vụ REST API trên port 11434. Vậy câu hỏi thật sự không phải “engine nào nhanh hơn” mà là “bạn muốn kiểm soát các núm vặn của engine đó ở mức nào”. Vì Ollama đóng sẵn những default thận trọng (quantization Q4_K_M, context khiêm tốn, không flash attention cho tới gần đây), cùng một phần cứng có thể cho ra những con số chênh nhau thấy rõ. Bên dưới: điểm khác thật sự, khoảng cách tốc độ đến từ đâu, cùng một model chạy trên cả hai, và một bảng quyết định.

llama.cpp và Ollama khác nhau ở điểm nào?

llama.cpp là inference engine: một dự án C/C++ duy nhất của Georgi Gerganov — tác giả GGUF — chạy model đã quantize trên CPU, GPU, hoặc kết hợp cả hai. Nó cho bạn llama-cli để chạy prompt kiểu one-shot và llama-server — một HTTP server tương thích OpenAI — cùng mọi cờ tinh chỉnh mà engine hỗ trợ: offload layer lên GPU, quantization KV-cache, speculative decoding, sampler tùy chỉnh.

Ollama là một sản phẩm dựng lên trên engine đó. Nó fork và vendor llama.cpp, rồi bọc lại bằng:

  • một model registry (ollama pull, ollama list) với việc tách trọng số GGUF tự động,
  • hệ thống Modelfile (một đặc tả kiểu Dockerfile cho prompt template và tham số),
  • một daemon nền giữ model nóng trong VRAM và mở REST API riêng,
  • tự dò phần cứng với default an toàn.

Hệ quả thực tế: với Ollama bạn quản lý model; với llama.cpp bạn quản lý inference. Nếu từng muốn đổi định dạng quantization, quantize KV cache, nâng context vượt mức default, hay ghim các layer cụ thể lên GPU — đó là sân của llama.cpp. Ollama che phần lớn các núm đó — cố ý.

llama.cppOllama
Đây là gìInference engine (C/C++)Service bọc llama.cpp
Cài đặtBuild từ source hoặc qua packageTrình cài một dòng, một binary
Chạy một modelllama-cli -m model.gguf + cờollama run llama3.1
APITương thích OpenAI (llama-server)REST riêng + endpoint tương thích OpenAI
Quản lý modelBạn tự tải file GGUFRegistry: pull/list/rm
DefaultBạn chọn tất cảAn toàn: Q4_K_M, context khiêm tốn
Cập nhật engineNgay ngày đầu (upstream)Chậm hơn bản phát hành upstream
Độ sâu tinh chỉnhĐầy đủ (KV quant, spec decode, sampler)Passthrough có hạn
Hợp nhất vớiTối ưu hiệu năng, server, thiết bị edgeNgười mới bắt đầu, laptop dev

llama.cpp có nhanh hơn Ollama không?

Trên cùng một file GGUF, cùng quantization, cùng context, cùng phiên bản llama.cpp — không, chúng hơn nhau trong khoảng nhiễu, vì Ollama chính là llama.cpp đang tính toán. Mọi benchmark “Ollama chậm hơn 30%” bạn thấy thực chất là so sánh default. Khoảng cách đến từ ba chỗ:

  1. Lựa chọn quantization. Registry của Ollama mặc định Q4_K_M. Chạy cùng model đó ở Q5_K_M hoặc Q6_K bằng llama.cpp và bạn nhận chất lượng tốt hơn mỗi token với tốc độ tương đương — hoặc chọn Q4_0/IQ4 cho tốc độ thô.
  2. Flash attention và quantization KV-cache. --flash-attn cộng với -ctk q8_0 -ctv q8_0 thu nhỏ KV cache đáng kể, giúp tăng tokens/second ở context dài và nhét được context lớn hơn vào cùng lượng VRAM. Ollama chỉ mở một phần trong số này.
  3. Chậm phiên bản. llama.cpp nhận tối ưu kernel mỗi tuần; Ollama merge upstream theo lịch riêng. Một bản build llama.cpp mới có thể nhanh hơn hẳn binary Ollama vài tháng tuổi trên cùng một máy — cho tới khi Ollama bắt kịp.

Một lệnh benchmark nhanh, không lệch engine nào — nó báo tốc độ đánh giá prompt và tốc độ sinh:

./build/bin/llama-bench -m Llama-3.1-8B-Instruct-Q4_K_M.gguf -ngl 99 -fa 1

Chạy nó trên chính file model của Ollama (~/.ollama/models/blobs/..., đổi tên thành .gguf) và bạn thường khớp đúng số của Ollama — rồi vượt lên bằng cách thêm -ctk q8_0 ở context 16k.

Làm sao chạy cùng một model trên cả hai?

Cả hai đều ăn GGUF. Con đường tối thiểu từ đầu tới cuối cho mỗi bên:

# --- Đường Ollama: cài đặt, pull, phục vụ ---
curl -fsSL https://ollama.com/install.sh | sh
ollama run llama3.1:8b        # tải Q4_K_M, nạp vào VRAM, mở một phiên chat

# API của nó, theo kiểu tương thích OpenAI:
curl -s http://localhost:11434/v1/chat/completions -d '{
  "model": "llama3.1:8b",
  "messages": [{"role": "user", "content": "Say hi in 5 words"}]
}'
# --- Đường llama.cpp: build, tải GGUF, phục vụ ---
git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp
cmake -B build -DGGML_CUDA=ON    # hoặc -DGGML_VULKAN=ON / -DGGML_HIP=ON
cmake --build build --config Release -j

huggingface-cli download bartowski/Meta-Llama-3.1-8B-Instruct-GGUF 
  Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf --local-dir models

./build/bin/llama-server -m models/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf 
  -ngl 99 --ctx-size 16384 --flash-attn -ctk q8_0 -ctv q8_0 --port 8080

llama-server mở schema OpenAI Chat Completions, nên cùng lệnh curl trỏ vào http://localhost:8080/v1/chat/completions chạy không cần sửa. Mọi tool xây cho OpenAI API — script, editor, pipeline RAG — trỏ vào bên nào cũng được. Các cờ mới là thứ làm việc thật: -ngl 99 đẩy mọi layer lên GPU, --flash-attn cùng cặp -ctk/-ctv giữ context 16k trong một card 8 GB mà default của Ollama sẽ từ chối.

Để chọn đúng file GGUF và hiểu các nhãn quant nghĩa là gì, xem cách chạy model GGUF local.

Khi nào Ollama là lựa chọn hợp lý hơn?

Đa số người nên bắt đầu với Ollama, và đó không phải giải an ủi:

  • Bạn cần nó chạy được tối nay. Một lệnh, model được pull, API lên. llama.cpp nghĩa là chọn backend (CUDA/Vulkan/HIP/Metal), build, và tự tay tải trọng số.
  • Bạn xoay sở nhiều model cùng lúc. Registry, tự động dọn model, và Modelfile thắng việc tự quản thư mục file GGUF.
  • Máy bạn khiêm tốn. Default của Ollama thận trọng là có lý — chúng gần như luôn vừa và chạy được.
  • Bạn cần bề mặt API ổn định. Daemon của Ollama lo vòng đời model thay cho service chạy dài hạn của bạn.

Chọn llama.cpp thuần khi bạn đang benchmark, phục vụ ở bất kỳ quy mô nào, chạy trên điện thoại hay Raspberry Pi, cần context dài trên VRAM bé, hoặc muốn một tính năng ngay ngày nó merge upstream. Power user thường chạy cả hai: Ollama cho các model dùng hằng ngày, một bản llama.cpp ghim phiên bản cho đúng workload cần nốt 20% cuối.

Nếu so sánh của bạn thực ra là giữa các app GUI desktop, đó là trục khác — xem Ollama vs LM Studio — còn việc chọn model theo từng task, LLM local tốt nhất để code bàn phần model.

Bạn nên dùng cái nào?

Quyết theo mức kiểm soát, không phải tốc độ. Engine thì như nhau; default thì không. Cài Ollama nếu mục tiêu là “chạy và phục vụ API” — bạn mất vài núm vốn chẳng định vặn. Build llama.cpp nếu mục tiêu là tokens/second, độ dài context, hay quyền kiểm soát quantization — bạn có mọi núm, đổi lại phải tự quản model. Dù bên nào bạn vẫn chạy cùng những file GGUF đó, và đổi sau này tốn một buổi chiều, không phải viết lại.

— mrsaynothing

— mrsaynothing

Ghi chú thực địa về AI, Linux và self-hosting.

Thảo luận bài này trên dev.to dev.to ↗

Nhận how-to tiếp theo qua email

Một email mỗi bài viết. Sửa xong rồi đi tiếp.

self-hosted · không bên thứ ba · hủy đăng ký một cú bấm

cái này là gì?

Git Remove Untracked Files: Hướng dẫn git clean an toàn

Thích kiểu viết này? Tôi build như vậy để kiếm sống. thuê tôi