From ad4994dc1d6f060341e921e46df61e8797476c81 Mon Sep 17 00:00:00 2001 From: Cheng Wan <54331508+ch-wan@users.noreply.github.com> Date: Thu, 14 May 2026 22:20:55 -0700 Subject: [PATCH] DeepseekV2MoE: defer shared experts when routed kernel is non-mutating (#25279) Co-authored-by: Claude Opus 4.7 (1M context) --- python/sglang/srt/models/deepseek_v2.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/python/sglang/srt/models/deepseek_v2.py b/python/sglang/srt/models/deepseek_v2.py index 86d93cdd2..e1b77562c 100644 --- a/python/sglang/srt/models/deepseek_v2.py +++ b/python/sglang/srt/models/deepseek_v2.py @@ -826,10 +826,9 @@ class DeepseekV2MoE(nn.Module): if server_args.enable_eplb else None ) + defer_shared = not self.experts.moe_runner_config.inplace if hidden_states.shape[0] > 0: - if ( - not self._fuse_shared_experts_inside_sbo - ): # TODO: check if it supports mtp + if not defer_shared and not self._fuse_shared_experts_inside_sbo: shared_output = self._forward_shared_experts( hidden_states, gemm_output_zero_allocator ) @@ -894,6 +893,15 @@ class DeepseekV2MoE(nn.Module): # fused in biased_grouped_topk so we can skip here final_hidden_states *= self.routed_scaling_factor + if ( + defer_shared + and hidden_states.shape[0] > 0 + and not self._fuse_shared_experts_inside_sbo + ): + shared_output = self._forward_shared_experts( + hidden_states, gemm_output_zero_allocator + ) + final_hidden_states = maybe_fuse_routed_scale_and_shared_add( self.experts, final_hidden_states,