llama.cpp vs vLLM
llama.cpp — the engine most other tools wrap. Widest format and hardware support, and where new architectures land first. vLLM — built for serving many concurrent requests. Much better throughput under load, and the wrong tool for one person chatting. They share no model format, so switching means downloading again.
Side by side
| llama.cpp | vLLM | |
|---|---|---|
| Model formats | GGUF | safetensors, AWQ, GPTQ, FP8, compressed-tensors |
| KV cache quantization | yes | yes |
| CPU offload | yes | no |
| MoE expert offload | yes | no |
| Multi-GPU | Layer split by default — capacity adds up, bandwidth does not. Row split available. | Tensor parallelism — genuinely aggregates bandwidth, unlike a layer split. |
| Concurrency | Single-user focused. A server exists but is not built for heavy concurrency. | This is the entire point. Hundreds of concurrent requests on one GPU. |
| Platforms | Linux, macOS, Windows | Linux |
Choose llama.cpp if…
Anyone who wants the newest architectures, the most quantization choices, or the most control over memory.
It is a command-line tool with a lot of flags. The defaults have improved considerably — it now sizes offload automatically — but it expects you to know what you are asking for.
Choose vLLM if…
Serving an application or a team, where many requests arrive at once.
It does not read GGUF in any practical sense, wants the whole model resident, and has no useful CPU offload. For a single user on a consumer card it will usually be slower and pickier than llama.cpp.
Why there is no speed comparison here
We have not benchmarked these against each other, so we will not rank them on speed. Most of them wrap the same engine, which makes the differences that matter capability rather than throughput — and where a real speed gap exists it usually comes from configuration, such as how much of the model fits on the GPU and whether the cache is quantized, rather than from the runtime itself.