---
id: pr-vllm-41979
repo: vllm-project/vllm
pr: 41979
title: '[MoE] Move various experts classes to fused_moe/experts/'
author: bnellnm
date: '2026-05-10'
url: https://github.com/vllm-project/vllm/pull/41979
source_category: upstream-code
architectures:
- sm100
tags:
- FlashInfer
- Marlin
- MoE kernel
- cutlass
- fused moe
- gemm_quant
- moe_routing
- topk
techniques:
- fine-grained-quantization
- kernel-fusion
hardware_features:
- fp4
- fp8
- nvfp4
kernel_types:
- gemm
- moe
languages:
- cuda-cpp
- cute-dsl
- triton
captured_at: '2026-05-16'
status: merged
merge_sha: 1b57eb41f24166d0bee2031c53847b188089d77d
inclusion_reason: Inspect scale layout, accumulator type, tile/schedule choice, epilogue fusion, and partial-tile guards before deriving a candidate.
changed_paths:
- csrc/quantization/gguf/moe.cuh
- docs/design/custom_op.md
- docs/design/moe_kernel_features.md
- tests/kernels/moe/modular_kernel_tools/mk_objects.py
- tests/kernels/moe/test_flashinfer.py
- tests/kernels/moe/test_flashinfer_moe.py
- tests/kernels/moe/test_marlin_vs_trtllm_mxint4.py
- tests/kernels/moe/test_moe.py
- tests/kernels/moe/test_rocm_aiter_topk.py
- tests/kernels/moe/test_triton_moe_no_act_mul.py
- tests/kernels/moe/test_unquantized_backend_selection.py
- tests/kernels/moe/utils.py
- vllm/model_executor/layers/fused_moe/__init__.py
- vllm/model_executor/layers/fused_moe/experts/flashinfer_cutlass_moe.py
- vllm/model_executor/layers/fused_moe/experts/marlin_moe.py
- vllm/model_executor/layers/fused_moe/experts/nvfp4_emulation_moe.py
- vllm/model_executor/layers/fused_moe/experts/ocp_mx_emulation_moe.py
- vllm/model_executor/layers/fused_moe/experts/rocm_aiter_moe.py
- vllm/model_executor/layers/fused_moe/experts/triton_moe.py
- vllm/model_executor/layers/fused_moe/fused_moe.py
- vllm/model_executor/layers/fused_moe/layer.py
- vllm/model_executor/layers/fused_moe/oracle/fp8.py
- vllm/model_executor/layers/fused_moe/oracle/int8.py
- vllm/model_executor/layers/fused_moe/oracle/int_wna16.py
- vllm/model_executor/layers/fused_moe/oracle/mxfp4.py
- vllm/model_executor/layers/fused_moe/oracle/nvfp4.py
- vllm/model_executor/layers/fused_moe/oracle/unquantized.py
- vllm/model_executor/layers/fused_moe/router/grouped_topk_router.py
- vllm/model_executor/layers/fused_moe/triton_cutlass_moe.py
- vllm/model_executor/layers/fused_moe/triton_deep_gemm_moe.py
- vllm/model_executor/layers/quantization/awq_marlin.py
- vllm/model_executor/layers/quantization/compressed_tensors/compressed_tensors_moe/compressed_tensors_moe_w4a4_mxfp4.py
- vllm/model_executor/layers/quantization/compressed_tensors/compressed_tensors_moe/compressed_tensors_moe_wna16_marlin.py
- vllm/model_executor/layers/quantization/quark/quark_moe.py
artifact_dir: evidence/pull-bundles/vllm/gh-41979
head_ref_oid: 78699346cdc86b775ba1eef84a8becc3e9ae894a
---
# [MoE] Move various experts classes to fused_moe/experts/

- Repository: `vllm-project/vllm`
- PR: [41979](https://github.com/vllm-project/vllm/pull/41979)
- Decision: `Inspect scale layout, accumulator type, tile/schedule choice, epilogue fusion, and partial-tile guards before deriving a candidate.`
- Reason: Inspect scale layout, accumulator type, tile/schedule choice, epilogue fusion, and partial-tile guards before deriving a candidate.

## Changed Paths

- `csrc/quantization/gguf/moe.cuh`
- `docs/design/custom_op.md`
- `docs/design/moe_kernel_features.md`
- `tests/kernels/moe/modular_kernel_tools/mk_objects.py`
- `tests/kernels/moe/test_flashinfer.py`
- `tests/kernels/moe/test_flashinfer_moe.py`
- `tests/kernels/moe/test_marlin_vs_trtllm_mxint4.py`
- `tests/kernels/moe/test_moe.py`
- `tests/kernels/moe/test_rocm_aiter_topk.py`
- `tests/kernels/moe/test_triton_moe_no_act_mul.py`
- `tests/kernels/moe/test_unquantized_backend_selection.py`
- `tests/kernels/moe/utils.py`
- `vllm/model_executor/layers/fused_moe/__init__.py`
- `vllm/model_executor/layers/fused_moe/experts/flashinfer_cutlass_moe.py`
- `vllm/model_executor/layers/fused_moe/experts/marlin_moe.py`
- `vllm/model_executor/layers/fused_moe/experts/nvfp4_emulation_moe.py`
- `vllm/model_executor/layers/fused_moe/experts/ocp_mx_emulation_moe.py`
- `vllm/model_executor/layers/fused_moe/experts/rocm_aiter_moe.py`
- `vllm/model_executor/layers/fused_moe/experts/triton_moe.py`
- `vllm/model_executor/layers/fused_moe/fused_moe.py`
- `vllm/model_executor/layers/fused_moe/layer.py`
- `vllm/model_executor/layers/fused_moe/oracle/fp8.py`
- `vllm/model_executor/layers/fused_moe/oracle/int8.py`
- `vllm/model_executor/layers/fused_moe/oracle/int_wna16.py`
- `vllm/model_executor/layers/fused_moe/oracle/mxfp4.py`
- `vllm/model_executor/layers/fused_moe/oracle/nvfp4.py`
- `vllm/model_executor/layers/fused_moe/oracle/unquantized.py`
- `vllm/model_executor/layers/fused_moe/router/grouped_topk_router.py`
- `vllm/model_executor/layers/fused_moe/triton_cutlass_moe.py`
- `vllm/model_executor/layers/fused_moe/triton_deep_gemm_moe.py`
- `vllm/model_executor/layers/quantization/awq_marlin.py`
- `vllm/model_executor/layers/quantization/compressed_tensors/compressed_tensors_moe/compressed_tensors_moe_w4a4_mxfp4.py`
- `vllm/model_executor/layers/quantization/compressed_tensors/compressed_tensors_moe/compressed_tensors_moe_wna16_marlin.py`
- `vllm/model_executor/layers/quantization/quark/quark_moe.py`

## Evidence Bundle

`evidence/pull-bundles/vllm/gh-41979`
