24 个 commit,涉及 137 个文件,+3965/-927 行变动。

概要

统计项 数值
Commit 数 24
变更文件 137
新增行数 +3965
删除行数 -927

Commit 列表

📦 Other

  • 2cac89f #45181 — [Spec Decode] Support mixed KV page sizes for DFlash (#45181)
    • 作者: Alex Steiner | +511/-141 | 8 个文件

    This PR addresses the KV-cache infrastructure gap needed by DFlash-style speculative decoding when the target and draft models have different KV page sizes. It adds: - A padding fallback in unify_kv_cache_spec_page_size for non-divisible page sizes. - Padded KV-cache reshape handling for FlashAttention-style layouts where the block dimension is not the first physical dimension. - A shared attentio…

  • 3e6e335 #44638 — [Disagg] return routed_experts on streaming generate responses (#44638)
    • 作者: aoshen02 | +10/-0 | 2 个文件

    The disagg serve_tokens non-streaming path already returns per-token MoE routing in GenerateResponseChoice.routed_experts, but the streaming path (GenerateResponseStreamChoice) dropped it. This adds the field to the streaming choice and encodes it with the same base64(np.save(…)) transport used by the non-streaming path, populated on the chunk where the engine makes routing available…

  • b91b772 #46039 — [ROCm][P/D] Support MiniMax-M3 mixed KV layouts in MoRIIO READ mode (#46039)
    • 作者: junkang1991 | +566/-72 | 4 个文件

    Fix MoRIIO READ-mode KV transfer when a model uses mixed per-layer KV cache layouts, observed with MiniMax-M3. MiniMax-M3 registers multiple KV cache layouts: - separated K/V cache: [2, num_blocks, block_size, num_kv_heads, head_dim] - ROCm interleaved K/V cache: [num_blocks, 2, block_size, num_kv_heads, head_dim] - 3D key-only / MLA indexer cache: [num_blocks, block_size, head_dim] MoRIIO previou…

  • b5495cc #44665 — Fix memory pointer overflow in Mamba state buffers (#44665)
    • 作者: Shifani Rajabose | +3/-2 | 1 个文件

    Device memory addresses can exceed the signed int64 maximum value (2^63-1), causing pointer overflow errors when creating Mamba state buffers for copy operations. Use torch.uint64 unconditionally for src_ptrs and dst_ptrs to support the full 64-bit unsigned address space (max 2^64-1) on all platforms. Tested with: Qwen3-Coder-Next-FP8 ## Test Result —

  • 7df3d7d #45424 — [Core] Ensure memory is pinned prior to async h2d copy (#45424)
    • 作者: Nick Hill | +254/-264 | 49 个文件

    To avoid possible gpu/cpu stream syncs. See for example https://github.com/vllm-project/vllm/pull/45074. Also: Generalize async_tensor_h2d utility function and standardize how is_pin_memory_available() is used.

  • f57ac27 #45919 — [Render] Add reasoning/tool parsing to /derender + fix byte-fallback FFFD (#45919)
    • 作者: aoshen02 | +601/-37 | 4 个文件

    Merges the reasoning/tool-call parsing from PR #45045 and fixes the byte-fallback U+FFFD regression in derender logprobs. ### Reasoning & tool call parsing (from #45045) - New build_chat_message() in serve/utils/chat_message_builder.py — single source of truth shared by coupled chat path and /derender - derender_chat_response() accepts chat_request for parser-aware parsing (reasoning + tool calls)…

  • c88d3d4 #39831 — [SimpleCPUOffloadConnector] PCP + DCP support (#39831)
    • 作者: Jonathan Chen | +243/-7 | 2 个文件

    Purpose Add PCP + DCP support by scaling kv block sizes by pcp_world_size * dcp_world_size. Straightforward changes due to the simple connector using the KVCacheCoordinator which already properly handles context parallelism for kv caching Claude was used for creating tests.

  • 3b4a76b #45737 — [KV-Offloading] : Expose CPU cache usage metric (#45737)
    • 作者: Varun Sundar Rabindranath | +86/-22 | 4 个文件

    Add vllm:kv_offload_cpu_cache_usage_perc metric to export CPU cache usage percent. The naming and the semantics is designed to match the gpu counter part vllm:kv_cache_usage_perc This PR also refactors the build_metric_definitions function to move it into the OffloadingManager. Add unit tests ## Test Result Unit tests pass

  • cc22621 #46205 — [KV Offload] Support packed HMA KV cache layout (#46205)
    • 作者: Lucas Wilkinson | +175/-21 | 6 个文件
    • add an opt-in VLLM_USE_PACKED_HMA_KV_CACHE path for multi-group HMA KV cache packing - keep the existing DeepSeek V4 packed path unchanged - register packed HMA offload as one canonical backing tensor with one full-row ref per KV group, preserving the packed topology for CPU offload ## Duplicate-work check - Checked open PRs for packed HMA KV cache, gpt-oss gemma packed kv cache, VLLM_USE_PACKED…
  • ebfbcfe #45026 — Stop setting CUDA_VISIBLE_DEVICES internally in vLLM, add device_ids arg (#45026)
    • 作者: Tyler Michael Smith | +722/-185 | 24 个文件

    This PR changes the way vLLM interacts with the CUDA_VISIBLE_DEVICES (CVD) environment variable: * With this PR vLLM no longer sets CVD to control which GPU a worker uses * This PR adds a –device-ids argument so that users don’t need to set This has a few benefits: * vLLM currently does not support the UUID format for device IDs which is problematic for using it with MIG (should fix https://githu…

  • 7ff7f5c #46125 — Revert “Fix Stale Encoder Cache After Weight Update” (#46125)
    • 作者: Sumanth R Hegde | +0/-12 | 2 个文件

    Reverts vllm-project/vllm#45093 The decision to reset prefix cache should be left to the user. We should not be silently resetting prefix cache after every weight update I’m not sure about encoder cache though (i.e is it typical to reset encoder cache for multimodal async RL?)

🐛 Bug Fix

  • d3ad8e8 #46231 — [Bugfix] Defer offload reads while transfers are pending (#46231)
    • 作者: Palaiologos1453 | +106/-4 | 2 个文件

    Fixes #46014. This makes the offloading scheduler defer prefix-cache lookup for a request while that request still has in-flight transfer jobs. In the preemption/re-admission race described in the issue, this prevents the scheduler from issuing a load while a previously flushed store is still tracked in transfer_jobs. The request is retried on a later scheduling step after the worker completion is…

  • 183a430 #46243 — [Bugfix][Model Runner V2] Fix min_tokens off-by-one in the V2 GPU sampler (#46243)
    • 作者: Ting SUN | +1/-1 | 1 个文件

    min_tokens=N should let EOS through at output index N (the N+1-th token), as the V1 MinTokensLogitsProcessor does. The V2 GPU sampler releases it one step late, so min_tokens=N silently forces N+1 non-EOS tokens. This is the default path for mainstream archs (Llama, Qwen3, Mistral, …). The kernel in vllm/v1/worker/gpu/sample/logit_bias.py suppresses stop tokens while pos < min_len, but pos is th…

  • a346d58 #46254 — [Bugfix] Fix NVFP4/OCP MX MoE emulation (#46254)
    • 作者: Matt | +3/-21 | 5 个文件

    This PR fixes an issue in the NVFP4/OCP MX MoE emulation code paths caused by https://github.com/vllm-project/vllm/pull/42120. In that PR, TritonExperts.apply in vllm/model_executor/layers/fused_moe/experts/triton_moe.py was modified to call moe_kernel_quantize_input on the activations if TritonExperts.expects_unquantized_inputs == True. However, this flag is pre-set to True for NVFP4 and OCP MX e…

  • 7714899 #46199 — [Bugfix] Move extract_layer_index back inside is_v32 guard (#46199)
    • 作者: Tyler Michael Smith | +23/-17 | 1 个文件

    Pretty straightforward - #45895 removed the if self.is_v32 check, which broke LongcatFlash. This PR brings it back Claude summary: - Commit ab66606993 (#45895) moved extract_layer_index(prefix) from inside the if self.is_v32 guard to unconditional execution in DeepseekV2MLAAttention.init - This breaks LongcatFlash, whose layer prefixes contain two integers (e.g. model.layers.0.self_attn.0), ca…

  • 1bdf981 #46222 — [ROCm] [Bugfix] Bugfix ROCm Sparse Indexer (#46222)
    • 作者: TJian | +6/-2 | 1 个文件

    Cause: PR https://github.com/vllm-project/vllm/pull/44577 exposed a ROCm AITER sparse-indexer bug. The packed KV layout makes per-block strides large enough that block_id * stride can exceed 32-bit range. Fix: widened the physical block id to tl.int64 before cache-stride arithmetic in both indexer cache insert and gather paths Error log lmeval of DeepSeek V4 Pro and GLM 5.2 -FP8 ## Test Result —

  • e9de72f #46198 — [Bugfix] Guard model_config access in _log_compilation_config (#46198)
    • 作者: Tyler Michael Smith | +1/-1 | 1 个文件

    _log_compilation_config() in VllmBackend crashes with AttributeError: ‘NoneType’ object has no attribute ‘model’ when model_config is None This test creates a VllmConfig with only compilation_config set, and leaves model_config set to None This was passing on May 2 but seemingly should always have been a problem, unclear why it was passing before and not now. Regardless, the fix is pretty simple a…

🧪 CI/Tests

  • b80ce9d #46241 — [CI][test] Replace InternVL2-1B with InternVL3-1B in test_pipeline_parallel.py (#46241)
    • 作者: xiaolinchen | +2/-2 | 1 个文件

    OpenGVLab/InternVL2-1B (model_type=internvl_chat) cannot be loaded by AutoTokenizer on transformers >= 5.x: The error message is misleading — sentencepiece and tiktoken are both installed. The real cause is the combination of two facts: 1. transformers 5.x lists internvl_chat in MODELS_WITH_INCORRECT_HUB_TOKENIZER_CLASS (in transformers/models/auto/tokenization_auto.py), so AutoTokenizer is forced…

  • dced290 #46024 — [Hardware][AMD][CI] Fix e2e core test group (#46024)
    • 作者: Matt | +18/-14 | 3 个文件

    This PR fixes the e2e core test group. Cascade attention is only supported on the FLASH_ATTN and FLASHINFER backends, neither of which is currently supported on AMD. pytest -v -s v1/e2e/general –ignore v1/e2e/general/test_async_scheduling.py ## Test Result The test group passes. It is run as part of AMD CI. cc @AndreasKaratzas —

🔩 Misc

  • 8dd1b70 #35530 — [Misc] Fix stale doc URL and docstring module path (#35530)
    • 作者: Umut Polat | +2/-2 | 2 个文件

    Two small fixes: 1. envs.py: The VLLM_PORT error message links to en/stable/serving/env_vars.html which returns 404. Updated to the correct path en/latest/configuration/env_vars.html. 2. tool_parsers/init.py: The docstring example references vllm.tool_parsers.kimi_k2_parser but the actual module is vllm.tool_parsers.kimi_k2_tool_parser.

⚡ Performance

  • 6e91996 #45840 — [Perf] Skip/shrink all_token_ids copy in scheduler for non-async and V2 runner (#45840)
    • 作者: aman | +49/-11 | 3 个文件

    CachedRequestData.all_token_ids is read in exactly one place — the V1 GPU model runner, and only when async scheduling is enabled (vllm/v1/worker/gpu_model_runner.py, gated on self.use_async_scheduling). There it restores a resumed request’s output tokens after a gap step: Previously _make_cached_request_data() copied the full token history (req.all_token_ids.copy(), prompt + output) for every…

  • ab7fcbd #45969 — [Perf][KVConnector][Mooncake] Compact chunk-hash keys and zero-copy lookup wire format (#45969)
    • 作者: Yifan Qiao | +164/-53 | 7 个文件

    Two related optimizations to the MooncakeStoreConnector prefix-lookup path. Both reduce the cost of moving block hashes around, which becomes acute when the model’s block_size is much larger than the connector’s hash_block_size. ### 1. Compact chunk-hash keys When block_size > hash_block_size, a single block_size chunk previously keyed Mooncake by **concatenating all of its fine-grained sub-hashes…

  • d272418 #46026 — [Perf] Optimize Qwen3-VL multi-video prompt processing (#46026)
    • 作者: L丶 | +124/-26 | 2 个文件

    Replace text-level prompt expansion (decode + string replace + re-tokenize) with token-level replacement in _call_hf_processor. Co-authored-by: DeepSeek Optimize _call_hf_processor in Qwen3-VL for multi-video inputs. Problem: Each video’s expanded token IDs were decoded to text and inserted into the prompt via prompt.replace(), causing the prompt to grow with every video. The final super()._ca…

🦀 Rust Frontend

  • 891cc4b #40912 — [Frontend] Report cache usage in Anthropic /v1/messages API (#40912)
    • 作者: shuoming zhang | +295/-10 | 2 个文件

    Populate cache_read_input_tokens and cache_creation_input_tokens in the Anthropic Messages API response, which were previously always None. Aligns input_tokens semantics with the Anthropic contract. Fixes #33923 ### Key changes - Fix input_tokens semantics: Anthropic defines total_input = input_tokens + cache_read + cache_creation. Previously input_tokens was set to prompt_tokens (which includ…