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

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

[feature] MiniMax-M3-MXFP4 support added (#45896)

Signed-off-by: Qiang Li <qiang.li2@amd.com>

qli88 committed Jun 17, 2026 at 13:50 UTC d112eb1ac78ede18c60ad98f65da238ca3e052b4
4 files changed +44 -3
vllm/model_executor/layers/fused_moe/experts/gpt_oss_triton_kernels_moe.py
+14
@@ -755,6 +755,7 @@ class UnfusedOAITritonExperts(LoRAExpertsMixin, BaseOAITritonExperts):
755 MoEActivation.GELU,
756 MoEActivation.SWIGLUOAI,
757 MoEActivation.SWIGLUSTEP,
758 + MoEActivation.SWIGLUOAI_UNINTERLEAVE,
759 ]
760
761 @staticmethod
@@ -811,6 +812,19 @@ class UnfusedOAITritonExperts(LoRAExpertsMixin, BaseOAITritonExperts):
812 input,
813 quant_config.gemm1_clamp_limit,
814 )
815 + elif activation == MoEActivation.SWIGLUOAI_UNINTERLEAVE:
816 + assert quant_config.gemm1_clamp_limit is not None
817 + alpha = (
818 + quant_config.gemm1_alpha
819 + if quant_config.gemm1_alpha is not None
820 + else 1.0
821 + )
822 + beta = (
823 + quant_config.gemm1_beta if quant_config.gemm1_beta is not None else 0.0
824 + )
825 + torch.ops._C.silu_and_mul_with_clamp(
826 + output, input, quant_config.gemm1_clamp_limit, alpha, beta
827 + )
828 else:
829 super().activation(activation, output, input)
830
vllm/model_executor/layers/fused_moe/oracle/mxfp4.py
+12 -1
@@ -503,7 +503,18 @@ def select_mxfp4_moe_backend(
503 activation_format,
504 )
505
506 - if current_platform.is_cuda() or current_platform.is_rocm():
506 + if current_platform.is_rocm():
507 + backend = Mxfp4MoeBackend.TRITON_UNFUSED
508 + logger.info_once(_make_log_backend(backend))
509 + return _return_or_raise(
510 + Mxfp4MoeBackend.TRITON_UNFUSED,
511 + config,
512 + kMxfp4Static,
513 + None,
514 + activation_format,
515 + )
516 +
517 + if current_platform.is_cuda():
518 raise NotImplementedError(
519 "No MXFP4 MoE backend supports the deployment configuration. "
520 f"weight_key=kMxfp4Static, activation_key={activation_key}. "
vllm/model_executor/layers/quantization/quark/quark_moe.py
+6
@@ -1303,6 +1303,9 @@ class QuarkOCP_MX_MoEMethod(QuarkMoEMethod):
1303 w2_bias=getattr(layer, "w2_bias", None),
1304 a1_scale=getattr(layer, "w13_input_scale", None),
1305 a2_scale=getattr(layer, "w2_input_scale", None),
1306 + gemm1_alpha=getattr(layer, "swiglu_alpha", None),
1307 + gemm1_beta=getattr(layer, "swiglu_beta", None),
1308 + swiglu_limit=getattr(layer, "swiglu_limit", None),
1309 )
1310
1311 # Emulation and other schemes
@@ -1339,6 +1342,9 @@ class QuarkOCP_MX_MoEMethod(QuarkMoEMethod):
1342 a1_scale=None,
1343 a2_scale=None,
1344 block_shape=None,
1345 + gemm1_alpha=getattr(layer, "swiglu_alpha", None),
1346 + gemm1_beta=getattr(layer, "swiglu_beta", None),
1347 + gemm1_clamp_limit=getattr(layer, "swiglu_limit", None),
1348 )
1349
1350 @property
vllm/models/minimax_m3/amd/model.py
+12 -2
@@ -924,6 +924,11 @@ class MiniMaxM3Model(nn.Module, EagleModelMixin):
924 class MiniMaxM3SparseForCausalLM(nn.Module, SupportsEagle3):
925 """MiniMax M3 (sparse/dense backbone) for causal language modeling."""
926
927 + packed_modules_mapping = {
928 + "qkv_proj": ["q_proj", "k_proj", "v_proj"],
929 + "gate_up_proj": ["gate_proj", "up_proj"],
930 + }
931 +
932 def __init__(self, *, vllm_config: VllmConfig, prefix: str = ""):
933 super().__init__()
934 config = vllm_config.model_config.hf_text_config
@@ -987,14 +992,19 @@ class MiniMaxM3SparseForConditionalGeneration(
992 # ranks (see ``_process_image_input`` / ``_process_video_input``).
993 supports_encoder_tp_data = True
994
995 + packed_modules_mapping = {
996 + "qkv_proj": ["q_proj", "k_proj", "v_proj"],
997 + "gate_up_proj": ["gate_proj", "up_proj"],
998 + }
999 +
1000 hf_to_vllm_mapper = WeightsMapper(
1001 orig_to_new_prefix={
1002 "multi_modal_projector.": "vision_tower.multi_modal_projector.",
1003 "patch_merge_mlp.": "vision_tower.patch_merge_mlp.",
1004 },
1005 orig_to_new_substr={
996 - ".mlp.fc1.": ".fc1.",
997 - ".mlp.fc2.": ".fc2.",
1006 + ".mlp.fc1": ".fc1",
1007 + ".mlp.fc2": ".fc2",
1008 },
1009 )
1010