From 486ec150d0a8edec6cc006a53bd4be9c76b51602 Mon Sep 17 00:00:00 2001 From: iridiumine <42236072+iridiumine@users.noreply.github.com> Date: Tue, 16 Jun 2026 11:37:05 +0800 Subject: [PATCH] [NPU] Add NPU fallback for fused Triton gating kernels (#28293) --- python/sglang/srt/models/qwen2_moe.py | 1 + python/sglang/srt/models/qwen3_5.py | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/python/sglang/srt/models/qwen2_moe.py b/python/sglang/srt/models/qwen2_moe.py index d0186f870..40b2b108d 100644 --- a/python/sglang/srt/models/qwen2_moe.py +++ b/python/sglang/srt/models/qwen2_moe.py @@ -540,6 +540,7 @@ class Qwen2MoeSparseMoeBlock(nn.Module): use_fused_gate = ( self.shared_expert_gate is not None and not use_intel_amx_backend(self.shared_expert_gate) + and not is_npu() ) if hidden_states.shape[0] == 0: diff --git a/python/sglang/srt/models/qwen3_5.py b/python/sglang/srt/models/qwen3_5.py index e8648b4b0..4273be43c 100644 --- a/python/sglang/srt/models/qwen3_5.py +++ b/python/sglang/srt/models/qwen3_5.py @@ -983,7 +983,11 @@ class Qwen3_5AttentionDecoderLayer(nn.Module): attn_output = self.attn(q, k, v, forward_batch) if self.attn_output_gate: - attn_output = fused_sigmoid_mul(attn_output, gate, inplace=True) + if not _is_npu: + attn_output = fused_sigmoid_mul(attn_output, gate, inplace=True) + else: + gate_val = gate.reshape(gate.shape[0], -1) if gate.ndim == 3 else gate + attn_output.mul_(torch.sigmoid(gate_val)) output, _ = self.o_proj(attn_output) return output