[Misc] Name each backend and its kernel block sizes in block-size errors (#58557)

Signed-off-by: Eugenio "Jay" Zuccarelli <11176606+jayzuccarelli@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

Eugenio "Jay" Zuccarelli committed Sep 28, 2026 at 02:33 UTC 004e37ece2fd3f49b5ba471e016668f23d0e7c8b
4 files changed +15 -1
tests/v1/worker/test_attn_utils.py
+1
@@ -77,6 +77,7 @@ def test_get_kv_cache_spec_resolves_hisparse_block_size(
77 layers = {}
78 for name, sizes in zip(specs, [main_sizes, indexer_sizes, [block_size]]):
79 backend = SimpleNamespace(
80 + get_name=lambda name=name: name,
81 customize_spec=AttentionBackend.customize_spec,
82 get_supported_kernel_block_sizes=lambda sizes=sizes: sizes,
83 )
tests/v1/worker/test_gpu_model_runner.py
+4
@@ -298,6 +298,10 @@ def _make_mock_backend_for_kernel_block_size(
298 supported_sizes: list[int | MultipleOf],
299 ):
300 class _MockBackend:
301 + @staticmethod
302 + def get_name():
303 + return "MOCK"
304 +
305 @staticmethod
306 def get_supported_kernel_block_sizes():
307 return supported_sizes
vllm/v1/attention/backend.py
+3
@@ -54,6 +54,9 @@ class MultipleOf:
54 def __init__(self, base: int):
55 self.base = base
56
57 + def __repr__(self) -> str:
58 + return f"MultipleOf({self.base})"
59 +
60
61 class AttentionBackend(ABC):
62 """Abstract class for attention backends."""
vllm/v1/worker/utils.py
+7 -1
@@ -383,7 +383,13 @@ def select_common_block_size(
383 for size in sorted(candidates, reverse=True):
384 if block_size_is_supported(backends, size):
385 return size
386 - raise ValueError(f"No common block size for {kv_manager_block_size}.")
386 + raise ValueError(
387 + f"No common block size for {kv_manager_block_size} ("
388 + + "; ".join(
389 + f"{b.get_name()}: {b.get_supported_kernel_block_sizes()}" for b in backends
390 + )
391 + + ")."
392 + )
393
394
395 def allocate_kv_cache(