From 9266d980480c8da52a0c29960e9086128e19d664 Mon Sep 17 00:00:00 2001 From: Yong Hoon Shin <48474650+sarckk@users.noreply.github.com> Date: Tue, 29 Jul 2025 16:34:19 -0700 Subject: [PATCH] [BugFix] Fix interleaved sliding window not set for Gemma3n (#21863) Signed-off-by: Yong Hoon Shin --- vllm/config.py | 9 +++++++-- vllm/model_executor/models/gemma3n.py | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/vllm/config.py b/vllm/config.py index 86c3b9eae64cb..1dfc746e2002d 100644 --- a/vllm/config.py +++ b/vllm/config.py @@ -723,11 +723,16 @@ class ModelConfig: ) # Workaround for Gemma 2 which uses interleaved sliding window - # attention, but it's not specified in its config. TODO: remove this - # when Gemma 2 is fixed in Transformers. + # attention, but it's not specified in its config. + # TODO: remove this when Gemma 2 config updated in HuggingFace. if self.hf_text_config.model_type == "gemma2": self.hf_text_config.sliding_window_pattern = 2 + # TODO: remove this when Gemma 3n config updated in HuggingFace. + if self.hf_text_config.model_type == "gemma3n_text": + # 4 sliding window attention followed by 1 full attention + self.hf_text_config.sliding_window_pattern = "LLLLG" + sliding_window = getattr(self.hf_text_config, "sliding_window", None) sliding_window_pattern = getattr(self.hf_text_config, "sliding_window_pattern", None) diff --git a/vllm/model_executor/models/gemma3n.py b/vllm/model_executor/models/gemma3n.py index 7d163320e0d6a..168665cc29655 100644 --- a/vllm/model_executor/models/gemma3n.py +++ b/vllm/model_executor/models/gemma3n.py @@ -297,8 +297,13 @@ class Gemma3nAttention(nn.Module): has_weight=False) layer_idx = extract_layer_index(prefix) - if config.layer_types[layer_idx] == "sliding_attention": - self.sliding_window = config.sliding_window + + is_sliding_window = ( + getattr(config, "interleaved_sliding_window", None) is not None + and config.layer_types[layer_idx] == "sliding_attention") + + if is_sliding_window: + self.sliding_window = config.interleaved_sliding_window rope_theta = config.rope_local_base_freq rope_scaling = {"rope_type": "default"} else: