Which GPUs run vLLM
vLLM's installation guide sets the floor at CUDA compute capability 7.5. That is Turing and later. Older cards that still carry plenty of memory do not qualify, which matters when you shop by VRAM alone.
| Architecture | Compute capability | Examples | vLLM |
|---|---|---|---|
| Maxwell, Pascal | 5.x, 6.x | Tesla M60, P4, P40, P100, GTX 10 series | No |
| Volta | 7.0 | TITAN V, V100 | No |
| Turing | 7.5 | T4, RTX 20 series, Quadro RTX 4000/5000 | Yes |
| Ampere | 8.0 / 8.6 | A100, RTX 30 series, RTX A2000/A4000 | Yes |
| Ada Lovelace | 8.9 | RTX 40 series, L4 | Yes |
| Hopper | 9.0 | H100 | Yes |
| Blackwell | 10.0 / 12.0 | B200, RTX 50 series, RTX PRO 6000 | Yes |
The prebuilt wheels target CUDA 12.9 by default, with builds for 12.8 and 13.0. AMD support is limited to the GPUs vLLM lists: Instinct MI200 (such as the MI210), MI300 and MI350, and Radeon RX 7900 and RX 9000, through ROCm 6.3 or later, with prebuilt ROCm wheels for Python 3.12 only. Older Instinct cards such as the MI50 (gfx906) are not on that list.
Sizing VRAM: weights plus KV cache
Weights take parameters times bytes per parameter: about 16 GB for an 8B model at 16-bit, about 5 GB at 4-bit. The rest of the card holds the KV cache, the per-token state of every request in flight. More KV cache means more concurrent requests and longer contexts.
--gpu-memory-utilizationis the fraction of VRAM vLLM claims at start-up, default 0.92. Nothing else should share that GPU.--max-model-lencaps prompt plus output length. By default it comes from the model config; lower it when the full context will not fit.--quantizationselects a quantised checkpoint's method; if unset, vLLM reads it from the model config.--tensor-parallel-sizesplits one model across several GPUs in the same machine. The default is 1.
vLLM is built for throughput under concurrency. For a single user and a single GPU, a lighter runtime like the one on our Ollama page is simpler to run.
Installing and serving
- Install the NVIDIA driver and confirm the card with
nvidia-smi. - Create a virtual environment with
uvand install vLLM with the PyTorch backend chosen automatically, then fetch its kernels. - Start the server on localhost with an API key, and point an OpenAI client at
http://localhost:8000/v1.
uv venv --python 3.12 ~/vllm && . ~/vllm/bin/activate
uv pip install vllm --torch-backend=auto
vllm download-kernels
export VLLM_API_KEY=$(openssl rand -hex 24)
vllm serve Qwen/Qwen2.5-7B-Instruct \
--host 127.0.0.1 --port 8000 \
--gpu-memory-utilization 0.90 \
--max-model-len 16384
The server speaks the OpenAI Completions, Chat Completions, Responses and Embeddings APIs, plus audio transcription and translation for speech models. Existing OpenAI SDK code needs a new base_url and the key. The example's 7B model at 16-bit is roughly 15 GB of weights, so it wants a 24 GB card; pick a 4-bit checkpoint for a 12-16 GB one.
Containers work too: the official image is vllm/vllm-openai. Run it with --gpus all (or the NVIDIA runtime), mount the Hugging Face cache, publish port 8000, and pass --ipc=host or a larger --shm-size, because PyTorch shares data between processes through shared memory, above all for tensor parallelism. Bind the published port to loopback (-p 127.0.0.1:8000:8000); Docker's port publishing bypasses ufw rules.
What --api-key does not protect
vLLM's documentation states that the key authenticates only routes under /v1, /v2 and /inference. Other endpoints on the same HTTP server, /invocations among them, are not authenticated, and the docs advise against relying on --api-key alone.
- Bind vLLM to 127.0.0.1 and publish it through a reverse proxy with TLS that forwards only the paths you use.
- Authenticate at the proxy as well, and rate-limit per key.
- Firewall everything except SSH and the proxy's port.
- Log usage at the proxy; vLLM's own metrics belong on a private interface.
Why a whole GPU
vLLM assumes it owns the card: it allocates most of the VRAM at start-up and keeps it. On our GPU dedicated servers the GPU is passed straight through to your operating system, with no hypervisor, no vGPU slice and no neighbour on the silicon, so the memory vLLM sees is all of it.
Billing is monthly per machine, with no hourly meter and no egress line: the port is unmetered in both directions, so token traffic never becomes a bandwidth bill. Machines are in five cities on a monthly term. For model-by-model sizing, see LLM hosting; for tensor parallelism across several cards, multi-GPU servers.
When vLLM is not the tool
A Pascal or Volta card is below vLLM's supported floor; llama.cpp or Ollama are the tools there. On CPU-only machines, quantised 7-14B models through llama.cpp are the practical route. vLLM earns its complexity when many requests arrive at once.
Questions
What GPU do I need for vLLM?
An NVIDIA GPU of compute capability 7.5 or newer: T4, RTX 20 series and later, A100, L4, H100, B200 and similar. AMD Instinct MI200/MI300/MI350 and Radeon RX 7900/9000 work through ROCm 6.3 or later; older cards such as the MI50 do not. Pascal and Volta cards are below the floor.
Does vLLM run on Windows?
Not natively. vLLM's installation guide lists Linux as the operating system and points Windows users to WSL. On a dedicated server, install Linux.
Why does vLLM use almost all of my VRAM?
It pre-allocates GPU memory for the KV cache. --gpu-memory-utilization sets the fraction it takes, 0.92 by default. Lower it if something else must share the card, at the cost of fewer concurrent requests.
Which port does vllm serve use?
The documentation's client examples connect to http://localhost:8000/v1. Set --host and --port explicitly, and bind to localhost whenever a proxy fronts it.
Is --api-key enough to secure vLLM?
No. It covers only the /v1, /v2 and /inference prefixes, and the docs name /invocations as an unauthenticated route on the same server. Put an authenticating proxy in front.
Can vLLM use more than one GPU?
Yes. --tensor-parallel-size splits a model across GPUs in one machine. Size the model to the combined VRAM and keep the cards in the same server.