From 063ce98fb7104dba93f72d56c094fb8b708bd793 Mon Sep 17 00:00:00 2001 From: zofia <110436990+zufangzhu@users.noreply.github.com> Date: Fri, 5 Jun 2026 08:36:58 +0800 Subject: [PATCH] [XPU][MoE] support block_fp8_moe on xpu (#42139) Signed-off-by: Zhu, Zufang Signed-off-by: zofia <110436990+zufangzhu@users.noreply.github.com> --- .buildkite/intel_jobs/test-intel.yaml | 3 +- .../layers/fused_moe/experts/xpu_moe.py | 31 +++++++++++++++++++ .../layers/fused_moe/oracle/fp8.py | 3 +- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/.buildkite/intel_jobs/test-intel.yaml b/.buildkite/intel_jobs/test-intel.yaml index 805b7e54f12..63ce93c4810 100644 --- a/.buildkite/intel_jobs/test-intel.yaml +++ b/.buildkite/intel_jobs/test-intel.yaml @@ -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: diff --git a/vllm/model_executor/layers/fused_moe/experts/xpu_moe.py b/vllm/model_executor/layers/fused_moe/experts/xpu_moe.py index 82969dd8e25..94208326461 100644 --- a/vllm/model_executor/layers/fused_moe/experts/xpu_moe.py +++ b/vllm/model_executor/layers/fused_moe/experts/xpu_moe.py @@ -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)`. diff --git a/vllm/model_executor/layers/fused_moe/oracle/fp8.py b/vllm/model_executor/layers/fused_moe/oracle/fp8.py index 0a2e3846dd9..cce3245b75c 100644 --- a/vllm/model_executor/layers/fused_moe/oracle/fp8.py +++ b/vllm/model_executor/layers/fused_moe/oracle/fp8.py @@ -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 (