Bạn đã chọn được model (bài 1), đã hiểu hardware sẽ chạy ra bao nhiêu tok/s (bài 2). Câu hỏi tiếp theo là: chạy bằng cái gì.
Năm 2024 lựa chọn còn đơn giản. llama.cpp nếu bạn quen CLI, text-generation-webui nếu thích GUI, vLLM nếu bạn ở team enterprise. Đến giữa 2026, sân chơi đã chia nhánh rõ ràng hơn. Bốn cái tên dominate: Ollama, LM Studio, vLLM, llama.cpp. Mỗi cái optimize cho một use case khác nhau, và chọn sai cái sẽ tốn 2-3 ngày trước khi bạn nhận ra mình đã chọn nhầm.
Bài này không bench tốc độ cho vui. Tôi sẽ đi qua từng runner, nói rõ nó mạnh ở đâu, dở ở đâu, kèm bảng so sánh và recommend cụ thể theo profile use case.
Bốn runner, bốn triết lý
Trước khi vào chi tiết, đặt cả bốn cạnh nhau theo triết lý thiết kế.
llama.cpp là engine inference C++ thuần. Toàn bộ stack local LLM consumer 2026 đứng trên vai nó. Nó là foundation, không phải UX layer. Bạn build từ source, chạy ./llama-server, expose HTTP API, xong. Không daemon, không model registry, không GUI. Mục tiêu của project là tối đa hoá performance trên mọi loại phần cứng từ Raspberry Pi đến H100.
Ollama wrap llama.cpp trong một daemon, một CLI, một HTTP API kiểu Docker. ollama pull llama3.2 rồi ollama run llama3.2 là xong. Ollama là về DX, không phải về raw speed. Nó thêm một lớp model registry, một lớp daemon quản lý lifecycle, và một format manifest gọi là Modelfile.
LM Studio là desktop app GUI. Bạn click model trong catalog, click download, chat trực tiếp trong app. Phía dưới nó chạy cả llama.cpp lẫn MLX (trên Apple Silicon). Đối tượng là user không quen terminal: PM, domain expert, researcher cần thử nhanh model mà không setup môi trường dev.
vLLM là engine inference focus vào production serving. PagedAttention, continuous batching, prefix caching, tensor parallelism. Khi bạn cần phục vụ nhiều user đồng thời với throughput cao, vLLM là cái duy nhất trong danh sách này thực sự design cho việc đó. Single user thì overkill.
Cách dễ nhớ: llama.cpp là engine, Ollama là DX wrapper cho dev, LM Studio là wrapper cho người không code, vLLM là load balancer cho fleet.
Ollama: zero-friction cho dev
Ollama là cái tôi cài đầu tiên trên mọi máy mới. Lý do đơn giản: 4-5 phút từ download đến first inference, và một HTTP API stable mà mọi tool downstream đều biết cách gọi.
Cài qua installer trên macOS, qua script trên Linux, qua MSI trên Windows. Service chạy nền, expose http://localhost:11434. Pull model bằng tên ngắn (ollama pull qwen2.5-coder:14b), không cần đào URL Hugging Face. Run interactive bằng ollama run, hoặc gọi API trực tiếp.
# Pull và chạy
ollama pull qwen2.5-coder:14b
ollama run qwen2.5-coder:14b
# Hoặc gọi API từ code
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5-coder:14b",
"prompt": "Viết hàm tính fibonacci bằng Python"
}'
Điểm mạnh thực tế:
- Model registry:
ollama.com/librarycó gần như mọi open-weight model phổ biến, đã quantize sẵn nhiều tier (Q4_K_M, Q5_K_M, Q8_0). Không phải đào GGUF. - Modelfile: tự custom system prompt, temperature, context length, lưu thành model mới. Giống Dockerfile nhưng cho LLM.
- HTTP API stable: schema OpenAI-compatible (qua
/v1/chat/completions) và Ollama-native (qua/api/generate). Tool downstream như Open WebUI, Continue, Aider đều support sẵn. - Multi-model: load nhiều model một lúc, hot-swap trong vài giây nếu RAM đủ.
- Cross-platform: macOS (Metal), Linux (CUDA, ROCm), Windows (CUDA). CPU-only cũng chạy được, chậm thôi.
Điểm yếu phải biết:
- Throughput single-user only: dưới concurrent load, Ollama không có continuous batching. Bench thực tế 2026 cho thấy Ollama ~41 tokens/s peak vs vLLM ~793 tokens/s trên cùng hardware khi serving nhiều request song song.
- Quantization tier giới hạn: chủ yếu Q4_K_M default. Nếu bạn muốn AWQ, GPTQ, hoặc fine-tune custom, phải qua llama.cpp trực tiếp.
- Chậm hơn llama.cpp raw: vì thêm một lớp daemon và serialization, throughput single-user khoảng 15-25% chậm hơn
llama-serverthuần. - Less control: không expose mọi flag của llama.cpp, ví dụ
--n-gpu-layerschi tiết,--cache-type-k, custom RoPE.
Khi nào dùng Ollama: dev workflow cá nhân, homelab single-user, làm endpoint backend cho IDE assistant (Continue, Aider, Cursor local), prototype agent loop. Đây cũng là cái tôi recommend nếu bạn vừa bắt đầu, không cần đắn đo.
LM Studio: GUI cho người không terminal
LM Studio là desktop app (Windows, macOS, Linux) với UX kiểu app store. Bạn mở app, browse model, click Download, chat trực tiếp. Không CLI, không config file, không quan tâm GGUF là gì.
Phía dưới nó chạy hai engine song song:
- llama.cpp engine cho GGUF model. Hoạt động trên mọi platform.
- MLX engine trên Apple Silicon. Apple framework native cho ML, throughput ~30-50% cao hơn llama.cpp trên Metal cho nhiều model. Vision input cũng nhanh hơn.
App tự chọn backend phù hợp với hardware. Trên M3 Max bạn có thể load một MLX model và một GGUF model cùng lúc, so output side-by-side.
Tính năng đáng chú ý cho 2026:
- Local API server: bật một switch trong app, LM Studio expose endpoint OpenAI-compatible giống Ollama. Code của bạn không cần đổi gì để switch backend.
- Token probability visualizer: hiển thị xác suất từng token được sample. Tool học cách model “suy nghĩ” rất tốt.
- Continuous batching: từ v0.4.0 (1, 2026) llama.cpp engine support parallel request. v0.4.2 mở rộng sang MLX. Có nghĩa LM Studio không còn là pure single-user nữa, dù vẫn không sánh được vLLM.
- Llmster: từ 0.4.0, có option deploy không GUI cho server. Hữu ích nếu team có user thử model trên laptop của họ rồi muốn push lên server share.
- Model catalog có review: Hugging Face card, parameter count, recommended quant, RAM requirement, hiển thị inline.
Điểm yếu:
- GUI là điểm mạnh và cũng là điểm yếu: không headless friendly. Có llmster nhưng vẫn cảm giác bolt-on.
- Closed source app shell: engine (llama.cpp, MLX) open source nhưng UI và packaging không phải. Một số team enterprise có policy chặn.
- Update cycle: model catalog phụ thuộc app update. Đôi khi model mới ra Hugging Face nhưng catalog chưa có, phải sideload thủ công.
Khi nào dùng LM Studio: team có PM hoặc domain expert muốn thử model mà không học CLI. Researcher so sánh nhiều model side-by-side. Dev personal khi bạn thích GUI hơn terminal. Demo cho khách hàng phi tech.
vLLM: production throughput thật sự
vLLM là engine khác hẳn. Nó không design cho laptop, không design cho single-user. Mục tiêu là serve API LLM cho nhiều user đồng thời với throughput cao và latency thấp.
Hai kỹ thuật làm nên tên tuổi vLLM:
PagedAttention. KV cache của attention thường lãng phí memory vì pre-allocate cho max sequence length. PagedAttention chia KV cache thành block không liền kề, kiểu virtual memory của OS. Kết quả: lãng phí dưới 4%, batch size có thể tăng đáng kể, GPU utilization cao hơn nhiều. Báo cáo 2026 cho thấy vLLM throughput 14-24x cao hơn naive serving nhờ riêng PagedAttention.
Continuous batching. Request mới slot vào batch ngay khi có token slot trống, không phải đợi full batch hoàn thành. Khác với static batching kiểu cũ ở chỗ nó tận dụng GPU tối đa kể cả khi request có độ dài khác nhau.
Cộng thêm prefix caching (cache attention KV cho prompt prefix chung), chunked prefill (tách prompt dài thành chunk), tensor parallelism (split model qua nhiều GPU), AWQ và GPTQ quantization, vLLM trở thành lựa chọn default cho self-hosted LLM API trong 2026.
Setup không phức tạp nhưng nặng:
# Cài qua pip (Linux, CUDA 12+)
pip install vllm
# Serve một model
vllm serve meta-llama/Llama-3.3-70B-Instruct \
--gpu-memory-utilization 0.90 \
--max-model-len 32768 \
--enable-prefix-caching
Endpoint OpenAI-compatible mở ở http://localhost:8000/v1. Client SDK OpenAI gọi thẳng được.
Bench so sánh 2026 cho thấy gap rõ rệt. Trên RTX 4090 với 24B model, peak throughput Ollama ~41 tokens/s, vLLM ~793 tokens/s (gấp ~19 lần). P99 latency peak load Ollama ~673ms, vLLM ~80ms. Gap mở rộng theo concurrent user. Nếu bạn serve 5+ user cùng lúc, vLLM justify được learning curve dốc của nó.
Điểm yếu:
- GPU only: không CPU-only. Cần CUDA hoặc ROCm (ROCm support còn beta cho một số model).
- Linux first: chạy thuần native chỉ Linux. macOS không support, Windows phải WSL2.
- Setup phức tạp: GPU memory utilization, KV cache type, max model length, tensor parallel size, đều phải tune. Không phải plug-and-play.
- Single-user overkill: nếu một mình bạn dùng, vLLM không nhanh hơn llama.cpp. Toàn bộ ưu thế nằm ở concurrent serving.
- Model support hẹp hơn llama.cpp: vLLM hỗ trợ chủ yếu kiến trúc mainstream. Model exotic, fine-tune custom, đôi khi phải đợi vLLM ship support.
Khi nào dùng vLLM: production API LLM nội bộ công ty, multi-tenant agent platform, công ty self-host serve nhiều dev qua chung endpoint, hệ thống RAG có nhiều concurrent query, hoặc batch inference offline (process 100k document).
llama.cpp: foundation, không phải UX
llama.cpp là code C++ chạy LLM trên gần như mọi phần cứng. Tác giả ggerganov bắt đầu project đầu 2023 để chạy Llama 1 trên MacBook, và 3 năm sau nó vẫn là foundation của toàn bộ stack local LLM consumer. Ollama wrap nó, LM Studio dùng nó, LocalAI dùng nó, Jan.ai dùng nó.
Tại sao vẫn dùng llama.cpp trực tiếp khi đã có wrapper:
Raw performance. Không có lớp daemon hay GUI, throughput single-user nhanh nhất trong nhóm. Bench cho thấy llama-server nhanh hơn Ollama ~15-25% trên cùng hardware.
GPU backend đa dạng. 2026 llama.cpp support: CUDA, Metal, Vulkan, ROCm (HIP), SYCL. Vulkan đặc biệt hữu ích nếu bạn có GPU không phải Nvidia/AMD top-tier, ví dụ Intel Arc hoặc card AMD cũ.
Quantization full control. Bạn quyết định Q2_K, Q3_K_S, Q3_K_M, Q4_0, Q4_K_S, Q4_K_M, Q5_K_S, Q5_K_M, Q6_K, Q8_0, F16. Mỗi tier trade off khác giữa quality và size. Wrapper thường khoá vào một-hai tier.
GGUF format. Một file binary chứa weights, tokenizer, metadata, config. Load nhanh, ship dễ, không phụ thuộc framework. Convert từ Hugging Face safetensors qua script Python có sẵn trong repo.
Prebuilt binaries. Trước 2026 phải build từ source cho Windows nếu muốn CUDA. Bản b9196 trở đi (5, 2026) có prebuilt cho Windows hỗ trợ CUDA 13.1, Vulkan, HIP, SYCL. Unzip là chạy.
Workflow điển hình:
# Build (Linux, CUDA)
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j
# Chạy server
./build/bin/llama-server \
-m models/qwen2.5-coder-14b-q4_k_m.gguf \
--port 8080 \
-ngl 99 \
--ctx-size 32768
Endpoint OpenAI-compatible mặc định, frontend HTML built-in để chat ngay.
Điểm yếu:
- DX raw: không model registry, phải tự download GGUF từ Hugging Face. Không daemon, phải tự quản lý process.
- Flag overload: hàng trăm flag tinh chỉnh. Sức mạnh nhưng cũng khó cho beginner.
- Không continuous batching kiểu vLLM: parallel slot có nhưng không bằng vLLM PagedAttention.
- Server modest: tốt cho single-user và small team, không scale như vLLM cho fleet production.
Khi nào dùng llama.cpp trực tiếp: bạn muốn raw performance trên single GPU, bạn muốn custom quantization sâu, bạn deploy edge (Raspberry Pi, Jetson) nơi mỗi MB RAM quý, bạn nghiên cứu kernel optimization, bạn ship app desktop tự đóng gói engine.
Bảng so sánh
| Tiêu chí | Ollama | LM Studio | vLLM | llama.cpp |
|---|---|---|---|---|
| Mục tiêu chính | Dev DX | GUI người không code | Production multi-user | Foundation engine |
| Setup time first inference | 3-5 phút | 5-10 phút (download GUI) | 30+ phút | 15-25 phút (build) |
| Platform | mac, Linux, Win | mac, Linux, Win | Linux (Win WSL2) | mọi nơi |
| GPU backend | CUDA, Metal, ROCm | CUDA, Metal, MLX, Vulkan | CUDA, ROCm (beta) | CUDA, Metal, Vulkan, ROCm, SYCL |
| CPU-only | Có | Có | Không | Có |
| Throughput single-user | 35-40 tok/s | 35-40 tok/s (Metal MLX 50+) | 30 tok/s | 40-50 tok/s |
| Throughput multi-user (peak) | ~41 tok/s | ~50 tok/s (v0.4+) | ~793 tok/s | ~100 tok/s |
| P99 latency peak load | ~673ms | ~500ms | ~80ms | ~300ms |
| Model registry | ollama.com | catalog trong app | Hugging Face | Hugging Face |
| Quantization tier | Q4_K_M default, vài tier khác | GGUF full range, MLX | AWQ, GPTQ, FP8, FP16 | Full Q2-Q8, F16 |
| OpenAI-compatible API | Có (/v1) | Có (toggle) | Có (/v1) | Có |
| GUI | Không | Có | Không | HTML server cơ bản |
| Open source | Có (MIT) | Engine open, shell closed | Có (Apache 2.0) | Có (MIT) |
| Production multi-tenant | Không | Không | Có | Hạn chế |
Số throughput là approximation từ bench public 2026 trên hardware mid-tier (RTX 4090 / M3 Max). Workload thực tế có thể khác.
Recommend theo use case
Bạn vừa bắt đầu local LLM, một mình dùng, không biết chọn gì. Dùng Ollama. 5 phút lên, mọi tool downstream support, đủ tốt cho coding, agent, RAG cá nhân.
Bạn ở team có PM hoặc domain expert muốn thử model trên laptop của họ. Dùng LM Studio. GUI quen thuộc, catalog thân thiện, không cần dạy CLI.
Bạn deploy LLM API nội bộ phục vụ nhiều dev hoặc nhiều user cùng lúc. Dùng vLLM. Throughput multi-user là lý do tồn tại của nó. Đặt sau reverse proxy, expose endpoint OpenAI-compatible, mọi client SDK gọi vào.
Bạn cần raw performance trên single GPU, hoặc deploy edge device, hoặc fine-tune custom quantization. Dùng llama.cpp trực tiếp. Tốc độ tối đa, control tối đa, không lớp wrapper.
Bạn build product ship cho end user, đóng gói engine vào app. Dùng llama.cpp làm engine (như LM Studio làm, như Jan.ai làm). Đừng bundle Ollama daemon vào app installer, model registry sẽ phá UX.
Bạn cần cả hai: Ollama cho dev local, vLLM cho production. Phổ biến. Code agent của bạn dùng OpenAI SDK trỏ vào endpoint compatible. Dev local trỏ http://localhost:11434/v1, staging và production trỏ vào vLLM cluster. Schema giống nhau, không sửa code.
Một combo nữa đáng thử: chạy Ollama như always-on endpoint trên homelab box, mọi tool dev của bạn (IDE assistant, agent CLI, n8n flow) đều gọi vào endpoint đó. Khi cần serve nhiều user hoặc test load, spin vLLM container riêng. Hai endpoint song song không xung đột vì port khác nhau.
Trend 2026 cần để mắt
TurboQuant. Google công bố 3, 2026 thuật toán quantization training-free đạt 3 bits/value cho KV cache, giảm 6x memory cache và tăng 8x speed attention trên H100, không giảm accuracy đo được. llama.cpp đang implement theo paper AISTATS 2026. Native trong llama.cpp dự kiến Q3 2026, Ollama theo sau. Hôm nay Q4_K_M + flash attention vẫn là sweet spot.
MLX Apple Silicon mature. MLX engine 2026 nhanh hơn llama.cpp Metal 30-50% cho nhiều model, vision input đặc biệt mượt. Nếu bạn dev trên Mac, LM Studio (dùng MLX) hoặc mlx-lm trực tiếp đáng cân nhắc thay vì Ollama (vẫn dùng llama.cpp Metal).
vLLM serverless và spot pricing. Một số provider 2026 expose vLLM cluster managed với spot instance, giá rẻ cho batch inference offline. Self-host vẫn cheaper nếu bạn có hardware sẵn, nhưng burst workload có thêm option.
Ollama Turbo Cloud. Ollama đẩy mạnh hybrid local + cloud từ cuối 2025. Model nặng host trên Ollama Cloud, model nhẹ chạy local, cùng SDK. Đây là direction để cạnh tranh với OpenAI và Anthropic API ở dev tier.
Bước tiếp
Bài 4 series này sẽ vào MCP cho local agent. Khi bạn đã có Ollama hoặc vLLM endpoint, làm sao wire agent đọc file, gọi tool, search code, mà không phải viết integration cho từng tool. MCP là USB-C cho agent, và local LLM 2026 đã đủ tốt để chạy agent loop nghiêm túc.
Nếu bạn chưa đọc bài 1 Local LLM 2026, đó là điểm bắt đầu để chọn model. Bài 2 benchmark hardware giúp bạn biết hardware nào chạy ra bao nhiêu tok/s.