Making Model Runner V2 the Default in vLLM
In March, we introduced Model Runner V2 (MRV2), a ground-up rewrite of vLLM’s execution core. That post covered its architecture and early performance. At the time, MRV2 was experimental and opt-in, with only part of vLLM’s model and feature surface supported.
As of August 31, 2026, MRV2 is the default model runner across vLLM’s model families on main, with capability-aware fallbacks for configurations that still require MRV1. The change landed in #53183 after several months of work tracked in #41286.
Runner Selection and Fallback
#39337 introduced a three-state policy for VLLM_USE_V2_MODEL_RUNNER
We called this policy the capability oracle. It let us enable model groups one at a time while keeping MRV1 available for comparison.
Rollout Timeline
We started with Qwen3 because Qwen3 and OPT-based tests covered much of the MRV1 suite without making CI prohibitively expensive. OPT itself initially remained on MRV1. One early gap was the per-request prompt-logprob count under chunked prefill and preemption, fixed in #39937.
| Date | Milestone | What it validated |
|---|---|---|
| March 24 | MRV2 architecture announcement | Experimental, opt-in design and early performance |
| May 14 | Qwen3 canary with Qwen3/OPT test coverage | Capability-based selection and broad existing CI coverage |
| June 2 | Llama and Mistral dense models | A second group of widely used dense architectures |
| June 12 | Qwen and DeepSeek-V2 MoE rollout | Moving beyond the first dense-model path |
| June 16 | Granite MoE | Another MoE family with different model integration details |
| June 18 | Quantized models | Quantized variants of already-enabled model families |
| July 2 | All dense models enabled by default | Broad model-family and feature compatibility |
| August 14 | Attention-free model support | Mamba-style state without a conventional attention path |
| August 19 | Pooling models enabled by default | Embedding, classification, reranking, reward, and multimodal pooling workloads |
| August 27 | MRV2 selected by default for all model families | The default boundary reached the full model registry, subject to capability fallbacks |
Testing Both Runners
We used the existing vLLM test suite rather than building a separate MRV2 suite. For each rollout step, we selected MRV2 to find assumptions inherited from MRV1, reran relevant tests on MRV1 to protect the old path, and added focused tests for new failures. The migration tracker records 47 completed PRs: nine rollout milestones and 38 compatibility changes.
Not every gap appeared in presubmit. #51396 reported that MRV2 silently ignored --cpu-offload-gb; #51413 added support and #51440 added regression coverage.
The number of passing checks was useful, but it was not a coverage metric. #39337 had 94 passing checks and still missed a prefill/decode (P/D) issue. Later, #42846 found a KV-cache layout problem with Qwen3, NIXL, and FlashInfer. #42955 temporarily sent KV connector configurations to MRV1; #42766 fixed the kernel_block_size handling and removed that fallback.
Before merging the all-model change, #53183, we ran the full NVIDIA CI and an AMD nightly. It had been on main for only four days when this post was drafted, so we are treating it as a default-on-main milestone, not claiming that every MRV1 fallback is ready to be removed.
Remaining MRV1 Fallbacks
MRV2 is now the default across model families, but known unsupported configurations still route to MRV1. As of August 31, 2026, the automatic fallback cases in this fixed snapshot of vllm/config/vllm.py are:
- Environments without Triton.
- Some models on ROCm.
- Stock
torch.compile, sequence parallelism with tensor parallelism, and pipeline parallelism withexternal_launcher. - N-gram speculative decoding; other MRV2-unsupported speculative methods, including generic draft-model speculation; EAGLE parallel drafting; and EAGLE3 with pipeline parallelism.
- Dual Batch Overlap and Elastic Expert Parallelism.
- Custom logits processors, whether explicitly configured or registered as entry-point plugins, and KV-sharing fast prefill.
The MRV2 parity tracker lists the remaining design and implementation work as of the date of this post.
The Q3 roadmap calls for closing the remaining parity and backend gaps, expanding release-gating coverage, and supporting new day-zero models only on MRV2.
For Users
No API migration is required. Builds from main after commit 4aab2b0 select MRV2 for supported configurations; the first tagged release with this default will be v0.29.0.
At startup, MRV2 logs Using V2 Model Runner. If vLLM falls back, the warning names the blocker and says that MRV1 was selected. You can also select a runner explicitly while debugging:
export VLLM_USE_V2_MODEL_RUNNER=1 / 0
Acknowledgments
The original MRV2 architecture and implementation made this rollout possible. Thanks to Woosuk Kwon and the other contributors listed in the MRV2 announcement.
Nick Hill co-drove the rollout and much of the compatibility work. Taneem Ibrahim led the pooling-model migration, while Michael Goin and Giancarlo Delfin contributed supporting features. Thanks also to Kaichao You for shepherding key default-boundary changes, to the model, platform, and CI contributors who tested the broader matrix, and to users such as malaiwah, whose reports became regression tests.