Blog/vLLM on RTX 5090
Inference engines · November 2026

vLLM on an RTX 5090 (sm_120) in November 2026: versions, Docker, quantization kernels, 32 GB flags and fixes

By Samuel Seidel · Published November 7, 2026 · Sources checked November 7, 2026

vLLM runs on the RTX 5090 (compute capability 12.0, "sm_120") with the stock release: as of 7 November 2026 that is v0.33.0, published 2 November 2026, whose wheels and Docker images are built for CUDA 13.0 only and bundle PyTorch 2.14.0, so the card needs a driver from NVIDIA's R580 branch or newer. FP8, NVFP4 (W4A4), AWQ and GPTQ all have working kernels on sm_120; weight-only NVFP4 checkpoints and NVFP4 mixture-of-experts layers still use the Marlin weight-only path by default instead of a native FP4 kernel. On 32 GB the binding limits are weights and CUDA graph memory: vLLM's own recipe for Qwen3.8-27B on one 5090 uses NVFP4 weights, a 32k context, an FP8 KV cache and --enforce-eager.

ComponentUse (7 Nov 2026)Source
vLLMv0.33.0 (2 Nov 2026); v0.32.0 if you need CUDA 12.9 imagesvLLM releases
CUDA in wheels and images13.0 only from v0.33.0vLLM releases
PyTorch2.14.0 (with Triton 3.8.0), bundledvLLM releases
NVIDIA driverR580 branch or newer for CUDA 13.xCUDA release notes
Python3.11 to 3.14 (3.10 dropped in v0.32.0)vLLM install docs
Operating systemLinux; WSL on WindowsvLLM install docs
Docker imagevllm/vllm-openai:v0.33.0vLLM Docker docs
Usable VRAM on one 509031.4 GiB (per the vLLM recipe)Qwen3.8-27B recipe

All rows read on 7 November 2026. The vLLM docs page still says default binaries use CUDA 12.9; the v0.33.0 release notes are newer and say CUDA 12.9 wheels and -cu129 images are no longer published.

Which vLLM, CUDA and driver versions work on an RTX 5090?

Any current release does; the version trouble is history, but it explains most of the errors people still paste into forums. The timeline from vLLM's GitHub:

The driver follows from the CUDA version. NVIDIA's CUDA release notes map CUDA 13.0 to the R580 driver branch and require 580 or newer for minor-version compatibility across 13.x; CUDA 12.8 needed 570.26 on Linux. Check what you have before installing anything:

nvidia-smi
python -c "import torch, vllm; print(torch.__version__, torch.version.cuda, torch.cuda.get_device_capability(0), vllm.__version__)"

The second line should print a 2.14 torch, CUDA 13.0, (12, 0) for the capability, and 0.33.0. If torch is older than the one vLLM pinned, something else in the environment replaced it, which is a typical way to end up with "no kernel image" in 2026.

Docker or pip?

Docker if you have it, uv otherwise; both install the same CUDA 13.0 build. The Docker docs use the official image with the host's shared memory, which PyTorch needs to pass data between processes. Pin the version tag instead of latest, so a restart does not pull a different build:

docker run --runtime nvidia --gpus all \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  --env "HF_TOKEN=$HF_TOKEN" \
  -p 8000:8000 \
  --ipc=host \
  vllm/vllm-openai:v0.33.0 \
  --model Inferact/Qwen3.8-27B-NVFP4 \
  --max-model-len 32768 \
  --kv-cache-dtype fp8 \
  --enforce-eager \
  --reasoning-parser qwen3

Without Docker, use a fresh virtual environment so no older torch wheel can shadow the bundled one. The install docs give this, and v0.32.0 added vllm download-kernels, which installs FlashInfer's precompiled kernels instead of compiling them on first start:

uv venv --python 3.12 --seed --managed-python
source .venv/bin/activate
uv pip install vllm --torch-backend=auto
vllm download-kernels
vllm serve Inferact/Qwen3.8-27B-NVFP4 \
  --tensor-parallel-size 1 \
  --max-model-len 32768 \
  --kv-cache-dtype fp8 \
  --enforce-eager \
  --reasoning-parser qwen3 \
  --enable-auto-tool-choice --tool-call-parser qwen3_coder

The tool-calling flags are taken from the recipe's two-card command and are optional; which parser each model family needs, and how to test it, is in the function calling guide. On a DGX Spark (sm_121 on ARM64) the install differs again, as the vLLM on DGX Spark page explains. Not every rented GPU gives you a Docker daemon (GPUwerk's DGX Spark instances, for example, are themselves containers, as the tenant environment page explains), so the uv route is the one that works everywhere.

Which quantization formats have working kernels on sm_120?

FP8, NVFP4 W4A4, AWQ and GPTQ all run; what varies is whether you get a native FP4 kernel or the Marlin weight-only fallback. vLLM's own quantization support table stops at Hopper and has no Blackwell column (checked 7 November 2026), so this table is compiled from recipes, release notes and issues:

FormatStatus on sm_120Kernel pathSourceDate
FP8 (W8A8)Works, no workaroundCUTLASS (DeepGemm disabled on Blackwell for Qwen3.5-family text)Qwen3.8-27B recipe2026-10-15
NVFP4 W4A4 (dense)WorksCUTLASS FP4, "not an emulation fallback"Qwen3.8-27B recipe2026-10-15
NVFP4 W4A16 (weight-only, "modelopt_mixed")Works, not native FP4Marlin, with a misleading "no native FP4" warningIssue 47749 (open)2026-07-06
NVFP4 mixture of expertsWorksMarlin by default; native FLASHINFER_B12X opt-in with --moe-backend flashinfer_b12xIssue 31085 (open)2026-06
MXFP4 (gpt-oss)Works on sm_120 (RTX PRO 6000 report)CUTLASS MXFP4 or Marlin; about 190 tok/s single request on gpt-oss-120b either wayNVIDIA forum2026-04-01
AWQ, GPTQ INT4 (W4A16)WorksMarlinCloudrift, ComputingForGeeks benchmarks2025-10 to 2026-10
FP8 KV cacheWorksUsed in the 5090 recipeQwen3.8-27B recipe2026-10-15
NVFP4 KV cacheWorks from v0.32.0XQA decode on SM12xv0.32.0 release notes2026-10-18

The RTX PRO 6000 Blackwell is the same sm_120 architecture as the RTX 5090, which is why its reports apply. The GPT-OSS recipe still says the team is "actively working on" RTX 5090 support for that model, so treat MXFP4 on a 5090 as reported to work rather than documented.

The W4A16 row trips people up. A contributor explained in issue 47749 that weight-only FP4 checkpoints carry no activation scales, so no native FP4 GEMM exists for them on any GPU; vLLM routes them to Marlin by design, and the warning saying your GPU lacks FP4 support is simply wrong about the reason. If you want the native kernel, pick a W4A4 checkpoint. For how NVFP4, MXFP4 and FP8 differ in block size and accuracy, see the sibling article on NVFP4 vs MXFP4 vs FP8; the GB10 steps for the same formats are on the quantization page.

How do you fit a 27B model and its context into 32 GB?

Use 4-bit weights, an FP8 KV cache and a context cap, then spend what is left on concurrency. An FP8 build does not fit: the recipe's two-card table shows 14.28 GiB of FP8 weights per GPU at tensor parallel 2, about 28.6 GiB for the model, against 31.4 GiB usable on one card.

KV cache, by my calculation from the config.json: only 16 of Qwen3.8-27B's 64 layers are full attention (the rest are linear attention with a small fixed state), each with 4 KV heads of dimension 256.

The recipe measured how flags move that number on one 5090:

Settings (Inferact/Qwen3.8-27B-NVFP4, 32k max length)KV cache tokensFull 32k requests that fit
--enforce-eager, FP8 KV91,0222.8
plus --language-model-only (drops the vision encoder)135,9264.1
plus --max-num-seqs 8152,9174.7
BF16 KV instead of FP876,4582.3
FP8 KV with the MTP draft head loaded90,1122.7 (acceptance 0.754)

KV token counts from the vLLM Qwen3.8-27B recipe, updated 15 October 2026. The last column is my division by 32,768. BF16 KV does not halve the count because the linear-attention state and other fixed buffers take a share of the same pool (my inference).

The flags that matter, with defaults from the engine arguments page:

A smaller model leaves far more room. gpt-oss-20b ships in MXFP4 at about 14 GB (the size of the gpt-oss:20b download), and per its config.json only 12 of its 24 layers keep a full KV cache (the other 12 use a 128-token sliding window), with 8 KV heads of dimension 64. In BF16 that is 2 × 12 × 8 × 64 × 2 bytes = 24 KiB per token, so a full 131,072-token context costs 3 GiB. With roughly 15 GiB left after weights and overhead, by my estimate, that is around 600,000 cache tokens, enough for several long-context users at once. The sibling article on KV cache size by model has the same arithmetic for other models.

What errors do people hit, and what fixes them?

Almost all of them trace to a mismatched build, CUDA graph memory, or NVFP4 kernel selection.

Error or symptomCauseFixSource
"CUDA error: no kernel image is available for execution on the device"torch or vLLM build without sm_120Fresh venv, current vLLM with its bundled CUDA 13.0 torchIssues 16901, 35432
torch.OutOfMemoryError "Tried to allocate 784.00 MiB" at startupCUDA graph capture does not fit--enforce-eager, or shrink --max-model-len and --max-num-seqsQwen3.8-27B recipe
"Your GPU does not have native support for FP4 computation"W4A16 checkpoint routed to MarlinHarmless; use a W4A4 checkpoint for native FP4Issue 47749
"No NvFp4 MoE backend supports the deployment configuration"No MoE kernel matched (Nemotron-3-Nano NVFP4, vLLM with torch 2.10, February 2026)Closed unfixed in June 2026; try a newer vLLM, the FP8 build, or --moe-backend flashinfer_b12xIssue 35065
EngineDeadError, SIGSEGV in cudaGraphLaunch after minutes of loadHybrid linear-attention NVFP4 models with CUDA graphs, vLLM 0.26.0 to 0.28.0, sm_120--enforce-eager survived; a race fix may be in 0.28.1; check outputs, the process can exit 0Issue 54331 (open)
FlashInfer JIT: "Feature 'cvt.e2m1x2.f32' not supported on .target 'sm_120'"FLASHINFER_CUDA_ARCH_LIST=12.0Set FLASHINFER_CUDA_ARCH_LIST=12.0fNVIDIA forum
FlashInfer backends silently skippedflashinfer-python and flashinfer-cubin versions differMatch them, or use vllm download-kernelsIssue 31085

Issue 54331 was reported on an RTX PRO 6000 Blackwell (sm_120, 96 GB); a commenter could not reproduce it in October 2026 on a different setup. Status of all issues as read on 7 November 2026.

What speed should you expect?

For a dense 27B model at 4-bit, roughly 85 to 95 tok/s for one request and several hundred to about a thousand tok/s in total under load, according to third-party tests. GPUwerk has published no RTX 5090 measurements of its own; its only vLLM runs are on a DGX Spark, on the benchmarks page (vLLM 0.27.1, 2 September 2026).

Model and quantvLLMLoadtok/sSourceDate
Qwen3.8-27B INT4 (W4A16)0.31.01 request85.7ComputingForGeeks2026-10-06
Same, MTP drafting on0.31.01 request135.3ComputingForGeeks2026-10-06
Same0.31.032 requests, total936 (2.3 s to first token)ComputingForGeeks2026-10-06
Qwen3.8-27B, one card (quant not restated)not stated1 request94.7Paralon (earlier post)2026-09
Qwen3-Coder-30B-A3B AWQ, 8k context, FP8 KVlatest image400 concurrent, total4,570CloudRift2025-10-09

Reported figures, read 7 November 2026. Test conditions differ (prompt length, output length, drafting), so compare rows only within one source. More engines and models are in the sibling RTX 5090 LLM benchmarks article.

The single-request numbers sit close to the card's limit. Decode reads all weights once per token, so 1,792 GB/s (per NVIDIA's spec table) divided by roughly 16.5 GB of 4-bit weights caps a dense 27B model near 109 tok/s by my calculation; MTP drafting is the only way past that, because it verifies several tokens per weight read. If one card is not enough memory, the next step is two cards with tensor parallel 2 (Paralon reports 149 to 156 tok/s for one request on two 5090s) or a 128 GB machine; the DGX Spark vs RTX 5090 comparison covers that trade.

FAQ

Does vLLM support the RTX 5090?

Yes. The RTX 5090 is compute capability 12.0 (sm_120), and vLLM's prebuilt wheels and Docker images have included it since a June 2025 change (PR 19794), apart from a regression reported and fixed in early 2026. The current release, v0.33.0 of 2 November 2026, ships CUDA 13.0 builds only with PyTorch 2.14.0, so it needs an NVIDIA driver from the R580 branch or newer. vLLM runs on Linux; on Windows use WSL.

Which quantization works best with vLLM on an RTX 5090?

For 27B to 32B models, a 4-bit build: NVFP4 W4A4 runs on native CUTLASS FP4 kernels on sm_120 per the vLLM Qwen3.8-27B recipe, and AWQ or GPTQ INT4 runs on Marlin kernels. FP8 works without workarounds but a 27B FP8 model needs about 28.6 GiB of weights, too much for one 32 GB card. Weight-only NVFP4 (W4A16) checkpoints run on Marlin instead of native FP4.

How do I fix CUDA out of memory during CUDA graph capture on a 5090?

Add --enforce-eager. The vLLM recipe for Qwen3.8-27B NVFP4 on one RTX 5090 (updated 15 October 2026) says startup dies in CUDA graph capture with an allocation of 784 MiB failing, and that changing --gpu-memory-utilization does not fix it. Eager mode costs speed, so first try a smaller --max-model-len, --max-num-seqs 8 or --language-model-only to free memory.

What does 'no kernel image is available for execution on the device' mean in vLLM?

The PyTorch or vLLM build you installed has no compiled kernels for sm_120. It was common in April 2025 (vLLM issue 16901) and again with some prebuilt wheels in early 2026 (issue 35432, closed in May 2026). Install the current vLLM release, which bundles a CUDA 13.0 PyTorch, instead of mixing an older torch wheel into the environment.

How fast is vLLM on an RTX 5090?

Reported figures, not GPUwerk measurements: Qwen3.8-27B at INT4 decoded at 85.7 tok/s for one request and 936 tok/s in total at 32 requests on vLLM 0.31.0 (ComputingForGeeks, October 2026), and 135.3 tok/s with MTP drafting. Cloudrift reported 4,570 tok/s in total for Qwen3-Coder-30B-A3B AWQ at 400 concurrent requests in October 2025.

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.

Related pages

First top-up: pay $20, get $30 in credit

Try these flags on a rented RTX 5090.

GPUwerk rents one RTX 5090 (32 GB, x86 host) by the minute at $0.89 per hour, enough time to install vLLM with uv and find the context and batch size your model fits.

A dedicated RTX 5090 machine with 32 GB of GDDR7, $0.89/hour, billed per minute, one customer per machine.

Deploy now for an RTX 5090 vLLM on a 128 GB DGX Spark instead