From 8fa36fbbebdf838953a904531c86fcd05896a4c8 Mon Sep 17 00:00:00 2001 From: Gabriel Wu <13583761+lucifer1004@users.noreply.github.com> Date: Fri, 26 Jun 2026 00:12:00 +0800 Subject: [PATCH] [Bugfix] FLASHINFER_MLA_SPARSE_SM120 compatibility with GLM-5 NVFP4 (#46506) --- .../backends/mla/flashinfer_mla_sparse_sm120.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/vllm/v1/attention/backends/mla/flashinfer_mla_sparse_sm120.py b/vllm/v1/attention/backends/mla/flashinfer_mla_sparse_sm120.py index 35b57b9c2b..d802f56883 100644 --- a/vllm/v1/attention/backends/mla/flashinfer_mla_sparse_sm120.py +++ b/vllm/v1/attention/backends/mla/flashinfer_mla_sparse_sm120.py @@ -81,11 +81,13 @@ class FlashInferMLASparseSM120Impl(SparseMLAAttentionImpl[FlashInferMLASparseMet ) self.kv_scale_format = _kv_scale_format_for_model(model_type) - assert indexer is not None, ( - "FLASHINFER_MLA_SPARSE_SM120 requires a sparse-MLA indexer " - "(model with index_topk in its config)." + # Skip-topk layers are built with indexer=None and get the shared + # buffer via mla_args instead (cf. FLASHMLA_SPARSE). + self.topk_indices_buffer: torch.Tensor | None = ( + indexer.topk_indices_buffer + if indexer is not None + else mla_args.get("topk_indices_buffer") ) - self.topk_indices_buffer: torch.Tensor | None = indexer.topk_indices_buffer from vllm.utils.flashinfer import has_flashinfer_sparse_mla_sm120 if not has_flashinfer_sparse_mla_sm120():