@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 063ce98fb7
Fork 0

A high-throughput and memory-efficient inference and serving engine for LLMs

Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git

Synced Nov 1, 22:30 UTC

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

Signed-off-by: Zhu, Zufang <zufang.zhu@intel.com> Signed-off-by: zofia <110436990+zufangzhu@users.noreply.github.com>

zofia committed Jun 5, 2026 at 08:36 UTC 063ce98fb7104dba93f72d56c094fb8b708bd793
3 files changed +35 -2
.buildkite/intel_jobs/test-intel.yaml
+2 -1
@@ -40,7 +40,8 @@ steps:
40 python3 examples/basic/offline_inference/generate.py --model superjob/Qwen3-4B-Instruct-2507-GPTQ-Int4 --block-size 64 --enforce-eager --max-model-len 8192 &&
41 python3 examples/basic/offline_inference/generate.py --model ibm-research/PowerMoE-3b --block-size 64 --enforce-eager -tp 2 &&
42 python3 examples/basic/offline_inference/generate.py --model ibm-research/PowerMoE-3b --block-size 64 --enforce-eager -tp 2 --enable-expert-parallel &&
43 - python3 examples/basic/offline_inference/generate.py --model superjob/Qwen3-4B-Instruct-2507-GPTQ-Int4 --max-model-len 8192
43 + python3 examples/basic/offline_inference/generate.py --model superjob/Qwen3-4B-Instruct-2507-GPTQ-Int4 --max-model-len 8192 &&
44 + 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
45 '
46 - label: "XPU V1 test"
47 depends_on:
vllm/model_executor/layers/fused_moe/experts/xpu_moe.py
+31
@@ -14,7 +14,9 @@ from vllm.model_executor.layers.fused_moe.topk_weight_and_reduce import (
14 )
15 from vllm.model_executor.layers.quantization.utils.quant_utils import (
16 QuantKey,
17 + kFp8Dynamic128Sym,
18 kFp8DynamicTensorSym,
19 + kFp8Static128BlockSym,
20 kFp8StaticTensorSym,
21 kInt4Static,
22 kMxfp4Static,
@@ -62,6 +64,7 @@ class XPUExperts(mk.FusedMoEExpertsModular):
64 self.is_fp8 = False
65 self.is_int4 = False
66 self.is_mxfp4 = False
67 + self.is_block_fp8 = False
68 self.is_mxfp8 = False
69 self.fused_moe_impl: XpuFusedMoe | None = None
70
@@ -171,6 +174,7 @@ class XPUExperts(mk.FusedMoEExpertsModular):
174 is_int4=self.is_int4,
175 is_mxfp4=self.is_mxfp4,
176 is_mxfp8=self.is_mxfp8,
177 + is_block_fp8=self.is_block_fp8,
178 )
179 assert self.fused_moe_impl is not None
180 self.fused_moe_impl.apply(
@@ -238,6 +242,33 @@ class XPUExpertsMxfp8(XPUExpertsFp8):
242 return (weight_key, activation_key) in SUPPORTED_W_A
243
244
245 +class XPUExpertsBlockFp8(XPUExperts):
246 + def __init__(
247 + self,
248 + moe_config: FusedMoEConfig,
249 + quant_config: FusedMoEQuantConfig,
250 + max_num_tokens: int | None = None,
251 + num_dispatchers: int | None = None,
252 + ):
253 + super().__init__(
254 + moe_config,
255 + quant_config,
256 + max_num_tokens,
257 + num_dispatchers,
258 + )
259 + self.is_block_fp8 = True
260 +
261 + @staticmethod
262 + def _supports_quant_scheme(
263 + weight_key: QuantKey | None,
264 + activation_key: QuantKey | None,
265 + ) -> bool:
266 + SUPPORTED_W_A = [
267 + (kFp8Static128BlockSym, kFp8Dynamic128Sym),
268 + ]
269 + return (weight_key, activation_key) in SUPPORTED_W_A
270 +
271 +
272 class XPUExpertsWNA16(XPUExperts):
273 """W4A16 INT4-symmetric MoE backed by `xpu_fused_moe(is_int4=True)`.
274
vllm/model_executor/layers/fused_moe/oracle/fp8.py
+2 -1
@@ -184,11 +184,12 @@ def backend_to_kernel_cls(
184
185 elif backend == Fp8MoeBackend.XPU:
186 from vllm.model_executor.layers.fused_moe.experts.xpu_moe import (
187 + XPUExpertsBlockFp8,
188 XPUExpertsFp8,
189 XPUExpertsMxfp8,
190 )
191
191 - return [XPUExpertsFp8, XPUExpertsMxfp8]
192 + return [XPUExpertsFp8, XPUExpertsMxfp8, XPUExpertsBlockFp8]
193
194 elif backend == Fp8MoeBackend.CPU:
195 from vllm.model_executor.layers.fused_moe.experts.cpu_moe import (