[Bugfix] Fix MiniMax-M3 compressed-tensors FP8 MoE SwiGLU params (#46845)

Signed-off-by: Tan Pin Siang <tanpinsiang@gmail.com>

Tan Pin Siang committed Aug 12, 2026 at 03:52 UTC e60f3c4c137f23bb870524b937719d24bde8715b
2 files changed +34
tests/quantization/test_compressed_tensors.py
+32
@@ -22,6 +22,7 @@ from vllm.model_executor.kernels.linear import (
22 Fp8BlockScaledMMLinearKernel,
23 )
24 from vllm.model_executor.layers.fused_moe import UnquantizedFusedMoEMethod
25 +from vllm.model_executor.layers.fused_moe.oracle.fp8 import Fp8MoeBackend
26 from vllm.model_executor.layers.quantization.compressed_tensors.compressed_tensors import ( # noqa: E501
27 CompressedTensorsConfig,
28 CompressedTensorsLinearMethod,
@@ -35,6 +36,9 @@ from vllm.model_executor.layers.quantization.compressed_tensors.compressed_tenso
36 CompressedTensorsWNA8O8Int,
37 CompressedTensorsWNA16,
38 )
39 +from vllm.model_executor.layers.quantization.compressed_tensors.compressed_tensors_moe.compressed_tensors_moe_w8a8_fp8 import ( # noqa: E501
40 + CompressedTensorsW8A8Fp8MoEMethod,
41 +)
42 from vllm.model_executor.layers.quantization.compressed_tensors.utils import (
43 find_matched_target,
44 )
@@ -345,6 +349,34 @@ def test_compressed_tensors_fp8(vllm_runner):
349 assert output
350
351
352 +def test_compressed_tensors_w8a8_fp8_moe_forwards_swiglu_params():
353 + quant_method = object.__new__(CompressedTensorsW8A8Fp8MoEMethod)
354 + quant_method.input_quant = QuantizationArgs(
355 + num_bits=8,
356 + type=QuantizationType.FLOAT,
357 + strategy=QuantizationStrategy.TOKEN,
358 + dynamic=True,
359 + symmetric=True,
360 + )
361 + quant_method.weight_block_size = None
362 + quant_method.fp8_backend = Fp8MoeBackend.TRITON
363 +
364 + layer = Mock()
365 + layer.w13_weight_scale = torch.ones(2, 4, 1)
366 + layer.w2_weight_scale = torch.ones(2, 8, 1)
367 + layer.w13_input_scale = None
368 + layer.w2_input_scale = None
369 + layer.swiglu_alpha = 1.702
370 + layer.swiglu_beta = None
371 + layer.swiglu_limit = 7.0
372 +
373 + quant_config = quant_method.get_fused_moe_quant_config(layer)
374 +
375 + assert quant_config.gemm1_alpha == 1.702
376 + assert quant_config.gemm1_beta is None
377 + assert quant_config.gemm1_clamp_limit == 7.0
378 +
379 +
380 @pytest.mark.skipif(
381 not current_platform.is_cuda(), reason="This test is skipped on non-CUDA platform."
382 )
vllm/model_executor/layers/quantization/compressed_tensors/compressed_tensors_moe/compressed_tensors_moe_w8a8_fp8.py
+2
@@ -352,6 +352,8 @@ class CompressedTensorsW8A8Fp8MoEMethod(CompressedTensorsMoEMethod):
352 per_act_token_quant=is_per_token,
353 per_out_ch_quant=is_per_token,
354 block_shape=self.weight_block_size,
355 + gemm1_alpha=getattr(layer, "swiglu_alpha", None),
356 + gemm1_beta=getattr(layer, "swiglu_beta", None),
357 swiglu_limit=getattr(layer, "swiglu_limit", None),
358 layer=layer,
359 )