Fix FP8 MoE NaN with DeepGEMM on Blackwell (#16622)
This commit is contained in:
@@ -562,6 +562,21 @@ class Fp8MoEMethod(FusedMoEMethodBase):
|
|||||||
assert self.block_quant, "cutlass_fp8 MoE requires block quantization"
|
assert self.block_quant, "cutlass_fp8 MoE requires block quantization"
|
||||||
assert is_sm100_supported() or is_sm90_supported()
|
assert is_sm100_supported() or is_sm90_supported()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_deepgemm_moe_runner_backend_enabled() -> bool:
|
||||||
|
"""Check if MoE will actually use DeepGEMM runner for FP8."""
|
||||||
|
from sglang.srt.layers import deep_gemm_wrapper
|
||||||
|
from sglang.srt.layers.moe.utils import get_moe_a2a_backend
|
||||||
|
|
||||||
|
moe_runner_backend = get_moe_runner_backend()
|
||||||
|
if moe_runner_backend.is_deep_gemm():
|
||||||
|
return True
|
||||||
|
if moe_runner_backend.is_auto():
|
||||||
|
return deep_gemm_wrapper.ENABLE_JIT_DEEPGEMM and (
|
||||||
|
get_moe_a2a_backend().is_deepep() or get_moe_a2a_backend().is_mooncake()
|
||||||
|
)
|
||||||
|
return False
|
||||||
|
|
||||||
def create_weights(
|
def create_weights(
|
||||||
self,
|
self,
|
||||||
layer: Module,
|
layer: Module,
|
||||||
@@ -808,13 +823,16 @@ class Fp8MoEMethod(FusedMoEMethodBase):
|
|||||||
should_deepgemm_weight_requant_ue8m0,
|
should_deepgemm_weight_requant_ue8m0,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Check if MoE will actually use DeepGEMM runner
|
||||||
|
will_use_deepgemm = self.is_deepgemm_moe_runner_backend_enabled()
|
||||||
|
|
||||||
if (
|
if (
|
||||||
should_deepgemm_weight_requant_ue8m0(
|
should_deepgemm_weight_requant_ue8m0(
|
||||||
weight_block_size=getattr(
|
weight_block_size=getattr(
|
||||||
self.quant_config, "weight_block_size", None
|
self.quant_config, "weight_block_size", None
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
and get_moe_runner_backend().is_deep_gemm()
|
and will_use_deepgemm
|
||||||
and not layer.w13_weight_scale_inv.format_ue8m0
|
and not layer.w13_weight_scale_inv.format_ue8m0
|
||||||
):
|
):
|
||||||
assert isinstance(
|
assert isinstance(
|
||||||
@@ -1031,17 +1049,11 @@ class Fp8MoEMethod(FusedMoEMethodBase):
|
|||||||
def create_moe_runner(
|
def create_moe_runner(
|
||||||
self, layer: torch.nn.Module, moe_runner_config: MoeRunnerConfig
|
self, layer: torch.nn.Module, moe_runner_config: MoeRunnerConfig
|
||||||
):
|
):
|
||||||
|
|
||||||
from sglang.srt.layers import deep_gemm_wrapper
|
|
||||||
from sglang.srt.layers.moe.utils import get_moe_a2a_backend
|
|
||||||
|
|
||||||
self.moe_runner_config = moe_runner_config
|
self.moe_runner_config = moe_runner_config
|
||||||
moe_runner_backend = get_moe_runner_backend()
|
moe_runner_backend = get_moe_runner_backend()
|
||||||
|
|
||||||
if moe_runner_backend.is_auto():
|
if moe_runner_backend.is_auto():
|
||||||
if deep_gemm_wrapper.ENABLE_JIT_DEEPGEMM and (
|
if self.is_deepgemm_moe_runner_backend_enabled():
|
||||||
get_moe_a2a_backend().is_deepep() or get_moe_a2a_backend().is_mooncake()
|
|
||||||
):
|
|
||||||
moe_runner_backend = MoeRunnerBackend.DEEP_GEMM
|
moe_runner_backend = MoeRunnerBackend.DEEP_GEMM
|
||||||
else:
|
else:
|
||||||
moe_runner_backend = MoeRunnerBackend.TRITON
|
moe_runner_backend = MoeRunnerBackend.TRITON
|
||||||
|
|||||||
Reference in New Issue
Block a user