server
Open source
free (OSS, Apache 2.0)
4.8/5

vLLM

High-throughput inference engine with PagedAttention, continuous batching, and tensor + pipeline parallelism. The reference deployment runtime when you've outgrown llama.cpp / Ollama for production serving. Backed by Anyscale + UC Berkeley.

By Eruo Fredoline·Last verified Oct 7, 2026·50,000 GitHub stars

Overview

What vLLM actually is

vLLM is the production-default open-source LLM serving engine in 2026. Born out of UC Berkeley's Sky Computing lab and now maintained by Anyscale + a wide industry contributor base, it is the runtime almost every team reaches for once they've outgrown Ollama or llama.cpp and need to actually serve concurrent users without their throughput collapsing.

The single technical idea that put vLLM on the map is PagedAttention — managing the KV-cache in fixed-size blocks the way an OS pages physical memory. That one insight, plus continuous batching, plus competent tensor-parallel implementations, plus a near-OpenAI-shaped HTTP API, is what differentiates a "real" inference server from a single-stream toy.

If you are running a local inference service that more than one person hits — a team chat backend, an internal coding-assistant gateway, a RAG API — vLLM is almost certainly the right answer.

Where it fits in the stack

vLLM lives at the server layer of any serious local-AI deployment:

  • Frontend / clients: Open WebUI, LibreChat, AnythingLLM, Continue.dev, or any OAI-compatible app
  • Server: vLLM exposes http://host:8000/v1 with a near-OAI-shape API
  • Engine: vLLM's own CUDA kernels (PagedAttention, FlashAttention 2/3 integration, MoE kernels)
  • Hardware: NVIDIA CUDA primary, AMD ROCm partial, Intel Gaudi via plugin, others experimental

It is not the right layer for a single-user laptop with intermittent inference (use Ollama) and not the right layer when single-stream latency dominates throughput (use ExLlamaV2 or TensorRT-LLM on H100). It is the right layer for "multiple users hit the same model concurrently and I need predictable tail latencies."

Best use cases

  • Internal team coding-assistant backend. Pair with Qwen 2.5 Coder 32B AWQ-INT4 on a single RTX 4090 or RTX 5090 and serve a 5-15 person dev team comfortably.
  • Multi-tenant RAG gateway. Continuous batching turns concurrent RAG requests with overlapping prefixes into roughly free throughput.
  • Cost-controlled OpenAI replacement. Drop vLLM behind an existing OAI-compatible client, point the base URL at it, save the per-token spend.
  • Production-grade dual-GPU serving. Tensor-parallel across 2× RTX 3090 or 2× 4090 for 70B-class models with usable concurrent throughput.
  • Datacenter rollouts. H100 SXM clusters with NVLink — vLLM is the most common engine on the rented-GPU market.

OS support

OS Quality Notes
Linux (Ubuntu 22.04 / 24.04) excellent reference platform
Linux (Docker) excellent the production-default deployment
Windows native unsupported no upstream support
Windows (WSL2) partial works but not what vLLM is tested against
macOS unsupported CUDA-first; Metal path is experimental at best

If you are on Windows and want vLLM-class throughput, your real options are WSL2 (acceptable) or a dedicated Linux box (recommended).

Hardware / runtime support

  • NVIDIA CUDA — first-class. Ampere (3090, A100), Ada (4090, L40S), Hopper (H100, H200), Blackwell (5090, B200) all work.
  • AMD ROCm — supported on MI300X for production, RDNA3 consumer cards (RX 7900 XTX) are workable but rougher.
  • Intel Gaudi — supported via the vllm-hpu plugin path; the canonical Gaudi inference engine.
  • Apple Silicon — experimental, not the recommended path. Use MLX-LM.
  • Multi-GPU — tensor-parallel and pipeline-parallel both supported. TP works well over PCIe; pipeline-parallel is the right call for slow interconnects.

For the multi-GPU strategy decision tree see /guides/running-local-ai-on-multiple-gpus-2026.

Model / quant format support

Wider than the casual user expects:

  • FP16 / BF16 — reference baseline
  • AWQ-INT4 — the production sweet spot for 32B-class on consumer cards
  • GPTQ-INT4 — supported, slightly slower kernels than AWQ
  • FP8 (E4M3 / E5M2) — Hopper / Blackwell only, the canonical datacenter quant
  • GGUF — partial; works but slower than the native quants — use llama.cpp for GGUF
  • EXL2 — unsupported; that's ExLlamaV2 territory

For the format-vs-runtime cross-product see /systems/quantization-formats.

Setup path

The Docker path is the production default:

docker run --gpus all -p 8000:8000 \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  vllm/vllm-openai:latest \
  --model casperhansen/llama-3.1-8b-instruct-awq

The pip path for development:

pip install vllm
vllm serve casperhansen/llama-3.1-8b-instruct-awq --port 8000

That gives you an OpenAI-compatible /v1/chat/completions endpoint immediately.

What breaks first

  1. VRAM at concurrent load. --gpu-memory-utilization 0.9 is fine on a quiet card but with 16 concurrent users hitting long-context prompts you OOM. Set it to 0.85 and budget for KV-cache.
  2. Wrong CUDA wheel for the driver. vLLM ships separate wheels for CUDA 11.8 / 12.1 / 12.4. Mismatched driver vs wheel = silent CPU fallback or load failure.
  3. MoE models without the right kernel. New MoE architectures (Qwen3-MoE, DeepSeek-V3 lineage) sometimes need a vLLM minor version bump before they work.
  4. Tensor-parallel on heterogeneous GPUs. TP requires identical cards. 1× 3090 + 1× 4090 will not work as a TP-2 pair.
  5. AMD ROCm path drift. Consumer RDNA3 + vLLM is workable on Ubuntu 24.04 + ROCm 6.x but real-world reliability lags the CUDA path. See /errors/rocm-device-not-found.

Alternatives by intent

If you want… Reach for
Single-stream throughput king on consumer NVIDIA ExLlamaV2
Friendlier ops, single user Ollama or LM Studio
Better KV reuse on agent workloads SGLang
Maximum H100 / H200 throughput TensorRT-LLM
Apple Silicon native MLX-LM
GGUF-only deployment llama.cpp llama-server

Best pairings

  • Open WebUI / LibreChat — drop the OAI-compatible URL in, multi-user chat over a vLLM backend
  • AnythingLLM — workspace-RAG frontend pointed at vLLM
  • RTX 4090 + AWQ-INT4 32B — the homelab production default
  • H100 SXM + FP8 — the rented-GPU production default
  • Continue.dev for IDE-side coding — same OAI-shape config

Who should avoid vLLM

  • Single-user laptops. Overkill; use Ollama.
  • Apple-only fleets. Wrong stack; use MLX-LM.
  • GGUF-only workflows. Possible but not what vLLM optimizes; stick with llama.cpp.
  • Operators with no Linux experience. Production vLLM is a Linux deployment; if that's a bridge too far, run Ollama on Windows instead.

Related

Setup guidance

Install via pip in a Python 3.10+ venv with CUDA 12.4+: pip install vllm. For production, use the Docker image: docker pull vllm/vllm-openai:latest. Start with vllm serve meta-llama/Llama-3.1-8B-Instruct --port 8000. If you hit CUDA OOM on the first inference request (not on model load), the --gpu-memory-utilization default of 0.9 is too aggressive — drop to 0.85. Verify with curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"meta-llama/Llama-3.1-8B-Instruct","messages":[{"role":"user","content":"Hello"}]}'. First run downloads the model checkpoint from HuggingFace — budget 5–20 minutes for a 70B model on a decent connection. Time-to-first-useful-response from zero: ~10 minutes with Docker and a cached model. vLLM uses its own OpenAI-compatible REST API at /v1/chat/completions and /v1/completions. The Prometheus metrics endpoint is at /metrics by default.

Workload fit

Best for: multi-tenant LLM serving on NVIDIA datacenter GPUs (H100, A100, H200, B200), production API backends with >1 concurrent request sustained, LoRA-swapping serving of many fine-tuned adapters from one base model, speculative decoding pipelines where 1.5–2.5× throughput matters. Not suited for: single-user local chat (use Ollama), CPU-only or Apple Silicon inference (use llama.cpp or MLX-LM), GGUF-centric model ecosystems without conversion, embedding-only workloads (use Text Embeddings Inference). The migration point from Ollama to vLLM: sustained >1 concurrent request or throughput requirements above ~100 tok/s aggregate.

Alternatives

Use vLLM when your workload has sustained multi-request concurrency — its continuous batching and PagedAttention deliver 5–24× throughput over naive HuggingFace generate(). Switch to SGLang when prefix cache hit rate exceeds ~50% (agent loops, stable system prompts) — RadixAttention wins 15–40% there. Use TensorRT-LLM when locked to a single NVIDIA GPU SKU (H100/H200/B200) and you need every microsecond of single-request latency; it wins 15–30% but requires a 2-hour engine compile for large models. Pick Ollama or LM Studio for single-user desktop use — they are simpler and cover CPU/Apple Silicon. Use llama.cpp when you need CPU inference, Apple Silicon, Vulkan, or the broadest GGUF quantization coverage.

Troubleshooting + when to switch

Problem: CUDA OOM on first inference request but model loaded fine. Fix: Lower --gpu-memory-utilization from 0.9 to 0.85. The KV cache needs headroom beyond weight memory. Check actual VRAM usage with nvidia-smi and tune down until stable. Problem: Requests stall at high concurrency. Fix: Enable --enable-chunked-prefill. Long prompts without chunked prefill block the scheduler from interleaving decode steps. Problem: Prefix cache never hits despite identical system prompts. Fix: Any change to the system prompt — including one trailing space — invalidates the cache. Template variable data into user messages instead of modifying the system prompt. Use --enable-prefix-caching explicitly and monitor cache hit rate via Prometheus metrics.

Stack & relationships

How vLLM relates to other entries in the catalog — recommended pairings, alternatives, dependencies, and edges to avoid. Each edge carries a one-line operator note from our editorial team.

vLLM ↔ ecosystem

Recommended stack

  • Commonly deployed with
    Ray Serve

    Ray Serve in front of vLLM is the canonical K8s production pattern — autoscaling replicas, traffic splitting, canary deploys.

  • Commonly deployed with
    Ray Serve

    Ray Serve orchestrates vLLM replicas in K8s. The canonical 'we replaced our OpenAI bill' production stack.

  • Commonly deployed with
    OpenHands

    vLLM is the default inference engine in the canonical OpenHands stack. Continuous batching pays for itself when the agent makes 10+ tool calls per task.

  • Commonly deployed with
    OpenClaw

    Production OpenClaw deployments default to vLLM. Same logic as OpenHands — continuous batching matters for autonomous agent loops.

  • Commonly deployed with
    Ray Serve

    Ray Serve in front of vLLM = the canonical K8s production pattern. Autoscaling replicas, traffic splitting, canary deploys.

  • Commonly deployed with
    AnythingLLM

    AnythingLLM points at any OpenAI-compatible endpoint; vLLM is the production runtime when team size grows past 5 users.

  • Pairs with
    Letta (memory framework)

    Letta drives an inference engine via OpenAI-compatible API. vLLM's continuous batching matters because Letta makes 5-15 retrieval-then-generate calls per task. Same wiring pattern as Mem0.

  • Commonly deployed with
    Goose

    vLLM is the production runtime pairing for Goose. OpenAI-compatible plug-in with no adapter.

  • Pairs with
    Phoenix (Arize AI)

    vLLM exposes OpenInference-compatible spans; Phoenix consumes them directly. The default OSS observability pairing for self-hosted vLLM deployments.

Works with

  • Works with
    AnythingLLM

    Treats vLLM as a generic OpenAI endpoint. The throughput upgrade once you've moved past single-laptop deployment.

  • Works with
    Open WebUI

    Talks to vLLM's OpenAI-compatible endpoint with no adapter. Pairs naturally with the /stacks/rtx-4090-workstation deployment.

  • Works with
    LocalAI

    LocalAI can route to a vLLM backend for production-throughput LLM inference while still serving image/audio/TTS through other backends behind the same endpoint.

Alternatives

  • Competes with
    SGLang

    RadixAttention vs PagedAttention. SGLang wins on heavily-shared prefix workloads (structured generation, agent loops); vLLM wins on diverse prompts. Pick by traffic shape.

  • Competes with
    TensorRT-LLM

    TensorRT-LLM compiles to a fixed engine for one GPU SKU; vLLM runs PyTorch kernels with dynamic batching. Pick TensorRT-LLM if you need every microsecond on Hopper/Blackwell.

  • Competes with
    Text Generation Inference (TGI)

    TGI was the 2023-2024 production default; vLLM ate that lunch through 2024-2025. New deployments default to vLLM unless HF Hub integration matters.

  • Alternative to
    Ollama

    Different category, common confusion. Ollama is for single-user laptops; vLLM is for production GPU serving. They barely overlap.

  • Alternative to
    Petals

    Different category, common confusion. Petals is for 'I cannot fit this model anywhere and don't have a GPU cluster'; vLLM is for 'I have a GPU cluster and need throughput.' Surface the boundary explicitly.

  • Alternative to
    Exo

    Different hardware target. vLLM = NVIDIA/Linux datacenter; Exo = Apple Silicon LAN cluster. Pick by which hardware you already own.

  • Alternative to
    SGLang

    Direct architectural alternative. RadixAttention vs PagedAttention. SGLang wins on shared-prefix workloads (agents, structured generation, RAG with stable instructions); vLLM wins on diverse prompts and ecosystem maturity.

  • Alternative to
    Petals

    Different categories, common confusion. Petals is for 'I cannot fit this model anywhere'; vLLM is for 'I have a GPU cluster.' Surface the boundary explicitly.

Depends on

  • Requires
    llama.cpp

    Not a runtime dependency — but vLLM does NOT replace llama.cpp for CPU / Apple Silicon / edge. Different categories; if your hardware is outside vLLM's wheelhouse use llama.cpp.

Lifecycle

  • Succeeded by
    Text Generation Inference (TGI)

    TGI was the 2023-2024 production default; vLLM ate that lunch through 2024-2025. New deployments default to vLLM unless HuggingFace Hub integration matters specifically.

Avoid pairing with

  • Incompatible with
    MLX-LM

    Different ecosystems entirely — vLLM is GPU/Linux/CUDA, MLX-LM is Apple Silicon/Metal. They don't compete; they don't pair. Listed here so the page graph makes the boundary explicit.

Featured in these stacks

The L3 execution stacks that pick this tool as a recommended component, with the one-line note explaining the role it plays in each.

  • Stack · L3·Workstation tier·Role: Inference engine (production-grade serving)
    Build a local coding-agent stack (May 2026)

    vLLM over Ollama for this stack: continuous batching means an agent making 5-10 concurrent tool calls per task doesn't queue, prefix caching keeps the system prompt resident across iterations, and the OpenAI-compatible API plugs into OpenHands with zero adapter code. Use Ollama only for single-user laptop chat.

  • Stack · L3·Workstation tier·Role: Inference engine (production-grade serving)
    Build an RTX 4090 AI workstation stack (May 2026)

    vLLM over Ollama for the production-serving role on this box — continuous batching matters when 3-5 users hit the same model concurrently, and the OpenAI-compatible endpoint makes Open WebUI / AnythingLLM / OpenHands plug in without adapter code. Keep Ollama installed alongside for ad-hoc model swaps.

  • Stack · L3·Production tier·Role: Inference engine (TP within node, PP across nodes)
    Build a distributed inference homelab stack (May 2026)

    vLLM over SGLang for distributed homelab: better-tested multi-node TP+PP path, broader kernel coverage on Hopper / Blackwell, and the Ray integration is first-class. SGLang's RadixAttention advantage applies but the multi-node story is younger; pick vLLM unless your traffic is heavily prefix-shared agent loops.

  • Stack · L3·Workstation tier·Role: Inference engine
    Build a memory-enabled local agent stack (May 2026)

    vLLM continuous batching matters here: a memory-enabled agent makes 10-30 retrieval-then-generate calls per task. Prefix caching keeps the memory-injection prompt resident across iterations. Use Ollama only if the agent runs at single-user pace.

  • Stack · L3·Workstation tier·Role: Inference engine
    Build a local reasoning-model stack (May 2026)

    vLLM over Ollama for reasoning models: continuous batching matters because reasoning-token emissions are long (a single query can emit 5000+ tokens). Prefix caching helps when batch reasoning-mode queries share system prompts. KV-cache management matters more here than on chat models.

  • Stack · L3·Workstation tier·Role: Inference engine (vision-aware)
    Build a local vision-model stack (May 2026)

    vLLM has first-class vision-language model support as of v0.7+. Image preprocessing happens server-side; the OAI endpoint accepts image URLs and base64 images. Continuous batching matters for vision because image tokenization is more expensive than text.

  • Stack · L3·Workstation tier·Role: Inference engine
    Build a fully offline coding stack (May 2026)

    vLLM with pre-pulled Docker image + pre-staged HuggingFace cache runs entirely offline. Continuous batching matters because the agent makes 5-15 tool calls per task. The OpenAI-compatible API plugs into OpenHands with no adapter.

  • Stack · L3·Workstation tier·Role: Inference engine (production tensor-parallel-2)
    Dual RTX 3090 workstation stack — 70B-class on $1,800 of used GPUs

    vLLM tensor-parallel-2 with --tensor-parallel-size 2 is the canonical configuration. AWQ-INT4 fits 70B in the 48 GB envelope with ~6 GB headroom for KV cache at 8K context. Continuous batching extracts throughput at 4-8 concurrent agent loops; at this scale SGLang's prefix-cache wins are also significant — pick by workload.

  • Stack · L3·Production tier·Role: Inference engine (PCIe-aware tensor-parallel-2)
    Dual RTX 4090 workstation stack — newer-architecture 70B serving without NVLink

    vLLM tensor-parallel-2 with --tensor-parallel-size 2. Verify NVLink is NOT engaged via nvidia-smi — that's expected on 4090. Performance trail vs NVLink-equipped pair is ~10-15% on tensor-parallel decode. SGLang is the better pick when prefix-cache hit rate is high (agent loops with stable system prompts).

  • Stack · L3·Homelab tier·Role: Inference engine (tensor-parallel-4)
    Quad RTX 3090 workstation stack — the prosumer 100B-class ceiling

    vLLM --tensor-parallel-size 4 is the canonical configuration for quad-GPU. NVLink between paired cards (0-1, 2-3); cross-pair traffic goes over PCIe. For maximum single-stream latency, run 2× tensor-parallel-2 replicas instead — counter-intuitive but the cross-pair PCIe overhead at TP-4 dominates.

  • Stack · L3·Production tier·Role: Inference engine (TP-4 + FP8 + MTP)
    4× H100 SXM tensor-parallel workstation — frontier MoE serving reference

    vLLM is the production reference. --tensor-parallel-size 4 with FP8 quants extracts the H100's transformer engine; multi-token-prediction (MTP) head for V4 Pro gives ~1.8× decode throughput. Set --gpu-memory-utilization 0.95 — H100s have generous memory bandwidth headroom.

Featured in these workflows

Full-system workflows that include this tool as part of their service ledger — with the one-line operator note for each.

  • Workflow · System·homelab·Role: Inference engine
    Local coding-agent system

    AWQ-INT4 path lets Qwen 2.5 Coder 32B fit a single 4090 with 32K context plus headroom. Continuous batching handles the agent's tool-call burst pattern.

  • Workflow · System·edge·Role: Inference engine
    Offline RAG pipeline

    Concurrent batching scales to 5-15 users on a single 4090. Ollama works for solo but caps out at one stream.

  • Workflow · System·homelab·Role: Primary inference
    Homelab AI API gateway

    Continuous batching makes this the right backend when N small clients are firing 1-shot requests on overlapping schedules.

  • Workflow · System·research·Role: Inference engine
    Local evaluation lab

    Continuous batching makes harness runs ~3-5× faster than single-stream inference. Reproducibility is solid (deterministic seeds work).

  • Workflow · System·research·Role: Eval inference
    Local fine-tuning workstation

    After training, merge LoRA → load in vLLM → run lm-eval-harness. The same engine that serves production also evaluates fine-tuned models.

Pros

  • PagedAttention is genuinely faster than alternatives
  • Tensor + pipeline parallel out of the box
  • Strong production deployment story

Cons

  • Linux + NVIDIA biased
  • Heavier ops than Ollama
  • Quant support narrower than llama.cpp

Compatibility

Operating systems
Linux
Docker
Kubernetes
GPU backends
NVIDIA CUDA
AMD ROCm (experimental)
Apple Metal (limited)
LicenseOpen source · free (OSS, Apache 2.0)

Runtime health

Operator-grade signals on how actively vLLM is being maintained, how fresh its measurements are, and what failure classes operators have flagged. Every label below is anchored to a real date or count — we never infer maintainer activity we can't show.

Release cadence

Derived from the most recent editorial signal on this row.

Active
Updated Oct 7, 2026

28 days since last refresh · source: lastUpdated

Benchmark freshness

How recent the editorial measurements on this runtime are.

0editorial benchmarks

No editorial benchmarks for this runtime yet.

Community reproduction

Submissions that match an editorial measurement on similar hardware.

0reproduced reports

No community reproductions on file yet.

Ecosystem stability

Editorial rating from RunLocalAI — qualitative, not measured.

4.8/5Editorial

Get vLLM

Frequently asked

Is vLLM free?

Yes — vLLM is free to use and open-source.

What operating systems does vLLM support?

vLLM supports Linux, Docker, Kubernetes.

Which GPUs work with vLLM?

vLLM supports NVIDIA CUDA, AMD ROCm (experimental), Apple Metal (limited). CPU-only operation is also possible but typically slower.

Reviewed by RunLocalAI Editorial. See our editorial policy for how we evaluate tools.

Related — keep moving

Before you buy

Verify vLLM runs on your specific hardware before committing money.