Fix EPLB + FP4 Quantization Compatibility Issue (#13715)
Co-authored-by: Shu Wang <shuw@nvidia.com>
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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
|
||||||
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user