v0.21.0

git-ai-project/git-aiv0.21.0May 15, 2026by khluu

AI Summary

A major update featuring 367 commits, deprecating Transformers v4, requiring C++20, and introducing KV offloading with Hybrid Memory Allocator (HMA) alongside support for new models like DeepSeek V4.

Key Highlights

  • Transformers v4 support deprecated (migrate to v5)
  • C++20 build requirement introduced
  • KV Offloading integrates with Hybrid Memory Allocator (HMA)
  • Speculative decoding respects reasoning budgets
  • NVIDIA Blackwell support via TOKENSPEED_MLA backend

Breaking Changes

  • C++20 build requirement for compatibility
  • Transformers v4 deprecated

New Features

  • KV Offload + Hybrid Memory Allocator (HMA) integration
  • Speculative decoding with thinking budget support
  • TOKENSPEED_MLA attention backend on Blackwell GPUs
  • New model architectures (MiMo-V2.5, Laguna XS.2, Moondream3, Qianfan-OCR)
  • DeepSeek V4 AMD/ROCm support and pipeline parallelism

Full Release Notes

## Highlights

This release features 367 commits from 202 contributors (49 new)!

* **Transformers v4 deprecated**: This release formally deprecates `transformers` v4 support (#40389). Users should migrate to `transformers` v5.
* **C++20 build requirement**: vLLM now requires a C++20-compatible compiler for compatibility with PyTorch (#40380). This is a **breaking build change**.
* **KV Offload + Hybrid Memory Allocator (HMA)**: The KV offloading subsystem now integrates with the Hybrid Memory Allocator, including scheduler-side sliding window group support and full HMA enablement (#41228, #41445, #39571).
* **Speculative decoding with thinking budget**: Speculative decoding now respects reasoning/thinking budgets, enabling correct spec decode for reasoning models (#34668).
* **TOKENSPEED_MLA backend on Blackwell**: A new TOKENSPEED_MLA attention backend is available for DeepSeek-R1/Kimi-K25 prefill + decode on Blackwell GPUs (#41778).

### Model Support
* New architectures: MiMo-V2.5 (#40967), Laguna XS.2 (#41129, #41880), Moondream3 (#32325), Qianfan-OCR (#40136), Cohere MoE (#40817), Cohere Eagle (#42078).
* Speculative decoding: EAGLE for Mistral (#41024), Gemma4 MTP (#41745), MTP for MiMo-V2.5 (#41905), Cohere Eagle (#42078).
* DeepSeek V4: AMD/ROCm support (#40871), pipeline parallelism (#41694), `max` reasoning effort (#40982), disaggregated serving fixes (#41957).
* Tool calling: Cohere reasoning and tool parsers (#40422), LFM2/2.5 tool parser (#39243).
* Gemma3/Gemma4: `hidden_act` variant support (#40588), pipeline parallelism fix (#40786), MoE fixes (#41206, #41574, #41401), tool parser crash fix (#41991, #42188).
* Model Runner V2: Qwen3.5/Mamba hybrid model support (#35520), `logprob_token_ids` support (#40559).
* CUDA graph: ViT CUDA graph support for Qwen2.5-VL (#40830).
* Compatibility: Vendor HCXVisionConfig for Transformers v5 (#38447), legacy `rope_type` checkpoint support (#41734).

### Engine Core
* KV offloading + HMA: Scheduler-side sliding window groups (#41228), full HMA enablement (#41445), multi-connector HMA (#39571), per-job store completion (#39186), DCP/PCP support in OffloadingConnector (#41549), MooncakeStoreConnector for distributed KV offloading (#40900).
* Speculative decoding: Thinking budget support (#34668), independent drafter attention backend selection (#39930), multimodal model support with warning (#41752), per-step allocation elimination (#41043).
* Model Runner V2: Rejection sampling acceptance rate fix (#40651), skip metadata rebuild before draft prefill (#40410), rebuild metadata between draft decode steps (#41162), Qwen3.5/Mamba hybrid support (#35520).
* Routing: Replace routing replay with device cache and async D2H pipeline (#39917).
* Ray: RayExecutorV2 enabled by default (#41421), actor name collision fix for DP > 1 (#40398).
* Stability: Two-phase pause to prevent scheduler deadlock (#39366), thread-safe HF tokenizer wrappers (#41181), OOM prevention via `max_split_size_mb` during model loading (#41268).
* IndexCache support for DSA models (#37735).

### Hardware & Performance
* **NVIDIA Blackwell**: TOKENSPEED_MLA backend for DSR1/Kimi-K25 (#41778), faster per-token FP8 group quant packed kernel (#41326), FP8 on NVIDIA Thor/SM110 (#39712), CUTLASS scaled mm for non-compatible sizes (#41868).
* **Performance**: FlashInfer top-k/top-p sampler enabled by default (#40376), FP8 FlashInfer attention for ViT (#38065), TurboQuant shared dequant buffers (#40941), `AllPool.forward` 51% faster (#41163), GPU<->CPU sync elimination in pooling (#41433) and attention (#41434), numpy zero-copy embedding serialization (#41681), multimodal processor skip for text-only (#41246), FlashInfer FP8 async TP fusion (#39505), NVFP4 all-gather GEMM fusion for AsyncTP (#41882), re-enable allreduce+RMS fusion for DP/PP (#41458), DeepSeek bf16→fp32 via `torch.mm` (#41300), persistent MLA for sparse backend (#41990), configurable safetensors checkpoint prefetch (#41499), fused mhc_post_pre kernel (#41536), 2D-grid W8W8 group quant kernel (#42153), relaxed memory ordering for KV cache swaps (#39306).
* **AMD ROCm**: ROCm 7.2.2 (#41386), DBO (Dynamic Batch Optimization) (#34726), AITER Fused Allreduce+RMSNorm (#37646), Fused Shared Expert (FSE) for Qwen3-Next (#39280), DeepSeek V3.2 TP4 AITER MLA (#41835), GDN linear attention fusion (#40711), eliminate redundant MoE buffer copies in AITER (#41713), CPU offloading support (#40549), DeepEP API update (#39721), cap Triton paged attention block size to fix shared memory OOM (#38502).
* **CPU**: FP8 attention for AMX/AVX-512 (#39445), FP8 W8A16 linear (#41186), FP8 W8A16 MoE (#41314), DNNL AVX2 W8A8 Int8 (#41318), Gated DeltaNet Attention for Qwen 3.5/3.6 (#41025), RISC-V OMP thread auto-binding (#40569).
* **Intel XPU**: Top-k/top-p sample kernel (#39285), out-of-place all-reduce (#41808), LoRA support (#38206).
* **IBM Power**: VSX attention backend (#40451).
* **FlexAttention**: Re-enabled for batch invariant mode (#40842).
* **MLA**: Abstracted MLA prefill backends, eliminated cuDNN dependency (#32623).

### Large Scale Serving
* Disaggregated serving: Bi-directional KV cache transfers between P and D (#32553), NIXL transfer redesign (#40731), EPLB memory overhead optimization (#40013), NIXL connector bumped to 1.x (#42364), Mooncake KVConnectorStats for transfer observability (#40414), NIXL P-node pre-admission rejection notification (#41269), KV block release for skipped P-ranks (#40449).
* DCP: Pack output and LSE in DCP A2A (#41160).
* MoE: PluggableLayer interface for out-of-tree MoE runners (#35178).
* LoRA: Initial expert parallel (EP) support (#40867), Qwen3.5 LoRA fusion fix (#37912).

### Quantization
* **NVFP4**: KV cache support (#40177), Triton dequant/QDQ emulation kernels for Hopper and AMD (#40033), GELU on TRT-LLM NvFP4 fused MoE for Gemma4 (#41050), ModelOpt NVFP4 W4A16 (#41769), NVFP4 all-gather GEMM fusion for AsyncTP (#41882), GLM4-MoE NVFP4 loading fix (#41755).
* **MXFP4**: Humming MXFP4 MoE backend (#41083), FlashInfer CUTLASS MXFP4-MXFP8 MoE fix (#42089).
* **TurboQuant**: Hybrid model and uniform quantization support (#39931).
* **Compressed tensors**: Allow configs with non-explicit ignores (#41965).
* **FP8**: Bias loading fix (#41424), FlashInfer autotune temporarily disabled for correctness (#41524).
* **DSV4**: Improved fused Indexer Q quant kernel (#41428).

### API & Frontend
* **Responses API**: Streaming tool/function calling with `required` (#40700) and named tool/function choice (#41110), resubmitting output items with missing fields (#41355).
* **OpenAI compatibility**: `system_fingerprint` field in responses (#40537), `prompt_embeds` content part support (#40720), `defer_loading` and `tool_reference` support (#40190), rendered prompt text in chat completion response (#42052), tolerate empty content in forced tool choice (#40148).
* **Tool calling**: XGrammar 0.2.0 with structural tags for strict tool calling + reasoning (#40894), Cohere reasoning/tool parsers (#40422), LFM2/2.5 tool parser (#39243).
* **Tokenizer**: Fastokens support (#41741).
* **RLHF**: Explicit `/start_weight_update` and `/finish_weight_update` APIs (#39212).
* **ASR**: Engine request abort on cancellation (#41266).
* **Configuration**: `VLLM_SKIP_MODEL_NAME_VALIDATION` env var (#34676), configurable model weights loading tracking (#41086), Triton JIT compilation monitor (#40137).

### Build & Dependencies
* **Breaking**: C++20 required for PyTorch compatibility (#40380).
* **Breaking**: Transformers v4 deprecated (#40389).
* Docker image size reduced by ~2.5 GB via deferred FlashInfer cubin download (#41134).
* CUDA 13.0 wheels switched to PyTorch manylinux_2_28 base (#41416).
* DeepGEMM bundled wheel built per-Python for CPython compatibility (#41516).
* Container image provenance metadata embedded (#40653).
* tpu-inference upgraded to v0.19.0 (#41844).
* NIXL connector bumped to 1.x (#42364).
* ROCm 7.2.2 (#41386).

## Contributors

@AndreasKaratzas, @haosdent, @khluu, @yewentao256, @stecasta, @mgoin, @Isotr0py, @hmellor, @chaunceyjiang, @jeejeelee, @noooop, @MatthewBonanni, @njhill, @zyongye, @yzong-rh, @ronensc, @NickLucche, @chaojun-zhang, @dzhengAP, @chfeng-cs, @TheEpicDolphin, @esmeetu, @wzhao18, @ZJY0516, @juliendenize, @kylesayrs, @fadara01, @Etelis, @tianmu-li, @arpera, @ekagra-ranjan, @orozery, @wxsIcey, @jikunshang, @izhuhaoran, @rasmith, @russellb, @Lucaskabela, @Harry-Chen, @alec-flowers, @pmaybank, @Terrencezzj, @hickeyma, @Baekpica, @itej89, @fxmarty-amd, @WoosukKwon, @juhi10071998, @sychen52, @baonudesifeizhai, @vllmellm, @johncalesp, @the-david-oy, @lucianommartins, @bittoby, @Dao007forever, @lyd1992, @yuwenzho, @lesj0610, @sfeng33, @micah-wil, @akii96, @yma11, @SoluMilken, @mmangkad, @SiluPanda, @ojhaanshika, @zhandaz, @bhoomit, @simon-mo, @msanft, @angelayi, @anthonsu, @artem-spector, @zhangxin81, @benoittgt, @joerowell, @yangrz7, @chelnnexy, @liangel-02, @walterbm, @rishitdholakia13, @SKRohit, @BugenZhao, @JaredforReal, @amd-lalithnc, @frgossen, @h-avsha, @DarkLight1337, @danisereb, @laithsakka, @Bortlesboat, @wangluochao902, @Rohan138, @hao-aaron, @puririshi98, @roikoren755, @heachary, @UranusSeven, @dsingal0, @ChenxiQ, @snadampal, @ilmarkov, @wendyliu235, @lequytra, @JisoLya, @LuisRobaina, @sniper35, @eicherseiji, @Yuyi-Ao, @raviguptaamd, @sungsooha, @ganyi1996ppo, @andylolu2, @FredericOdermatt, @ProExpertProg, @rbrugaro-amd, @mcsantiago, @hnt2601, @jinzhen-lin, @taneem-ibrahim, @tomeras91, @alex-jw-brooks, @Aktsvigun, @HanFa, @netanel-haber, @JasonKeyiL, @gshtras, @joa-stdn, @Seven-Streams, @JartX, @xuechendi, @BowenBao, @Akashcodes732, @jeffreywang-anyscale, @czhu-cohere, @zhewenl, @marvinzh, @Lidang-Jiang, @gcanlin, @whx-sjtu, @S1ro1, @liulanze, @Dhruvilbhatt, @laviier, @wi-adam, @aaab8b, @yuankaichen-amd, @ZhanqiuHu, @QwertyJack, @viktorpusTT, @divakar-amd, @starkwj, @benchislett, @jcyang43, @JLiu4Coding, @xy3xy3, @hongxiayang, @amd-mghanimi, @wenyili, @bigPYJ1151, @s-yanev, @AlonKejzman, @noobHappylife, @TomerBN-Nvidia, @MeganEFlynn, @liuzijing2014, @jbuchananr, @lokashrinav, @ssam18, @dllehr-amd, @gmagogsfm, @tpopp, @tjtanaa, @simondanielsson, @zhenwei-intel, @HiroakiMikami, @nholmber, @SumanthRH, @LucasWilkinson, @maeehart, @rishaps, @r-barnes, @gau-nernst, @Kermit-C, @tdoublep, @aoshen02, @Naveassaf, @wangxingran222, @cvan20191, @AbhiOnGithub, @abdulrahman-cohere, @jmamou, @Flink-ddd, @bnellnm, @hqhq1025, @gnovack, @wangxiyuan, @princepride, @jiahanc, @LCAIZJ, @ovidiusm

## New Contributors

* @abdulrahman-cohere made their first contribution in https://github.com/vllm-project/vllm/pull/41266
* @AbhiOnGithub made their first contribution in https://github.com/vllm-project/vllm/pull/42180
* @Aktsvigun made their first contribution in https://github.com/vllm-project/vllm/pull/40788
* @amd-mghanimi made their first contribution in https://github.com/vllm-project/vllm/pull/41713
* @Baekpica made their first contribution in https://github.com/vllm-project/vllm/pull/41206
* @benoittgt made their first contribution in https://github.com/vllm-project/vllm/pull/41134
* @bittoby made their first contribution in https://github.com/vllm-project/vllm/pull/41690
* @chelnnexy made their first contribution in https://github.com/vllm-project/vllm/pull/40754
* @ChenxiQ made their first contribution in https://github.com/vllm-project/vllm/pull/40956
* @chfeng-cs made their first contribution in https://github.com/vllm-project/vllm/pull/42066
* @cvan20191 made their first contribution in https://github.com/vllm-project/vllm/pull/40951
* @dzhengAP made their first contribution in https://github.com/vllm-project/vllm/pull/41423
* @ghphotoframe made their first contribution in https://github.com/vllm-project/vllm/pull/40859
* @HiroakiMikami made their first contribution in https://github.com/vllm-project/vllm/pull/40588
* @itej89 made their first contribution in https://github.com/vllm-project/vllm/pull/39721
* @JasonKeyiL made their first contribution in https://github.com/vllm-project/vllm/pull/41068
* @jbuchananr made their first contribution in https://github.com/vllm-project/vllm/pull/39243
* @JisoLya made their first contribution in https://github.com/vllm-project/vllm/pull/41363
* @JLiu4Coding made their first contribution in https://github.com/vllm-project/vllm/pull/41832
* @juhi10071998 made their first contribution in https://github.com/vllm-project/vllm/pull/41050
* @Kermit-C made their first contribution in https://github.com/vllm-project/vllm/pull/42076
* @lequytra made their first contribution in https://github.com/vllm-project/vllm/pull/41401
* @Lidang-Jiang made their first contribution in https://github.com/vllm-project/vllm/pull/38099
* @liulanze made their first contribution in https://github.com/vllm-project/vllm/pull/41571
* @lokashrinav made their first contribution in https://github.com/vllm-project/vllm/pull/41681
* @LuisRobaina made their first contribution in https://github.com/vllm-project/vllm/pull/40720
* @maeehart made their first contribution in https://github.com/vllm-project/vllm/pull/42061
* @marvinzh made their first contribution in https://github.com/vllm-project/vllm/pull/40136
* @mcsantiago made their first contribution in https://github.com/vllm-project/vllm/pull/41492
* @MeganEFlynn made their first contribution in https://github.com/vllm-project/vllm/pull/41880
* @nholmber made their first contribution in https://github.com/vllm-project/vllm/pull/39280
* @pmaybank made their first contribution in https://github.com/vllm-project/vllm/pull/41012
* @raviguptaamd made their first contribution in https://github.com/vllm-project/vllm/pull/34726
* @s-yanev made their first contribution in https://github.com/vllm-project/vllm/pull/41755
* @S1ro1 made their first contribution in https://github.com/vllm-project/vllm/pull/39213
* @Seven-Streams made their first contribution in https://github.com/vllm-project/vllm/pull/40894
* @SiluPanda made their first contribution in https://github.com/vllm-project/vllm/pull/40907
* @SKRohit made their first contribution in https://github.com/vllm-project/vllm/pull/40786
* @snadampal made their first contribution in https://github.com/vllm-project/vllm/pull/32553
* @sniper35 made their first contribution in https://github.com/vllm-project/vllm/pull/32325
* @ssam18 made their first contribution in https://github.com/vllm-project/vllm/pull/41486
* @the-david-oy made their first contribution in https://github.com/vllm-project/vllm/pull/40737
* @wangluochao902 made their first contribution in https://github.com/vllm-project/vllm/pull/41043
* @wenyili made their first contribution in https://github.com/vllm-project/vllm/pull/41901
* @wi-adam made their first contribution in https://github.com/vllm-project/vllm/pull/40749
* @xy3xy3 made their first contribution in https://github.com/vllm-project/vllm/pull/40820
* @yangrz7 made their first contribution in https://github.com/vllm-project/vllm/pull/40449
* @yuankaichen-amd made their first contribution in https://github.com/vllm-project/vllm/pull/40390
* @zhangxin81 made their first contribution in https://github.com/vllm-project/vllm/pull/39904