Fix EPLB + FP4 Quantization Compatibility Issue (#13715)

Co-authored-by: Shu Wang <shuw@nvidia.com>
This commit is contained in:
Shifang Xu
2026-01-10 13:38:19 +08:00
committed by GitHub
co-authored by Shu Wang
parent c89949bbaf
commit d27f16f38a
8 changed files with 49 additions and 3 deletions
+12
View File
@@ -249,6 +249,18 @@ def get_tbo_token_distribution_threshold() -> float:
return TBO_TOKEN_DISTRIBUTION_THRESHOLD return TBO_TOKEN_DISTRIBUTION_THRESHOLD
def filter_moe_weight_param_global_expert(name, x, num_local_experts):
"""
Filter out for MoE expert parameters that requires global expert.
"""
return (
not getattr(x, "_sglang_require_global_experts", False)
and not name.endswith("_blockscale_swizzled")
and x.data.ndim > 0
and x.data.shape[0] == num_local_experts
)
def should_use_flashinfer_cutlass_moe_fp4_allgather(): def should_use_flashinfer_cutlass_moe_fp4_allgather():
""" """
Perform FP4 quantize before all-gather for flashinfer cutlass moe to reduce communication cost for high-throughput serving. Perform FP4 quantize before all-gather for flashinfer cutlass moe to reduce communication cost for high-throughput serving.
+4
View File
@@ -63,6 +63,7 @@ from sglang.srt.layers.moe.ep_moe.layer import get_moe_impl_class
from sglang.srt.layers.moe.fused_moe_triton.layer import FusedMoE from sglang.srt.layers.moe.fused_moe_triton.layer import FusedMoE
from sglang.srt.layers.moe.token_dispatcher import DeepEPDispatcher from sglang.srt.layers.moe.token_dispatcher import DeepEPDispatcher
from sglang.srt.layers.moe.topk import TopK from sglang.srt.layers.moe.topk import TopK
from sglang.srt.layers.moe.utils import filter_moe_weight_param_global_expert
from sglang.srt.layers.quantization.base_config import QuantizationConfig from sglang.srt.layers.quantization.base_config import QuantizationConfig
from sglang.srt.layers.radix_attention import RadixAttention from sglang.srt.layers.radix_attention import RadixAttention
from sglang.srt.layers.rotary_embedding import get_rope from sglang.srt.layers.rotary_embedding import get_rope
@@ -324,6 +325,9 @@ class BailingMoESparseMoeBlock(nn.Module):
x.data x.data
for name, x in self.experts.named_parameters() for name, x in self.experts.named_parameters()
if name not in ["correction_bias"] if name not in ["correction_bias"]
and filter_moe_weight_param_global_expert(
name, x, self.experts.num_local_experts
)
] ]
def _forward_shared_experts(self, hidden_states: torch.Tensor): def _forward_shared_experts(self, hidden_states: torch.Tensor):
+7 -1
View File
@@ -103,7 +103,10 @@ from sglang.srt.layers.moe.token_dispatcher.base import (
DispatchOutput, DispatchOutput,
) )
from sglang.srt.layers.moe.topk import TopK, TopKOutputFormat from sglang.srt.layers.moe.topk import TopK, TopKOutputFormat
from sglang.srt.layers.moe.utils import RoutingMethodType from sglang.srt.layers.moe.utils import (
RoutingMethodType,
filter_moe_weight_param_global_expert,
)
from sglang.srt.layers.quantization.base_config import QuantizationConfig from sglang.srt.layers.quantization.base_config import QuantizationConfig
from sglang.srt.layers.quantization.fp8 import Fp8Config from sglang.srt.layers.quantization.fp8 import Fp8Config
from sglang.srt.layers.quantization.fp8_kernel import ( from sglang.srt.layers.quantization.fp8_kernel import (
@@ -587,6 +590,9 @@ class DeepseekV2MoE(nn.Module):
x.data x.data
for name, x in self.experts.named_parameters() for name, x in self.experts.named_parameters()
if name not in ["correction_bias"] if name not in ["correction_bias"]
and filter_moe_weight_param_global_expert(
name, x, self.experts.num_local_experts
)
] ]
def forward( def forward(
+4
View File
@@ -63,6 +63,7 @@ from sglang.srt.layers.moe import (
from sglang.srt.layers.moe.ep_moe.layer import get_moe_impl_class from sglang.srt.layers.moe.ep_moe.layer import get_moe_impl_class
from sglang.srt.layers.moe.fused_moe_triton.layer import FusedMoE from sglang.srt.layers.moe.fused_moe_triton.layer import FusedMoE
from sglang.srt.layers.moe.topk import TopK from sglang.srt.layers.moe.topk import TopK
from sglang.srt.layers.moe.utils import filter_moe_weight_param_global_expert
from sglang.srt.layers.quantization.base_config import QuantizationConfig from sglang.srt.layers.quantization.base_config import QuantizationConfig
from sglang.srt.layers.quantization.fp8_kernel import is_fp8_fnuz from sglang.srt.layers.quantization.fp8_kernel import is_fp8_fnuz
from sglang.srt.layers.radix_attention import RadixAttention from sglang.srt.layers.radix_attention import RadixAttention
@@ -438,6 +439,9 @@ class Glm4MoeSparseMoeBlock(nn.Module):
x.data x.data
for name, x in self.experts.named_parameters() for name, x in self.experts.named_parameters()
if name not in ["correction_bias"] if name not in ["correction_bias"]
and filter_moe_weight_param_global_expert(
name, x, self.experts.num_local_experts
)
] ]
def forward( def forward(
+4
View File
@@ -54,6 +54,7 @@ from sglang.srt.layers.moe import get_moe_a2a_backend
from sglang.srt.layers.moe.ep_moe.layer import get_moe_impl_class from sglang.srt.layers.moe.ep_moe.layer import get_moe_impl_class
from sglang.srt.layers.moe.fused_moe_triton.layer import FusedMoE from sglang.srt.layers.moe.fused_moe_triton.layer import FusedMoE
from sglang.srt.layers.moe.topk import TopK from sglang.srt.layers.moe.topk import TopK
from sglang.srt.layers.moe.utils import filter_moe_weight_param_global_expert
from sglang.srt.layers.quantization.base_config import QuantizationConfig from sglang.srt.layers.quantization.base_config import QuantizationConfig
from sglang.srt.layers.quantization.fp8_utils import dequant_mxfp4 from sglang.srt.layers.quantization.fp8_utils import dequant_mxfp4
from sglang.srt.layers.radix_attention import RadixAttention from sglang.srt.layers.radix_attention import RadixAttention
@@ -169,6 +170,9 @@ class GptOssSparseMoeBlock(nn.Module):
x.data x.data
for name, x in self.experts.named_parameters() for name, x in self.experts.named_parameters()
if name not in ["correction_bias"] if name not in ["correction_bias"]
and filter_moe_weight_param_global_expert(
name, x, self.experts.num_local_experts
)
] ]
def forward_normal( def forward_normal(
@@ -63,6 +63,7 @@ from sglang.srt.layers.moe.ep_moe.kernels import zero_experts_compute_triton
from sglang.srt.layers.moe.ep_moe.layer import DeepEPMoE, get_moe_impl_class from sglang.srt.layers.moe.ep_moe.layer import DeepEPMoE, get_moe_impl_class
from sglang.srt.layers.moe.fused_moe_triton.layer import FusedMoE from sglang.srt.layers.moe.fused_moe_triton.layer import FusedMoE
from sglang.srt.layers.moe.topk import StandardTopKOutput, TopK from sglang.srt.layers.moe.topk import StandardTopKOutput, TopK
from sglang.srt.layers.moe.utils import filter_moe_weight_param_global_expert
from sglang.srt.layers.quantization.base_config import QuantizationConfig from sglang.srt.layers.quantization.base_config import QuantizationConfig
from sglang.srt.layers.quantization.fp8_kernel import is_fp8_fnuz from sglang.srt.layers.quantization.fp8_kernel import is_fp8_fnuz
from sglang.srt.layers.quantization.fp8_utils import ( from sglang.srt.layers.quantization.fp8_utils import (
@@ -295,6 +296,9 @@ class LongcatFlashMoE(nn.Module):
x.data x.data
for name, x in self.experts.named_parameters() for name, x in self.experts.named_parameters()
if name not in ["correction_bias"] if name not in ["correction_bias"]
and filter_moe_weight_param_global_expert(
name, x, self.experts.num_local_experts
)
] ]
+7 -1
View File
@@ -58,7 +58,10 @@ from sglang.srt.layers.moe import get_moe_a2a_backend
from sglang.srt.layers.moe.ep_moe.layer import get_moe_impl_class from sglang.srt.layers.moe.ep_moe.layer import get_moe_impl_class
from sglang.srt.layers.moe.fused_moe_triton import FusedMoE from sglang.srt.layers.moe.fused_moe_triton import FusedMoE
from sglang.srt.layers.moe.topk import TopK from sglang.srt.layers.moe.topk import TopK
from sglang.srt.layers.moe.utils import RoutingMethodType from sglang.srt.layers.moe.utils import (
RoutingMethodType,
filter_moe_weight_param_global_expert,
)
from sglang.srt.layers.quantization.base_config import QuantizationConfig from sglang.srt.layers.quantization.base_config import QuantizationConfig
from sglang.srt.layers.radix_attention import RadixAttention from sglang.srt.layers.radix_attention import RadixAttention
from sglang.srt.layers.rotary_embedding import get_rope from sglang.srt.layers.rotary_embedding import get_rope
@@ -223,6 +226,9 @@ class Qwen2MoeSparseMoeBlock(nn.Module):
x.data x.data
for name, x in self.experts.named_parameters() for name, x in self.experts.named_parameters()
if name not in ["correction_bias"] if name not in ["correction_bias"]
and filter_moe_weight_param_global_expert(
name, x, self.experts.num_local_experts
)
] ]
def _forward_shared_experts(self, hidden_states: torch.Tensor): def _forward_shared_experts(self, hidden_states: torch.Tensor):
+7 -1
View File
@@ -51,7 +51,10 @@ from sglang.srt.layers.moe import (
from sglang.srt.layers.moe.ep_moe.layer import get_moe_impl_class from sglang.srt.layers.moe.ep_moe.layer import get_moe_impl_class
from sglang.srt.layers.moe.fused_moe_triton.layer import FusedMoE from sglang.srt.layers.moe.fused_moe_triton.layer import FusedMoE
from sglang.srt.layers.moe.topk import TopK from sglang.srt.layers.moe.topk import TopK
from sglang.srt.layers.moe.utils import RoutingMethodType from sglang.srt.layers.moe.utils import (
RoutingMethodType,
filter_moe_weight_param_global_expert,
)
from sglang.srt.layers.quantization.base_config import QuantizationConfig from sglang.srt.layers.quantization.base_config import QuantizationConfig
from sglang.srt.layers.radix_attention import RadixAttention from sglang.srt.layers.radix_attention import RadixAttention
from sglang.srt.layers.rotary_embedding import MRotaryEmbedding, get_rope from sglang.srt.layers.rotary_embedding import MRotaryEmbedding, get_rope
@@ -281,6 +284,9 @@ class Qwen3MoeSparseMoeBlock(nn.Module):
x.data x.data
for name, x in self.experts.named_parameters() for name, x in self.experts.named_parameters()
if name not in ["correction_bias"] if name not in ["correction_bias"]
and filter_moe_weight_param_global_expert(
name, x, self.experts.num_local_experts
)
] ]
def forward_normal( def forward_normal(