llama.cpp
- title
- llama.cpp
- type
- toolbox
- summary
- C/C++ inference engine for GGUF open-weights models, the base most local-LLM tools wrap
- tags
- llm, inference, local-models, cpp
- language
- C/C++
- license
- MIT
- created
- 2026-05-13
- updated
- 2026-05-13
Georgi Gerganov's C/C++ LLM inference engine. The reference implementation for running open-weights LLMs in the GGUF format on CPU and GPU. Most other local-LLM tools (Ollama, LM Studio, koboldcpp, llamafile) wrap it.
What it does
llama.cpp loads quantized model weights (GGUF format), runs forward passes, and serves an OpenAI-compatible HTTP API. The implementation is in plain C/C++ with backend drivers for CUDA, Metal, ROCm, Vulkan, SYCL, and CPU. Quantization formats β Q2, Q3, Q4, Q5, Q6, Q8 at various block layouts β are baked into the file format; you don't need a separate runtime to load Q4_K_M vs MXFP4.
The reason it's the reference implementation: Gerganov writes the architecture support for new models directly, so when a new model drops (Gemma 4, Qwen 3.6, DeepSeek V4), the first place it works is llama.cpp, and everything else inherits.
Why build from source
Pre-built wrappers (Ollama, LM Studio) ship generic binaries that target broad hardware compatibility. They miss architecture-specific optimizations. Vyacheslav reports up to 30% throughput loss running through LM Studio or Ollama compared to llama.cpp built locally against Blackwell tensor cores. On 16 GB VRAM where every token-per-second matters, that gap is the difference between usable and unusable.
Building from source also exposes flags that wrappers hide:
--n-cpu-moe Nβ push expert blocks of N layers to system RAM; the key flag for fitting MoE models in low VRAM (see moe-cpu-offload)-fit/-fitt Nβ newer default that auto-detects MoE vs Dense and picks the offload mode for you, leaving N MB of VRAM free (see moe-cpu-offload)--cache-type-k,--cache-type-vβ KV cache precision (q8_0, q4_0, f16); halving precision halves cost per token (see kv-cache-sizing); thellama-cpp-turboquantfork addsturbo4/turbo3for higher quality at the same byte budget (see random-rotation-quantization)--flash-attn 1β Flash Attention; meaningful speedup on supported hardware--jinjaβ Jinja chat-template rendering for proper tool-call formats; required for agentic harnesses to see the tool list--reasoning off,--reasoning-budget 0β toggle reasoning-mode generation (insufficient alone for Qwen β see thinking-mode-rule-erosion)--spec-type mtp|eagle3|ngram-mod|draftβ speculative decoding (PR #22673 for MTP, #18039 for EAGLE3, #19164 for ngram-mod); see speculative-decoding
Architecture-aware MoE offload
The headline operational feature for low-VRAM users is --n-cpu-moe. It splits a Mixture-of-Experts model on the architecture-aware axis: attention layers stay in VRAM, inactive expert blocks spill to RAM, only fetched over PCIe when the router selects them. This gives 50-60% throughput gains over the naΓ―ve --n-gpu-layers offload on Qwen 3.6 in local-llm-16gb-vram-tests.
Basic server usage
llama-server \
--model "gemma-4-26B-A4B-it-MXFP4_MOE.gguf" \
--ctx-size 32768 \
--n-gpu-layers 999 \
--n-cpu-moe 8 \
--flash-attn 1 \
--cache-type-k q8_0 \
--cache-type-v q8_0 \
--batch-size 512 \
--ubatch-size 512 \
--reasoning off \
--jinja \
--temp 0.7 \
--top-p 0.8 \
--top-k 20 \
--no-mmap
Serves an OpenAI-compatible API on localhost:8080. Agentic harnesses (OpenCode, Cline, Roo Code, etc.) point at it as a custom provider.
Limitations
- No tool-parameter streaming in the OpenAI-style endpoint by default β tool calls buffer and emit atomically. This is one of the local-LLM UX gaps Ronacher complains about and the reason coding agents on llama.cpp feel jerkier than on hosted providers.
- Tuning is empirical. There is no "auto" configuration that picks
--n-cpu-moe, batch sizes, or quant choice for you. The community-maintained MoE models all want slightly different settings. - No first-class support for non-text modalities β image and audio LLMs need llava-cpp, whisper.cpp, or model-specific forks.
Related
- mixture-of-experts β architecture llama.cpp's MoE features target
- llm-quantization β Q4_K_M, MXFP4, UD-Q4_K_XL formats llama.cpp loads
- OpenCode β agent harness that pairs cleanly with llama.cpp
- lucumr-local-models β Ronacher's case for
ds4.c-style narrow alternatives over generic GGUF runners
Repo: https://github.com/ggml-org/llama.cpp Β· ~96k stars Β· MIT
- ik_llama.cpp
- msgvault
- OpenCode
- Local LLMs Deep Dive β Quants, MoE Offload, REAP, ik_llama, Speculative Decoding
- Coding-Agent Tests of Local LLMs on 16 GB VRAM
- I Want Local Models to Work
- MoE CPU Offload (`--n-cpu-moe`)
- 80 tok/s + 128K Context on 12GB VRAM β Qwen3.6 + MTP
- Speculative Decoding
- Preferring Local OSS LLMs
- Unsloth