From 10d1179d5650abcd9f560cbe7f3be558e3d9d3c1 Mon Sep 17 00:00:00 2001 From: zwan Date: Tue, 14 Apr 2026 02:32:47 +0000 Subject: [PATCH] [Fix] fix full-attention layer id mapping for Hybrid models (e.g. Qwen3-Next/Qwen3.5) --- python/sglang/srt/layers/attention/aiter_backend.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/python/sglang/srt/layers/attention/aiter_backend.py b/python/sglang/srt/layers/attention/aiter_backend.py index d851040cfc37..3ecc31a0fa61 100644 --- a/python/sglang/srt/layers/attention/aiter_backend.py +++ b/python/sglang/srt/layers/attention/aiter_backend.py @@ -123,7 +123,18 @@ def __init__( model_runner.model_config.num_attention_heads // get_attention_tp_size() ) self.head_dim = model_runner.model_config.head_dim - self.v_head_dim = model_runner.token_to_kv_pool.get_value_buffer(0).shape[-1] + # Hybrid models (e.g. Qwen3-Next): KV pool only exists for full-attention layers, + # not layer 0. Match intel_amx_backend: pick any mapped full-attention layer id. + _vbuf_layer_id = 0 + if hasattr( + model_runner.token_to_kv_pool, "full_attention_layer_id_mapping" + ): + _vbuf_layer_id = next( + iter(model_runner.token_to_kv_pool.full_attention_layer_id_mapping) + ) + self.v_head_dim = model_runner.token_to_kv_pool.get_value_buffer( + _vbuf_layer_id + ).shape[-1] self.num_kv_head = model_runner.model_config.get_num_kv_heads( get_attention_tp_size() )