[XPU][MoE] support block_fp8_moe on xpu (#42139)

Signed-off-by: Zhu, Zufang <[email protected]>
Signed-off-by: zofia <[email protected]>
This commit is contained in:
zofia
2026-06-05 08:36:58 +08:00
committed by GitHub
parent 62d6f06e3d
commit 063ce98fb7
3 changed files with 35 additions and 2 deletions
+2 -1
View File
@@ -40,7 +40,8 @@ steps:
python3 examples/basic/offline_inference/generate.py --model superjob/Qwen3-4B-Instruct-2507-GPTQ-Int4 --block-size 64 --enforce-eager --max-model-len 8192 &&
python3 examples/basic/offline_inference/generate.py --model ibm-research/PowerMoE-3b --block-size 64 --enforce-eager -tp 2 &&
python3 examples/basic/offline_inference/generate.py --model ibm-research/PowerMoE-3b --block-size 64 --enforce-eager -tp 2 --enable-expert-parallel &&
python3 examples/basic/offline_inference/generate.py --model superjob/Qwen3-4B-Instruct-2507-GPTQ-Int4 --max-model-len 8192
python3 examples/basic/offline_inference/generate.py --model superjob/Qwen3-4B-Instruct-2507-GPTQ-Int4 --max-model-len 8192 &&
VLLM_XPU_FUSED_MOE_USE_REF=1 python3 examples/basic/offline_inference/generate.py --model Qwen/Qwen3-30B-A3B-Instruct-2507-FP8 --enforce-eager -tp 2
'
- label: "XPU V1 test"
depends_on:
@@ -14,7 +14,9 @@ from vllm.model_executor.layers.fused_moe.topk_weight_and_reduce import (
)
from vllm.model_executor.layers.quantization.utils.quant_utils import (
QuantKey,
kFp8Dynamic128Sym,
kFp8DynamicTensorSym,
kFp8Static128BlockSym,
kFp8StaticTensorSym,
kInt4Static,
kMxfp4Static,
@@ -62,6 +64,7 @@ class XPUExperts(mk.FusedMoEExpertsModular):
self.is_fp8 = False
self.is_int4 = False
self.is_mxfp4 = False
self.is_block_fp8 = False
self.is_mxfp8 = False
self.fused_moe_impl: XpuFusedMoe | None = None
@@ -171,6 +174,7 @@ class XPUExperts(mk.FusedMoEExpertsModular):
is_int4=self.is_int4,
is_mxfp4=self.is_mxfp4,
is_mxfp8=self.is_mxfp8,
is_block_fp8=self.is_block_fp8,
)
assert self.fused_moe_impl is not None
self.fused_moe_impl.apply(
@@ -238,6 +242,33 @@ class XPUExpertsMxfp8(XPUExpertsFp8):
return (weight_key, activation_key) in SUPPORTED_W_A
class XPUExpertsBlockFp8(XPUExperts):
def __init__(
self,
moe_config: FusedMoEConfig,
quant_config: FusedMoEQuantConfig,
max_num_tokens: int | None = None,
num_dispatchers: int | None = None,
):
super().__init__(
moe_config,
quant_config,
max_num_tokens,
num_dispatchers,
)
self.is_block_fp8 = True
@staticmethod
def _supports_quant_scheme(
weight_key: QuantKey | None,
activation_key: QuantKey | None,
) -> bool:
SUPPORTED_W_A = [
(kFp8Static128BlockSym, kFp8Dynamic128Sym),
]
return (weight_key, activation_key) in SUPPORTED_W_A
class XPUExpertsWNA16(XPUExperts):
"""W4A16 INT4-symmetric MoE backed by `xpu_fused_moe(is_int4=True)`.
@@ -184,11 +184,12 @@ def backend_to_kernel_cls(
elif backend == Fp8MoeBackend.XPU:
from vllm.model_executor.layers.fused_moe.experts.xpu_moe import (
XPUExpertsBlockFp8,
XPUExpertsFp8,
XPUExpertsMxfp8,
)
return [XPUExpertsFp8, XPUExpertsMxfp8]
return [XPUExpertsFp8, XPUExpertsMxfp8, XPUExpertsBlockFp8]
elif backend == Fp8MoeBackend.CPU:
from vllm.model_executor.layers.fused_moe.experts.cpu_moe import (