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 (