Private AI
vLLM: Serving Open Models to a Team, Setup and Limits
Checked 2026-10-31
Loading poll...
vLLM is an Apache 2.0 inference server that serves open-weight language models from GPUs through an OpenAI-compatible API. It is built for throughput: many users at once on the same hardware. Install it on Linux, run vllm serve <model>, and your apps call port 8000. The latest release we saw is v0.32.0, from 18 October 2026.
At a glance
What it is | High-throughput LLM inference and serving engine |
Licence | Apache 2.0 (GitHub LICENSE) |
Latest release checked | v0.32.0, published 18 Oct 2026 |
OS | Linux. No native Windows; WSL works |
Hardware | NVIDIA CUDA, AMD ROCm 6.3+, Intel XPU, Apple silicon via vLLM-Metal (community), TPU, Intel Xeon CPU |
API | OpenAI-compatible, port 8000 by default |
Models per server | One per process by default |
Core ideas | PagedAttention, continuous batching, chunked prefill, prefix caching |
Best for | Shared servers with concurrent users |
Cost | Free software; you pay for GPUs |
Compare it with the easy option in Ollama vs vLLM. For the one-machine route, see Ollama.
What problem it solves
A language model generates one token at a time, and each request holds a chunk of GPU memory for its cache. A naive server handles requests one after another or wastes memory on cache it reserves but does not use. vLLM's docs describe two core techniques.
PagedAttention. Memory for the key-value cache is managed in pages, in the way an operating system manages RAM. That lets the server pack more concurrent requests into the same VRAM.
Continuous batching. New requests join the running batch as others finish, so the GPU is rarely idle. The docs also list chunked prefill and automatic prefix caching, which reuses work when many requests share the same prompt start, such as a long system prompt.
The practical effect is more requests per second from the same card, which is why vLLM turns up wherever a team shares a model. The docs link a vendor blog that claims large throughput gains from continuous batching. We do not repeat the number, since it depends on workload.
Install
The docs list Linux, and Python 3.11 through 3.14. For NVIDIA GPUs the quickstart uses uv:
uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto
vllm download-kernelsThe download-kernels step installs precompiled kernels that would otherwise be fetched and compiled at startup, which the docs say can add several minutes on Hopper and newer GPUs. AMD GPUs need ROCm 6.3 or above, with prebuilt wheels available. Intel GPUs have basic inference and serving support. On Apple silicon, the docs point to vLLM-Metal, a community-maintained plugin that uses MLX as its compute backend. On Windows, use WSL.
A container route also exists, and most teams prefer it for a server because the version is pinned in a tag. See the Docker section of the install docs for the current image name and flags.
Serve a model
vllm serve Qwen/Qwen2.5-1.5B-Instruct --api-key YOUR_LONG_RANDOM_KEYThis starts an OpenAI-compatible server on http://localhost:8000, hosting one model. Check it:
curl http://localhost:8000/v1/models -H "Authorization: Bearer YOUR_LONG_RANDOM_KEY"Call it from Python with the standard OpenAI client:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="YOUR_LONG_RANDOM_KEY")Two behaviours from the docs matter. First, --api-key, or the VLLM_API_KEY variable, makes the server check keys, and you can pass several. Second, vLLM applies the generation_config.json from the model's Hugging Face repository by default, so sampling defaults may differ from what you expect. Pass --generation-config vllm for vLLM's own defaults.
Tool calling for agents
Coding agents and many apps need the model to call tools. vLLM supports named function calling, plus auto, required and none for tool_choice (the last two as of version 0.8.3). To enable automatic tool choice you pass flags and a parser that matches the model:
vllm serve <model-id> --enable-auto-tool-choice --tool-call-parser <parser>The docs show llama3_json in a Llama example and list parsers for Hermes-format models (hermes) and OpenAI's open models (openai). A mismatch is the usual cause of tool calls that print JSON instead of acting, so confirm the parser on the tool calling page for your model. See self-hosted AI coding assistant.
Multi-GPU
When a model does not fit on one card, the parallelism docs give the recipe:
Situation | Setting |
|---|---|
Fits on one node with several GPUs |
|
Too large for one node |
|
GPU count does not divide the model evenly |
|
The docs advise increasing GPUs and nodes until memory is enough. Multi-GPU buys capacity more than speed, so use it when the model needs it. For sizing, see GPU requirements for LLMs.
Other features
The docs list quantised model support across FP8, MXFP8 and MXFP4, NVFP4, INT8, INT4, GPTQ, AWQ and GGUF, along with compressed-tensors and others. They also list speculative decoding, multi-LoRA serving for dense and mixture-of-experts models, and structured outputs. Which of these your model supports is a per-model question, so check the model card and the vLLM supported-models list.
What it costs to run
vLLM is free. The GPU is the bill. Prices checked on 31 October 2026:
Provider | GPU | Per hour | Example monthly use |
|---|---|---|---|
Runpod Secure | A100 80 GB | $1.79 | 220 h: about $394 |
Runpod Community | H100 SXM | $2.69 | 220 h: about $592 |
Runpod Secure | H100 SXM | $3.99 | 220 h: about $878 |
Lambda | 1x H100 SXM | $4.29 | 220 h: about $944 |
Modal | H100, per second | about $3.95 | 220 h: about $869 |
The 220 hours is an example we chose: 10 hours a day on 22 working days. Left on 24/7 for 30 days, 720 hours, a Runpod Secure A100 is about $1,289 and a Lambda H100 is about $3,089. Some links go through /go/ and may earn us a fee; it never changes our order. For a hosted open-model API instead of a server, Groq lists gpt-oss-120b at $0.15 per million input tokens and $0.60 per million output tokens. See Runpod, Lambda Cloud, Modal and the hosting compare.
vLLM next to Ollama and llama.cpp
vLLM | Ollama | llama.cpp | |
|---|---|---|---|
Licence | Apache 2.0 | MIT | MIT |
Focus | Throughput for many users | Easy local use | Portability and control |
Windows | WSL only | Native | Native |
Models at once | One per process | Several, memory permitting | One per server process |
Setup effort | Higher | Lowest | Medium |
Good first user | A team with a GPU box | An individual | Someone tuning the engine |
More: Ollama vs vLLM and llama.cpp vs Ollama.
Planning capacity before you rent
Capacity planning for a vLLM box has three inputs: the model's weights, the cache per request, and the number of requests you expect at the same moment.
Weights. Use the listed download size as a floor. gpt-oss 120B is listed at 65 GB on Ollama and fits a single 80 GB GPU per its model page, with its mixture-of-experts weights stored in MXFP4. gpt-oss 20B is listed at 14 GB. Qwen3-Coder 30B is 19 GB.
Cache. Whatever memory is left after the weights is the cache budget. On an 80 GB card running the 65 GB model that is roughly 15 GB before overhead, and you also reserve some for activations. vLLM's paged cache uses what is available more efficiently than a naive server, but it cannot create memory.
Concurrency. Count simultaneous requests at peak, not users. Ten developers in chat mode might produce two or three live requests at once. Ten developers running agents might produce eight or nine, each with a long context.
A worked example with numbers we chose, not measurements: a team of eight, half using an agent. At peak, four long agent requests run together. On one 80 GB card with the 120B model, the cache is tight, so you either cap context, reduce parallel requests, or choose the 20B or 30B model and give each request a longer window. If you want both the big model and a long context, a second card, or an H200 with 141 GB listed on Hugging Face's Endpoints page at $5.00 an hour, buys headroom.
The decision is cheaper to make on rented hardware. A day on a Runpod Secure A100 at $1.79 an hour is $42.96 and tells you more than a spreadsheet.
Migrating from Ollama to vLLM
If you started on Ollama, the move is small because both speak an OpenAI-style API.
- Note the model each team member uses and its context length.
- Find the Hugging Face repository for the same model. Ollama tags and Hugging Face names differ, and vLLM loads from Hugging Face by default.
- Start
vllm servewith that model on a GPU host, with an API key. - Change the clients' base URL from port 11434 to port 8000 and add the key. Agents that use Ollama's own provider setting may need to switch to an OpenAI-compatible provider. The Ollama docs show this pattern for OpenCode, with
@ai-sdk/openai-compatibleand abaseURL. - Check tool calling with the right parser before everyone switches.
- Run both servers side by side for a week, then retire the old one.
Differences to expect: vLLM serves one model per process, so each extra model is another process or server. It also does not unload idle models the way Ollama's keep-alive does. The model stays in memory until you stop it.
Observability
A server nobody watches fails quietly. What to watch, in rough order of value:
- GPU memory. If it is near full at idle, the cache budget is too small.
- Queue length and waiting requests. Growth at peak hours means you need more capacity.
- Time to first token. This is what developers feel in the editor.
- Error rate by key. A misconfigured client often shows up as one key with many errors.
- Restarts. A crash loop after a driver update is common enough to alert on.
vLLM exposes an HTTP server you can put health checks against, and your proxy gives you per-key counts. Which metrics endpoints and names the current release exposes is worth checking in the docs for your version.
A deployment checklist
- Linux host with a supported driver, and a GPU that holds the model with cache to spare.
- vLLM installed from a pinned version or container tag.
--api-keyset, proxy and TLS in front, raw port firewalled.--enable-auto-tool-choiceand the right--tool-call-parserif agents will use it.- Context length and parallelism capped to what memory allows.
- A health check and a restart policy.
- Per-key rate limits at the proxy.
- A fallback: a second node, a hosted API with a data agreement, or a plan to wait.
- A named person who owns upgrades.
Securing a vLLM server
The server checks a key if you pass --api-key, and that is all the built-in access control the docs describe. Treat that as a minimum:
- Always set
--api-keywhen the port is reachable from anywhere but localhost. - Put a reverse proxy in front with TLS, and firewall port 8000.
- Use a different key per user or per application at the proxy, so a leaked key can be revoked alone.
- Log request metadata, not full prompts, unless audit rules require them.
- Keep the Hugging Face token for model downloads out of the serving environment where you can.
Operating it
Pin the version. vLLM is moving quickly, and v0.32.0 is the release we saw on 18 October 2026. Upgrade on a schedule, in a staging copy first, and run a handful of real prompts through each model, including a tool-calling one. Watch GPU memory, request queue length and time to first token. If the queue grows at peak hours, add a second replica behind the proxy, or move to a bigger card. Keep the previous container tag so rollback is quick.
When vLLM is the wrong choice
- One user on a laptop. Ollama or LM Studio is simpler.
- A Windows-only team without WSL. vLLM does not run natively there.
- You want many different models switched on demand. vLLM serves one model per process by default, so it suits a fixed model better than a library.
- No one to run it. A hosted API removes the operations burden.
Our take
Pick vLLM when the question is "how many people can this GPU serve". Its documentation is clear about the parts that matter to a team: an OpenAI-compatible API, API keys, tool calling and multi-GPU settings. Start on one rented 80 GB card, measure real concurrency, and only then decide whether to buy. Keep it behind a proxy. These judgements come from the docs and pricing pages in the frontmatter, and we did not benchmark it.
Related pages
Questions
What is vLLM used for?
Serving language models to many users at once from GPUs, through an OpenAI-compatible API. It uses PagedAttention and continuous batching to raise throughput.
Does vLLM run on Windows or Mac?
Not natively on Windows; use WSL. On Apple silicon the docs point to vLLM-Metal, a community-maintained plugin.
vLLM or Ollama?
Ollama for one person or a small group who want an easy install. vLLM when many requests arrive at once and you want to get more from the GPU.
Is vLLM free?
Yes. The repository is Apache 2.0. You pay for the GPU you run it on.
Loading poll...