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 4, 17:30 UTC
[MoE] Move cutlass moe to fused_moe/experts/ (#40574)
Signed-off-by: Jackmin801 <ongjackm@gmail.com> Co-authored-by: Claude <noreply@anthropic.com>
Jackmin801 committed
Apr 23, 2026 at 23:05 UTC
079a4cf399ad548d442fd92bfffbfbe460b66133
14 files changed
+20
-18
benchmarks/kernels/benchmark_cutlass_moe_fp8.py
+1
-1
@@ -16,7 +16,7 @@ from vllm.model_executor.layers.fused_moe.all2all_utils import (
16
maybe_make_prepare_finalize,
17
)
18
from vllm.model_executor.layers.fused_moe.config import fp8_w8a8_moe_quant_config
19
-from vllm.model_executor.layers.fused_moe.cutlass_moe import CutlassExpertsFp8
19
+from vllm.model_executor.layers.fused_moe.experts.cutlass_moe import CutlassExpertsFp8
20
from vllm.model_executor.layers.fused_moe.fused_moe import fused_experts, fused_topk
21
from vllm.platforms import current_platform
22
from vllm.utils.argparse_utils import FlexibleArgumentParser
benchmarks/kernels/benchmark_cutlass_moe_nvfp4.py
+1
-1
@@ -22,7 +22,7 @@ from vllm.model_executor.layers.fused_moe.config import (
22
fp8_w8a8_moe_quant_config,
23
nvfp4_moe_quant_config,
24
)
25
-from vllm.model_executor.layers.fused_moe.cutlass_moe import (
25
+from vllm.model_executor.layers.fused_moe.experts.cutlass_moe import (
26
CutlassExpertsFp4,
27
)
28
from vllm.model_executor.layers.fused_moe.fused_moe import fused_experts, fused_topk
benchmarks/kernels/benchmark_grouped_gemm_cutlass.py
+1
-1
@@ -13,7 +13,7 @@ from vllm.model_executor.layers.fused_moe.all2all_utils import (
13
maybe_make_prepare_finalize,
14
)
15
from vllm.model_executor.layers.fused_moe.config import fp8_w8a8_moe_quant_config
16
-from vllm.model_executor.layers.fused_moe.cutlass_moe import CutlassExpertsFp8
16
+from vllm.model_executor.layers.fused_moe.experts.cutlass_moe import CutlassExpertsFp8
17
from vllm.model_executor.layers.fused_moe.fused_moe import (
18
fused_experts,
19
fused_topk,
docs/design/moe_kernel_features.md
+2
-2
@@ -83,8 +83,8 @@ To be used with a particular `FusedMoEPrepareAndFinalizeModular` subclass, MoE k
83
| triton | standard | all<sup>1</sup> | G,A,T | silu, gelu,</br>swigluoai,</br>silu_no_mul,</br>gelu_no_mul | Y | Y | [`fused_experts`][vllm.model_executor.layers.fused_moe.fused_moe.fused_experts],</br>[`TritonExperts`][vllm.model_executor.layers.fused_moe.fused_moe.TritonExperts] |
84
| triton (batched) | batched | all<sup>1</sup> | G,A,T | silu, gelu | <sup>6</sup> | Y | [`BatchedTritonExperts`][vllm.model_executor.layers.fused_moe.fused_batched_moe.BatchedTritonExperts] |
85
| deep gemm | standard,</br>batched | fp8 | G(128),A,T | silu, gelu | <sup>6</sup> | Y | </br>[`DeepGemmExperts`][vllm.model_executor.layers.fused_moe.experts.deep_gemm_moe.DeepGemmExperts],</br>[`BatchedDeepGemmExperts`][vllm.model_executor.layers.fused_moe.experts.batched_deep_gemm_moe.BatchedDeepGemmExperts] |
86
-| cutlass_fp4 | standard,</br>batched | nvfp4 | A,T | silu | Y | Y | [`CutlassExpertsFp4`][vllm.model_executor.layers.fused_moe.cutlass_moe.CutlassExpertsFp4] |
87
-| cutlass_fp8 | standard,</br>batched | fp8 | A,T | silu, gelu | Y | Y | [`CutlassExpertsFp8`][vllm.model_executor.layers.fused_moe.cutlass_moe.CutlassExpertsFp8],</br>[`CutlasBatchedExpertsFp8`][vllm.model_executor.layers.fused_moe.cutlass_moe.CutlassBatchedExpertsFp8] |
86
+| cutlass_fp4 | standard,</br>batched | nvfp4 | A,T | silu | Y | Y | [`CutlassExpertsFp4`][vllm.model_executor.layers.fused_moe.experts.cutlass_moe.CutlassExpertsFp4] |
87
+| cutlass_fp8 | standard,</br>batched | fp8 | A,T | silu, gelu | Y | Y | [`CutlassExpertsFp8`][vllm.model_executor.layers.fused_moe.experts.cutlass_moe.CutlassExpertsFp8],</br>[`CutlasBatchedExpertsFp8`][vllm.model_executor.layers.fused_moe.experts.cutlass_moe.CutlassBatchedExpertsFp8] |
88
| flashinfer | standard | nvfp4,</br>fp8 | T | <sup>5</sup> | N | Y | [`FlashInferExperts`][vllm.model_executor.layers.fused_moe.flashinfer_cutlass_moe.FlashInferExperts] |
89
| gpt oss triton | standard | N/A | N/A | <sup>5</sup> | Y | Y | [`triton_kernel_fused_experts`][vllm.model_executor.layers.fused_moe.experts.gpt_oss_triton_kernels_moe.triton_kernel_fused_experts],</br>[`OAITritonExperts`][vllm.model_executor.layers.fused_moe.experts.gpt_oss_triton_kernels_moe.OAITritonExperts] |
90
| marlin | standard,</br>batched | <sup>3</sup> / N/A | <sup>3</sup> / N/A | silu,</br>swigluoai | Y | Y | [`fused_marlin_moe`][vllm.model_executor.layers.fused_moe.fused_marlin_moe.fused_marlin_moe],</br>[`MarlinExperts`][vllm.model_executor.layers.fused_moe.fused_marlin_moe.MarlinExperts],</br>[`BatchedMarlinExperts`][vllm.model_executor.layers.fused_moe.fused_marlin_moe.BatchedMarlinExperts] |
tests/kernels/moe/modular_kernel_tools/mk_objects.py
+3
-1
@@ -367,7 +367,9 @@ else:
367
CutlassExpertsFp8 = None
368
369
if cutlass_fp4_supported():
370
- from vllm.model_executor.layers.fused_moe.cutlass_moe import CutlassExpertsFp4
370
+ from vllm.model_executor.layers.fused_moe.experts.cutlass_moe import (
371
+ CutlassExpertsFp4,
372
+ )
373
374
register_experts(
375
CutlassExpertsFp4,
tests/kernels/moe/test_cutlass_moe.py
+1
-1
@@ -21,7 +21,7 @@ from vllm.model_executor.layers.fused_moe.config import (
21
FusedMoEQuantConfig,
22
fp8_w8a8_moe_quant_config,
23
)
24
-from vllm.model_executor.layers.fused_moe.cutlass_moe import (
24
+from vllm.model_executor.layers.fused_moe.experts.cutlass_moe import (
25
CutlassExpertsFp8,
26
run_cutlass_moe_fp8,
27
)
tests/kernels/moe/test_nvfp4_moe.py
+1
-1
@@ -19,7 +19,7 @@ from vllm.model_executor.layers.fused_moe.all2all_utils import (
19
maybe_make_prepare_finalize,
20
)
21
from vllm.model_executor.layers.fused_moe.config import nvfp4_moe_quant_config
22
-from vllm.model_executor.layers.fused_moe.cutlass_moe import (
22
+from vllm.model_executor.layers.fused_moe.experts.cutlass_moe import (
23
CutlassExpertsFp4,
24
)
25
from vllm.model_executor.layers.fused_moe.prepare_finalize import (
vllm/model_executor/layers/fused_moe/__init__.py
+4
-4
@@ -73,15 +73,15 @@ __all__ = [
73
74
if HAS_TRITON:
75
# import to register the custom ops
76
- from vllm.model_executor.layers.fused_moe.cutlass_moe import (
76
+ from vllm.model_executor.layers.fused_moe.experts.batched_deep_gemm_moe import (
77
+ BatchedDeepGemmExperts,
78
+ )
79
+ from vllm.model_executor.layers.fused_moe.experts.cutlass_moe import (
80
CutlassBatchedExpertsFp8,
81
CutlassExpertsFp8,
82
CutlassExpertsW4A8Fp8,
83
cutlass_moe_w4a8_fp8,
84
)
82
- from vllm.model_executor.layers.fused_moe.experts.batched_deep_gemm_moe import (
83
- BatchedDeepGemmExperts,
84
- )
85
from vllm.model_executor.layers.fused_moe.experts.deep_gemm_moe import (
86
DeepGemmExperts,
87
)
vllm/model_executor/layers/fused_moe/experts/cutlass_moe.py
renamed
vllm/model_executor/layers/fused_moe/oracle/fp8.py
+1
-1
@@ -173,7 +173,7 @@ def backend_to_kernel_cls(
173
return [TritonOrCutlassExperts]
174
175
elif backend == Fp8MoeBackend.BATCHED_VLLM_CUTLASS:
176
- from vllm.model_executor.layers.fused_moe.cutlass_moe import (
176
+ from vllm.model_executor.layers.fused_moe.experts.cutlass_moe import (
177
CutlassBatchedExpertsFp8,
178
)
179
vllm/model_executor/layers/fused_moe/oracle/nvfp4.py
+1
-1
@@ -107,7 +107,7 @@ def backend_to_kernel_cls(
107
return [FlashInferCuteDSLBatchedExperts]
108
109
elif backend == NvFp4MoeBackend.VLLM_CUTLASS:
110
- from vllm.model_executor.layers.fused_moe.cutlass_moe import (
110
+ from vllm.model_executor.layers.fused_moe.experts.cutlass_moe import (
111
CutlassExpertsFp4,
112
)
113
vllm/model_executor/layers/fused_moe/triton_cutlass_moe.py
+1
-1
@@ -10,7 +10,7 @@ from vllm.model_executor.layers.fused_moe.config import (
10
FusedMoEConfig,
11
FusedMoEQuantConfig,
12
)
13
-from vllm.model_executor.layers.fused_moe.cutlass_moe import CutlassExpertsFp8
13
+from vllm.model_executor.layers.fused_moe.experts.cutlass_moe import CutlassExpertsFp8
14
from vllm.model_executor.layers.fused_moe.fallback import FallbackExperts
15
from vllm.model_executor.layers.fused_moe.fused_moe import TritonExperts
16
from vllm.platforms import current_platform
vllm/model_executor/layers/quantization/compressed_tensors/compressed_tensors_moe/compressed_tensors_moe_w4a4_mxfp4.py
+2
-2
@@ -14,7 +14,7 @@ from vllm.model_executor.layers.fused_moe.config import (
14
FusedMoEQuantConfig,
15
mxfp4_moe_quant_config,
16
)
17
-from vllm.model_executor.layers.fused_moe.cutlass_moe import (
17
+from vllm.model_executor.layers.fused_moe.experts.cutlass_moe import (
18
CutlassExpertsMxfp4,
19
)
20
from vllm.model_executor.layers.fused_moe.fused_marlin_moe import (
@@ -149,7 +149,7 @@ class CompressedTensorsW4A4Mxfp4MoEMethod(CompressedTensorsMoEMethod):
149
if self.use_cutlass_mxfp4:
150
# Swizzle weight scales from flat checkpoint layout [E, N, K//32]
151
# to CUTLASS tiled layout [E, numMTiles*numKTiles*512].
152
- from vllm.model_executor.layers.fused_moe.cutlass_moe import (
152
+ from vllm.model_executor.layers.fused_moe.experts.cutlass_moe import (
153
swizzle_mxfp4_scales,
154
)
155
vllm/model_executor/layers/quantization/compressed_tensors/compressed_tensors_moe/compressed_tensors_moe_w4a8_fp8.py
+1
-1
@@ -315,7 +315,7 @@ class CompressedTensorsW4A8Fp8MoEMethod(CompressedTensorsMoEMethod):
315
)
316
assert self.moe_quant_config is not None
317
318
- from vllm.model_executor.layers.fused_moe.cutlass_moe import (
318
+ from vllm.model_executor.layers.fused_moe.experts.cutlass_moe import (
319
cutlass_moe_w4a8_fp8,
320
)
321