Ollama vs vLLM in November 2026: single-user speed, concurrency, formats and hardware
For one user, Ollama and vLLM are close: on an RTX 5090 running Qwen3.8-27B at 4-bit, vLLM 0.31.0 decoded at 85.7 tok/s and Ollama 0.35.1 at 76.8 tok/s in a test published in October 2026. Under load they are not close: at 32 concurrent requests the same card gave 936 tok/s in total on vLLM and 74 tok/s on Ollama, with Ollama's first token arriving after 54 seconds. Red Hat found the same pattern on an A100 (793 against 41 tok/s peak). Pick Ollama for one person on Windows, macOS or a single card, and vLLM for a shared Linux endpoint. Versions current on 7 November 2026: Ollama v0.40.15 and vLLM v0.33.0.
| Question | Ollama | vLLM |
|---|---|---|
| Latest release (7 Nov 2026) | v0.40.15, 3 Nov 2026 | v0.33.0, 2 Nov 2026 |
| One request, RTX 5090, Qwen3.8-27B 4-bit | 76.8 tok/s (129.7 with its default MTP draft) | 85.7 tok/s (135.3 with MTP) |
| 32 requests, same card, total | 74 tok/s, 54.1 s to first token | 936 tok/s, 2.3 s to first token |
| Parallel requests per model by default | 1 (OLLAMA_NUM_PARALLEL) | Continuous batching up to --max-num-seqs |
| Operating systems | Windows, macOS, Linux | Linux (WSL on Windows, community plugin on Mac) |
| Oldest NVIDIA GPU | Compute capability 5.0 | Compute capability 7.5 |
| Main weight formats | GGUF; MLX builds on Apple silicon | Safetensors: FP8, NVFP4, MXFP4, AWQ, GPTQ, more |
| Tool calling | Built in, per model template | Needs --enable-auto-tool-choice and a parser |
Speed rows: ComputingForGeeks, rented cards, October 2026, vLLM 0.31.0 and Ollama 0.35.1, 474-token prompt, 256 output tokens, thinking off. Other rows from the Ollama and vLLM docs and GitHub releases pages, read 7 November 2026. None of these numbers are GPUwerk measurements.
How much faster is vLLM than Ollama under load?
Between 8 and 28 times in the published tests, depending on card and model, once more than a handful of requests arrive at once. The table collects the two tests that ran both engines on the same hardware with the same model.
| GPU and model | Engine | 1 request, tok/s | 32 requests, total tok/s | TTFT at 32 | Source | Date |
|---|---|---|---|---|---|---|
| RTX 5090 32 GB, Qwen3.8-27B 4-bit | vLLM 0.31.0 | 85.7 | 936 | 2.3 s | ComputingForGeeks | 2026-10-06 |
| RTX 5090 32 GB, same | llama.cpp (tag v0.6.0) | 77.8 | 369 | 6.6 s | ComputingForGeeks | 2026-10-06 |
| RTX 5090 32 GB, same | Ollama 0.35.1 | 76.8 | 74 | 54.1 s | ComputingForGeeks | 2026-10-06 |
| RTX 4090 24 GB, same | vLLM 0.31.0 | 54.3 | 300 | 8.6 s | ComputingForGeeks | 2026-10-06 |
| RTX 4090 24 GB, same | Ollama 0.35.1 | 39.9 | 39 | 101.7 s | ComputingForGeeks | 2026-10-06 |
| L40S 48 GB, same | vLLM 0.31.0 | 43.7 | 554 | 3.0 s | ComputingForGeeks | 2026-10-06 |
| L40S 48 GB, same | Ollama 0.35.1 | 20.0 | 20 | 200.3 s | ComputingForGeeks | 2026-10-06 |
| A100 40 GB, Llama 3.1 8B FP16 | vLLM 0.9.1 | n/a | 793 (peak, 1 to 256 users) | n/a | Red Hat | 2025-08-08 |
| A100 40 GB, same | Ollama 0.9.2 | n/a | 41 (peak) | n/a | Red Hat | 2025-08-08 |
ComputingForGeeks ran Ollama with OLLAMA_NUM_PARALLEL=32, llama.cpp with -np 32 and vLLM with --max-num-seqs 32; vLLM used a RedHatAI INT4 (W4A16) checkpoint, the others Q4_K_M GGUF. Red Hat used GuideLLM 0.2.1 with 300-second runs and reports P99 latency at peak of 80 ms for vLLM against 673 ms for Ollama. Third-party figures, read 7 November 2026.
The mechanism is the scheduler. vLLM runs continuous batching: new requests join the running batch at every step, so the cost of reading the weights from memory is shared by everyone in the batch. Ollama gives each loaded model a fixed number of parallel slots, one by default according to the Ollama FAQ, and queues the rest (up to 512 requests before it returns a 503). Red Hat raised Ollama to 32 parallel slots, the highest stable value on its A100, and throughput still plateaued far below vLLM's. GPUwerk's own vLLM 0.27.1 run on one DGX Spark shows the same batching curve: Qwen3-Coder-30B-A3B went from 80.9 tok/s for one request to 3,235 tok/s in total at 256 concurrent requests (benchmarks page, 2 September 2026).
One caveat cuts the 5090 result down to size. The ComputingForGeeks author notes that Ollama 0.35.1 ignored the parallel setting for the hybrid Qwen3.8 architecture and served one request at a time, which is why its total stayed flat at 74 tok/s. Ollama's v0.40.15 release notes (3 November 2026) say recurrent and vision GGUF models can now handle more than one request at a time. I have not seen a re-test, so expect the gap on hybrid models to shrink somewhat. Red Hat's dense Llama result says it will not close.
The same split shows up on a DGX Spark, where Ollama stayed at 42.5 tok/s with 8 users on gpt-oss-120b while vLLM reached 116 to 153; the GB10 engine guide has those numbers and the Spark-specific build steps.
Is Ollama slower for a single user?
Slightly, and the difference is mostly the bundled runtime version, not the design. On the RTX 5090, Ollama decoded at 76.8 tok/s against 77.8 for upstream llama.cpp and 85.7 for vLLM. On the L40S, though, Ollama's bundled runtime gave 20.0 tok/s while upstream llama.cpp with the same flags gave 39.1, so an Ollama release that lags upstream can cost half your speed on some cards.
A quick bandwidth check shows how close all three run to the hardware. Decode reads every weight once per token, so the ceiling is bandwidth divided by model size. By my calculation: 1,792 GB/s (the RTX 5090's bandwidth per NVIDIA's spec table) divided by the 16.5 GB Q4_K_M file gives about 109 tok/s. vLLM reached 79% of that, llama.cpp 72% and Ollama 71%. The vLLM checkpoint is a different 4-bit build (19.5 GB on disk, including parts not read every token), so treat the vLLM percentage as approximate.
Speculative decoding moves single-user numbers more than the engine choice does. Ollama's library build of qwen3.8:27b ships a multi-token-prediction (MTP) draft that is on by default, and with it Ollama reached 129.7 tok/s on the 5090; vLLM with MTP enabled reached 135.3. If you compare engines, compare them with drafting either on in both or off in both.
How do Ollama's concurrency settings change memory?
Each parallel slot gets its own context, so memory for the KV cache grows with slots times context length. The Ollama FAQ states it directly: required memory scales with OLLAMA_NUM_PARALLEL × OLLAMA_CONTEXT_LENGTH. The context-length docs add that the default context depends on VRAM: 4k tokens under 24 GiB, 32k from 24 to 48 GiB, and 256k at 48 GiB or more.
A worked example for a 24 GB RTX 4090 and Qwen3.8-27B. The model's config.json has 64 layers, but only 16 are full attention (the other 48 are linear attention with a small fixed state), with 4 KV heads of dimension 256.
- KV bytes per token at f16: 2 (K and V) × 16 layers × 4 heads × 256 × 2 bytes = 65,536 bytes, or 64 KiB.
- One slot at Ollama's 32k default: 32,768 × 64 KiB = 2 GiB.
- Four slots: 8 GiB. With the 17 GB weights that is about 25 GB, more than the card has, so Ollama would push layers to the CPU.
- Four slots with OLLAMA_KV_CACHE_TYPE=q8_0, which the FAQ says halves KV memory: 4 GiB, about 21 GB in total, which fits with little room to spare.
vLLM handles the same problem differently: it reserves a fraction of GPU memory up front (0.92 by default unless its newer extensible KV cache is on) and fits as many sequences into that pool as their actual lengths allow, so a short request does not hold a full 32k reservation. Run ollama ps after loading: the CONTEXT column shows what Ollama allocated and PROCESSOR should read 100% GPU.
Which formats, APIs and multi-GPU modes does each support?
vLLM supports more formats and parallelism modes; Ollama supports more operating systems and older GPUs. The details as of 7 November 2026:
| Feature | Ollama | vLLM | Source |
|---|---|---|---|
| NVIDIA GPUs | Compute capability 5.0+, driver 550+; RTX 50 (12.0) and GB10 (12.1) listed | Compute capability 7.5+; CUDA 13.0 builds only from v0.33.0 | Ollama GPU docs, vLLM install docs |
| Other accelerators | AMD ROCm v7, Vulkan, Apple Metal and MLX | AMD ROCm 6.3+, Intel XPU, TPU, Apple via vllm-metal | Same |
| Weight formats | GGUF and safetensors import; MLX tags (nvfp4, mxfp8, bf16) on Apple silicon | FP8, NVFP4, MXFP4, AWQ, GPTQ, Marlin kernels, bitsandbytes, GGUF | vLLM quantization docs |
| Multi-GPU | Loads on one GPU if it fits, else spreads layers across all GPUs | Tensor and pipeline parallel | Ollama FAQ, vLLM docs |
| OpenAI API | /v1/chat/completions, /v1/completions, /v1/embeddings, /v1/responses (stateless), audio | OpenAI-compatible server (chat, completions, embeddings) | Ollama OpenAI docs |
| Anthropic Messages API | Yes, /v1/messages | Not in the vLLM docs pages I read | Ollama Anthropic docs |
| Tool calling | tools field supported, tool_choice not | --enable-auto-tool-choice plus one of 30+ parsers; tool_choice "required" since 0.8.3 | vLLM tool calling docs |
| Model source | ollama pull from its library, or import | Any Hugging Face repo id | Docs |
Read 7 November 2026. vLLM's quantization table has columns up to Hopper and no Blackwell column, so check GitHub issues for RTX 50 kernel status.
The tool-calling row matters more than it looks. Ollama applies the right template and parser for models in its library without flags. vLLM returns tool calls as plain text unless you start it with the parser that matches the model family, which is the most common reason an agent "ignores" its tools on a fresh vLLM install. The sibling article on open models for tool calling lists the parser per family.
Which one runs on a Mac, on Windows, or on a DGX Spark?
On a Mac or a Windows PC, Ollama is the practical choice; on GB10 both run, with vLLM ahead for teams. Ollama moved its Apple silicon backend to MLX: a preview in version 0.19 (30 March 2026) and the default for supported architectures from v0.40.0 (25 September 2026). In the launch post, Qwen3.5-35B-A3B went from 58 to 112 tok/s decode and from 1,154 to 1,810 tok/s prefill when moving from the Q4_K_M llama.cpp path to NVFP4 on MLX, on a Mac the post does not name (it asks for more than 32 GB of memory).
vLLM does not run natively on Windows; its docs point to WSL. On a Mac it needs vllm-metal, a community-maintained plugin with MLX underneath, whose newest named release is v0.28.0 (September 2026) with concurrent serving. It works, but it is not where vLLM's kernel work lands first. The DGX Spark vs Mac Studio page covers the hardware side of that choice.
On a DGX Spark, both engines run on ARM64 with the GB10's sm_121 GPU, but vLLM needs the CUDA 13 container rather than a pip install; the vLLM on DGX Spark page explains why.
When should you pick Ollama, vLLM or llama.cpp?
The number of people sending requests at the same moment decides it, more than the GPU does.
| Situation | Pick | Why |
|---|---|---|
| One person, laptop or desktop, any OS | Ollama | Installer on every OS, MLX on Mac, memory fit handled for you, single-user speed within about 12% of vLLM on the 5090 |
| A coding agent for one developer | Ollama with the MTP build | 129.7 tok/s on the 5090 test; set context to 64k or more, as Ollama's docs advise for agents |
| 2 to 8 users on a 24 GB card | llama.cpp server | 306 tok/s at 32 requests on the RTX 4090 against vLLM's 300; ComputingForGeeks' own pick for several users on a 24 GB card |
| A shared endpoint for a team | vLLM | 936 against 74 tok/s at 32 requests on the 5090; time to first token stays in seconds |
| Model bigger than one GPU | vLLM, tensor parallel | Ollama only spreads layers, so GPUs take turns |
| GTX 10-series or other pre-Turing card | Ollama | vLLM needs compute capability 7.5 |
My own rule: if I am the only one sending requests, I run Ollama or llama.cpp and stop thinking about it. The moment a second person or an automated pipeline shares the endpoint, I switch to vLLM, because a 54-second first token is a broken product, whatever the throughput chart says. Neither engine has user accounts, so a team setup also wants Open WebUI for people and a gateway such as LiteLLM for per-user keys.
How do you run the same model on both and compare fairly?
Use the same model at the same bit width, turn speculative decoding off in both or on in both, disable thinking, and measure time to first token as well as tokens per second. Ollama with four slots and a quantized KV cache:
OLLAMA_NUM_PARALLEL=4 OLLAMA_KV_CACHE_TYPE=q8_0 OLLAMA_FLASH_ATTENTION=1 ollama serve
ollama pull qwen3.8:27b
ollama ps
vLLM in a fresh Python environment, following its install docs, with the tool parser on:
uv venv --python 3.12 --seed --managed-python
source .venv/bin/activate
uv pip install vllm --torch-backend=auto
vllm serve <hf-repo-of-a-4-bit-build> \
--max-model-len 32768 \
--max-num-seqs 32 \
--enable-auto-tool-choice --tool-call-parser <parser-for-the-model>
On a 32 GB card the exact checkpoint and flags matter (the vLLM recipe for Qwen3.8-27B on one 5090 needs --enforce-eager to fit), so the full command and the known sm_120 issues are in the separate guide to vLLM on an RTX 5090. Both servers then answer on an OpenAI-style /v1 endpoint (Ollama on port 11434, vLLM on 8000), so the same load script can hit both. On a DGX Spark specifically, install steps and settings for Ollama are in Ollama on a DGX Spark.
FAQ
Is vLLM faster than Ollama?
Under load, yes, by a wide margin. On one RTX 5090 with Qwen3.8-27B at 4-bit, vLLM 0.31.0 produced 936 tok/s in total at 32 concurrent requests against 74 for Ollama 0.35.1 (computingforgeeks, October 2026). For a single request the gap was small: 85.7 against 76.8 tok/s. Red Hat measured a peak of 793 against 41 tok/s on an A100 in 2025.
Is Ollama good enough for a team?
For two or three light users it can be, if you raise OLLAMA_NUM_PARALLEL (default 1 per the Ollama FAQ) and budget memory for it, because memory scales with parallel slots times context length. For a shared endpoint with many users, published tests show time to first token climbing to 54 seconds at 32 requests on an RTX 5090, so vLLM is the better fit.
Does vLLM run on Windows or a Mac?
Not natively on Windows: vLLM's installation docs say it needs Linux and suggest WSL. On Apple silicon, vLLM runs through vllm-metal, a community-maintained plugin using MLX, whose newest named release was v0.28.0 in September 2026. Ollama installs natively on Windows 10 22H2 or newer, macOS 14 or newer and Linux.
Which quantization formats do Ollama and vLLM support?
Ollama runs GGUF files (Q4_K_M, Q8_0 and similar) and, on Apple silicon, MLX builds such as NVFP4 and MXFP8 tags in its library. vLLM loads Hugging Face safetensors checkpoints in FP8, NVFP4, MXFP4, AWQ, GPTQ, bitsandbytes and other formats, plus GGUF on supported GPUs, per its quantization docs (checked 7 November 2026).
What are the latest Ollama and vLLM versions?
On 7 November 2026 the newest Ollama release on GitHub is v0.40.15, published 3 November 2026. The newest vLLM release is v0.33.0, published 2 November 2026, which ships CUDA 13.0 wheels and images only and moves to PyTorch 2.14.0. Ollama shipped six releases between 23 October and 3 November 2026 and vLLM three since 5 October, so check the releases pages before you benchmark.
Sources
Every figure above is attributed to its source in the sentence or table where it appears. Pages were read on 7 November 2026 unless a date says otherwise.
- Releases · ollama/ollama, GitHub, 2026-11-03
- Releases · vllm-project/vllm, GitHub, 2026-11-02
- Ollama vs. vLLM: performance benchmarking (title shortened), Red Hat Developer, 2025-08-08
- Ollama vs vLLM vs llama.cpp: Speed Benchmarked, ComputingForGeeks, 2026-10-06
- FAQ, Ollama docs
- Context length, Ollama docs
- Hardware support, Ollama docs
- OpenAI compatibility, Ollama docs
- Anthropic compatibility, Ollama docs
- Ollama is now powered by MLX on Apple Silicon in preview, Ollama blog, 2026-03-30
- GPU installation, vLLM docs
- Quantization, vLLM docs
- Tool calling, vLLM docs
- Engine arguments, vLLM docs
- vllm-project/vllm-metal, GitHub
- Qwen/Qwen3.8-27B config.json, Hugging Face
- Compare GeForce graphics cards, NVIDIA