From 0afd68321bc7fbb17ac13ba26307b411b9adbe4c Mon Sep 17 00:00:00 2001 From: Xun Sun Date: Sun, 2 Nov 2025 09:48:47 +0800 Subject: [PATCH] Update Mooncake EP's a2a interface (#12391) --- .../layers/moe/token_dispatcher/mooncake.py | 24 ++++++++++++------- python/sglang/srt/layers/quantization/fp8.py | 5 ++-- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/python/sglang/srt/layers/moe/token_dispatcher/mooncake.py b/python/sglang/srt/layers/moe/token_dispatcher/mooncake.py index d21e46740..e27128ca7 100644 --- a/python/sglang/srt/layers/moe/token_dispatcher/mooncake.py +++ b/python/sglang/srt/layers/moe/token_dispatcher/mooncake.py @@ -2,7 +2,7 @@ from __future__ import annotations import logging from dataclasses import dataclass -from typing import NamedTuple, Optional, Tuple +from typing import TYPE_CHECKING, NamedTuple, Optional, Tuple from sglang.srt.elastic_ep.elastic_ep import ElasticEPStateManager from sglang.srt.eplb.expert_distribution import get_global_expert_distribution_recorder @@ -18,6 +18,9 @@ from sglang.srt.layers.moe.topk import TopKOutput from sglang.srt.layers.moe.utils import DeepEPMode from sglang.srt.utils import get_int_env_var +if TYPE_CHECKING: + from sglang.srt.single_batch_overlap import CombineOverlapArgs + try: from mooncake.mooncake_ep_buffer import Buffer @@ -234,13 +237,14 @@ class _MooncakeEPDispatcherImpl: hidden_states: torch.Tensor, topk_ids: torch.Tensor, topk_weights: torch.Tensor, + overlap_args: Optional[CombineOverlapArgs] = None, ): hidden_states, event, hook = self._combine_core( hidden_states, topk_ids, topk_weights, ) - return hidden_states, event, hook + return hidden_states, event, hook, overlap_args def combine_b(self, hidden_states, event, hook): hook() if self.return_recv_hook else event.current_stream_wait() @@ -342,23 +346,27 @@ class MooncakeEPDispatcher(BaseDispatcher): del self._dispatch_intermediate_state return self._get_impl().dispatch_b(*inner_state) - def combine(self, *args, **kwargs) -> Tuple: - self.combine_a(*args, **kwargs) + def combine( + self, + combine_input: CombineInput, + overlap_args: Optional[CombineOverlapArgs] = None, + ) -> Tuple: + self.combine_a(combine_input, overlap_args) ret = self.combine_b() return ret def combine_a( self, - hidden_states: torch.Tensor, - topk_ids: torch.Tensor, - topk_weights: torch.Tensor, - overlap_args: Optional = None, + combine_input: CombineInput, + overlap_args: Optional[CombineOverlapArgs] = None, ): + hidden_states, topk_ids, topk_weights = combine_input self._update_stage(_Stage.AFTER_DISPATCH_B, _Stage.AFTER_COMBINE_A) inner_state = self._get_impl().combine_a( hidden_states=hidden_states, topk_ids=topk_ids, topk_weights=topk_weights, + overlap_args=overlap_args, ) self._combine_intermediate_state = inner_state diff --git a/python/sglang/srt/layers/quantization/fp8.py b/python/sglang/srt/layers/quantization/fp8.py index 91b54e125..3fd5e9cf7 100644 --- a/python/sglang/srt/layers/quantization/fp8.py +++ b/python/sglang/srt/layers/quantization/fp8.py @@ -962,9 +962,8 @@ class Fp8MoEMethod(FusedMoEMethodBase): moe_runner_backend = get_moe_runner_backend() if moe_runner_backend.is_auto(): - if ( - deep_gemm_wrapper.ENABLE_JIT_DEEPGEMM - and get_moe_a2a_backend().is_deepep() + if deep_gemm_wrapper.ENABLE_JIT_DEEPGEMM and ( + get_moe_a2a_backend().is_deepep() or get_moe_a2a_backend().is_mooncake() ): moe_runner_backend = MoeRunnerBackend.DEEP_GEMM else: