Skip to content

vLLM vs llama.cpp vs Ollama (2026): Benchmarks, Hardware and Which to Use

9–14 minutes
Shocked woman beside a gaming PC holding a card with the Ollama logo, text 936 vs 74 tok/s, which one wins

vLLM, llama.cpp and Ollama all run open models on your own hardware, but they are built for very different jobs. Pick the wrong one and you either fight a server tool for a simple chat, or watch a home tool collapse when ten people use it at once.

This guide compares them in plain terms: what each one is for, real benchmark numbers from October 2026, hardware and OS support, model formats, and the exact commands to get each one serving an OpenAI-compatible API.

TL;DR

  • Ollama: easiest. Best for one person on Windows, Mac or Linux. Weak at many users at once.
  • llama.cpp: the engine under many local tools. Most hardware support (CUDA, Vulkan, ROCm, Metal, CPU), best for GPU plus RAM offload, and handles a few users well.
  • vLLM: a production server. Highest throughput with many users (936 tok/s at 32 users on an RTX 5090 in one test), but it needs the model to fit in VRAM and runs on Linux.
  • Simple rule: 1 user = Ollama, a few users or big MoE offload = llama.cpp, many users or an API for a team = vLLM.
  • Latest versions (early Nov 2026): vLLM v0.33.0, Ollama v0.40.12, llama.cpp b12017.

Quick Comparison Table

Ollama llama.cpp vLLM
Best for One person, easy setup Any hardware, offload, small teams Many users, production APIs
Setup Installer, one command Download a binary or build Python install on Linux
Windows Native Native WSL2 or Docker
macOS Native (Metal, MLX) Native (Metal) Plugin only, not the main target
Main format GGUF (Ollama library) GGUF Hugging Face safetensors (FP8, INT4, AWQ, GPTQ and more)
CPU + RAM offload Yes, automatic Yes, fine control Limited, built for VRAM
Many users at once Weak Good Best
Multi-GPU Splits layers Splits layers or rows Tensor and pipeline parallel
OpenAI API Yes (/v1) Yes (llama-server) Yes (vllm serve)
Licence MIT MIT Apache 2.0

What Each Tool Actually Is

Ollama

Ollama is a friendly app and background service. You type ollama run with a model name, and it downloads, loads and chats in one step. It uses llama.cpp and MLX under the hood and adds its own model library.

Recent releases keep adding features. v0.40.11 (24 October) added speech generation on macOS with an OpenAI-style /v1/audio/speech endpoint, and v0.40.12 (27 October) added Liquid AI LFM3 and updated MLX and llama.cpp.

llama.cpp

llama.cpp is the C/C++ inference engine that made local LLMs popular. It gives you llama-cli for chat and llama-server for an API with a built-in web UI. It releases several builds a day, numbered like b12017.

It has the widest hardware support of the three and the finest control over where each part of a model lives, which is why it is the go-to for running big models on modest GPUs.

vLLM

vLLM is a high-throughput serving engine from the Berkeley team behind PagedAttention. It uses continuous batching, chunked prefill and prefix caching to serve many requests at once with little wasted VRAM.

It is what companies and cloud providers use to serve open models. The latest release, v0.33.0 (2 November 2026), ships CUDA 13.0-only wheels and adds new models such as Step-5 Preview.

For a wider look at desktop apps, see my Ollama vs LM Studio vs llama.cpp comparison.

Benchmarks: One User vs 32 Users

These numbers are from a public test by ComputingForGeeks in October 2026, using Qwen3.8-27B at 4-bit on Ubuntu 24.04 with CUDA 13.2. I did not run these myself, but they match what the tools are designed for.

GPU Engine 1 user (tok/s) 32 users total (tok/s) Time to first token at 32 users
RTX 4090 24 GB vLLM 54.3 300 8.6 s
llama.cpp 49.5 306 6.5 s
Ollama (draft off) 39.9 39 101.7 s
RTX 5090 32 GB vLLM 85.7 936 2.3 s
llama.cpp 77.8 369 6.6 s
Ollama (draft off) 76.8 74 54.1 s
L40S 48 GB vLLM 43.7 554 3.0 s
llama.cpp 39.1 241 6.4 s
Ollama (draft off) 20.0 20 200.3 s

What this shows:

  • For one user, all three are close. With its default MTP draft (speculative decoding) on, Ollama was actually the fastest single-user option: 129.7 tok/s on the RTX 5090 and 76.2 on the 4090.
  • With 32 users, vLLM wins clearly on bigger GPUs: 936 tok/s on the 5090, about 2.5x llama.cpp.
  • Ollama served one request at a time for this model, so 32 users meant a long queue (54-200 seconds before the first word).
  • vLLM with MTP reached 135.3 tok/s single-user on the 5090, but it would not start with MTP on the 24 GB 4090.
Note: The engines used different 4-bit files. vLLM used a 19.5 GB INT4 (W4A16) checkpoint, while llama.cpp and Ollama used 16.5-17 GB GGUF files. Results will differ for other models and settings.

Hardware and OS Support

Hardware Ollama llama.cpp vLLM
NVIDIA (CUDA) Yes Yes (CUDA 12 and 13 builds) Yes (CUDA 13.0 wheels from v0.33)
AMD (ROCm) Yes Yes (ROCm 10.0 builds for Linux and Windows) Yes (ROCm 10.0 default)
Vulkan (any GPU) Partial Yes, Windows and Linux No
Intel GPUs Partial Yes (SYCL, OpenVINO) Yes
Apple Silicon Yes (Metal, MLX) Yes (Metal) Through a hardware plugin
CPU only Yes Yes (x64, arm64) Yes, but slow and not its focus
Snapdragon / Android No Yes (CPU, Adreno GPU, Hexagon NPU) No

The big practical point: vLLM is built for Linux. On Windows you run it inside WSL2 or a Docker container. Ollama and llama.cpp both have native Windows builds.

Model Formats and Quantization

  • Ollama and llama.cpp use GGUF files with quants like Q4_K_M, Q5_K_M, Q8_0 and IQ3/IQ4. One file holds the whole model, and they come in many sizes so you can fit almost any GPU.
  • vLLM loads Hugging Face safetensors checkpoints. It supports FP8, MXFP8/MXFP4, NVFP4, INT8, INT4, GPTQ, AWQ, compressed-tensors and more. It can load GGUF, but that is not its strong side.

For vLLM, look for repositories labelled FP8, AWQ, GPTQ or W4A16 (for example from RedHatAI or the model maker). For Ollama and llama.cpp, Unsloth and bartowski GGUF repositories are the usual choice. My best Ollama models list has good starting picks.

VRAM, RAM Offload and Big MoE Models

This is where the tools differ most for home users.

  • vLLM wants the whole model plus its KV cache in VRAM. By default it reserves 90% of GPU memory (the --gpu-memory-utilization setting) and fills the spare space with cache for many users.
  • llama.cpp can split a model between GPU and RAM layer by layer with -ngl, and it can keep MoE experts in RAM with --cpu-moe or --n-cpu-moe while attention runs on the GPU. That is how people run 100B+ MoE models on a 16-32 GB card.
  • Ollama offloads automatically. It is easy, but you get less control than raw llama.cpp.

If you want to run something like Qwen3.8-Flash-Next on a desktop, llama.cpp is the tool. See my Qwen3.8-Flash-Next local guide, plus how much VRAM you need and how much RAM you need for local AI.

How to Start Each One (Commands)

Ollama

  1. Install it from ollama.com (full steps in my Ollama install guide).
  2. Run a model: ollama run <model>, using any tag from the Ollama library page (for example a 4-bit 27B model on a 24 GB card).
  3. The API is already running at http://localhost:11434. The OpenAI-style endpoint is http://localhost:11434/v1.
  4. To allow more than one request at once (for models that support it), set the environment variable OLLAMA_NUM_PARALLEL, for example to 4, and restart Ollama.

llama.cpp

  1. Download a prebuilt release from the llama.cpp GitHub releases page. On Windows with NVIDIA, pick the Windows x64 (CUDA 13) or (CUDA 12) zip. Use Vulkan for AMD or Intel if ROCm or SYCL give you trouble.
  2. Download a GGUF file from Hugging Face.
  3. Start the server with all layers on the GPU and 4 parallel slots:
    llama-server -m model.gguf -ngl 99 -c 32768 -np 4 --port 8080
  4. Open http://localhost:8080 for the built-in chat UI, or use http://localhost:8080/v1 as an OpenAI API.
  5. For a big MoE model, add --n-cpu-moe 20 (raise or lower the number until it fits your VRAM).

The context size set with -c is shared between the -np slots, so 32768 with 4 slots gives each user about 8K tokens.

vLLM (Linux or WSL2)

  1. Create a Python environment, then install with uv as the README shows:
    uv pip install vllm
  2. Optionally download precompiled kernels for faster startup: vllm download-kernels
  3. Serve a model from Hugging Face:
    vllm serve <org>/<model-FP8> --max-model-len 32768, using the exact Hugging Face repository name of the checkpoint you want
  4. The OpenAI-compatible API is at http://localhost:8000/v1.
  5. For two GPUs, add --tensor-parallel-size 2.
vLLM v0.33 note: release wheels and images are now CUDA 13.0 only, and v0.32 dropped Python 3.10. Update your NVIDIA driver and use Python 3.11 or newer before upgrading.

OpenAI-Compatible API and Front Ends

All three speak the OpenAI API, so the same apps work with each. Point the app’s “base URL” at the right address:

Engine Default base URL
Ollama http://localhost:11434/v1
llama.cpp (llama-server) http://localhost:8080/v1
vLLM http://localhost:8000/v1

For a ChatGPT-style interface on top, use Open WebUI. My Open WebUI setup guide shows the Ollama route, and the same “OpenAI connection” setting works for llama.cpp and vLLM.

Which One Should You Use?

Your situation Use
First time running local AI, just want to chat Ollama
Windows gaming PC, one user Ollama or llama.cpp
Model is bigger than your VRAM (MoE offload) llama.cpp
AMD or Intel GPU, or no CUDA llama.cpp (Vulkan, ROCm or SYCL)
Mac Ollama or llama.cpp
2-8 people sharing one GPU llama.cpp with -np
A team API, agents with many parallel calls, or a product vLLM
Renting a cloud GPU to serve users vLLM

If you are renting hardware for vLLM, my cheapest cloud GPU for AI guide compares prices.

Troubleshooting

vLLM: CUDA out of memory at startup

vLLM reserves most of the GPU for cache. Lower --max-model-len (for example to 16384), lower --gpu-memory-utilization to 0.85, or pick a smaller quant. Close other GPU apps first. More fixes in my CUDA out of memory guide.

vLLM will not install on Windows

vLLM targets Linux. Install WSL2 with Ubuntu, install the NVIDIA driver on Windows (not inside WSL), then install vLLM inside WSL. Or run the official Docker image.

vLLM: errors after upgrading to v0.33

The wheels need CUDA 13.0. Update the NVIDIA driver to a version that supports CUDA 13, and make sure you are not on Python 3.10.

Ollama gets very slow with several users

Some models only serve one request at a time in Ollama. Set OLLAMA_NUM_PARALLEL, and if the model still queues, move that workload to llama.cpp or vLLM.

llama.cpp is slow or uses the CPU

You probably downloaded the CPU build or forgot -ngl. Use a CUDA, ROCm or Vulkan build and add -ngl 99. The startup log shows how many layers went to the GPU.

llama.cpp: “failed to allocate” or crashes when loading

Lower -ngl, reduce -c, or for MoE models raise --n-cpu-moe. Check your free VRAM with my GPU VRAM usage guide.

Answers look broken or repeat

Usually a chat template issue. Use the GGUF or checkpoint from the official or a trusted repository, update to the latest build, and avoid very old quants made before a model’s template was fixed.

My Take

For a home PC, start with Ollama. It is the quickest way from zero to a working chat, and with its speculative decoding it is very fast for one person.

Move to llama.cpp when you want to squeeze a big model onto your hardware or share one GPU with a few people. It is the most flexible engine there is.

Choose vLLM when you are serving real traffic: a team, an agent framework firing many calls, or a product. It needs Linux and enough VRAM, but nothing else matches its throughput.

FAQ

Is vLLM faster than Ollama?

For many users at once, yes, by a lot: 936 vs 74 tok/s total at 32 users on an RTX 5090 in one October 2026 test. For a single user they are close, and Ollama with its default speculative decoding can be faster.

Is Ollama just llama.cpp?

Ollama uses llama.cpp (and MLX on Mac) as engines, but adds its own model library, automatic offloading, a background service and a simple CLI and API.

Does vLLM work on Windows?

Not natively. Run it in WSL2 or Docker on Windows. Ollama and llama.cpp have native Windows builds.

Can vLLM run GGUF models?

It can load GGUF, but it works best with safetensors checkpoints in FP8, AWQ, GPTQ or other formats it lists. For GGUF, llama.cpp or Ollama are the better fit.

Which is best for running models bigger than my VRAM?

llama.cpp. It can keep MoE experts in system RAM with --n-cpu-moe while the GPU handles the rest. vLLM expects the model to fit in VRAM.

Which one should I use with an AMD GPU?

llama.cpp is the safest choice, with ROCm and Vulkan builds for Windows and Linux. Ollama also supports many AMD cards, and vLLM supports ROCm on Linux.

Do all three have an OpenAI-compatible API?

Yes. Ollama serves it at port 11434, llama-server at 8080 and vLLM at 8000, all under /v1.

Sources

Free weekly email

Get new AI guides every week

One short weekly email with our newest local AI, ComfyUI and AI tool guides. No spam, no pop-ups, just the good stuff.

Free. Unsubscribe anytime in one click. We only use your email to send this newsletter. See our privacy policy.

Shocked woman beside a gaming PC holding a card with the Ollama logo, text 936 vs 74 tok/s, which one wins