[Bugfix] Normalize sparse MLA warmup compression ratios (#49392)
Signed-off-by: Wu, Xiaochang <xiaochang.wu@intel.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Xiaochang Wu committed
Jul 27, 2026 at 15:02 UTC
8061dc26bd0b37a2ad58068b99d072be5a0e5f47
2 files changed
+24
-2
tests/v1/attention/test_indexer_deepseek_v4_slot_mapping.py
+23
-1
@@ -1,15 +1,37 @@
1
# SPDX-License-Identifier: Apache-2.0
2
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
4
+from types import SimpleNamespace
5
+
6
import pytest
7
import torch
8
9
from tests.v1.attention.utils import create_vllm_config
10
from vllm.v1.attention.backend import CommonAttentionMetadata
9
-from vllm.v1.attention.backends.mla.indexer import DeepseekV32IndexerMetadataBuilder
11
+from vllm.v1.attention.backends.mla.indexer import (
12
+ BuildPrefillChunkMetadataKernel,
13
+ DeepseekV32IndexerMetadataBuilder,
14
+)
15
from vllm.v1.kv_cache_interface import MLAAttentionSpec
16
17
18
+def test_indexer_warmup_normalizes_zero_compress_ratios():
19
+ config = SimpleNamespace(
20
+ scheduler_config=SimpleNamespace(max_num_batched_tokens=8),
21
+ model_config=SimpleNamespace(
22
+ hf_config=SimpleNamespace(compress_ratios=[0, 0, 4, 128, 0])
23
+ ),
24
+ parallel_config=SimpleNamespace(
25
+ decode_context_parallel_size=1,
26
+ cp_kv_cache_interleave_size=1,
27
+ ),
28
+ )
29
+
30
+ keys = BuildPrefillChunkMetadataKernel().get_warmup_keys(config)
31
+
32
+ assert {key.COMPRESS_RATIO for key in keys} == {1, 4, 128}
33
+
34
+
35
@pytest.mark.skipif(not torch.cuda.is_available(), reason="requires CUDA")
36
def test_indexer_builder_deepseek_v4_compressed_slot_mapping_uses_storage_block_size():
37
"""Regression test: DeepseekV4 compression path must compute slot_mapping from
vllm/v1/attention/backends/mla/indexer.py
+1
-1
@@ -328,7 +328,7 @@ class BuildPrefillChunkMetadataKernel(
328
dcp_interleave = parallel_config.cp_kv_cache_interleave_size
329
dcp_rank = get_dcp_group().rank_in_group if dcp_world > 1 else 0
330
compress_ratios = tuple(
331
- int(ratio)
331
+ max(1, int(ratio))
332
for ratio in (getattr(hf_config, "compress_ratios", None) or (1,))
333
)
334
return self._trace_dispatch(self.dispatch)(