From 0a5069e4e30996866d9d3cc5551f784b85408bb0 Mon Sep 17 00:00:00 2001 From: wangqian <601731555@qq.com> Date: Mon, 20 Jul 2026 21:39:28 +0800 Subject: [PATCH] [Bugfix][Gemma4] Fix ModelOpt mixed-precision MoE config mapping (#48563) Signed-off-by: wangqian <601731555@qq.com> Co-authored-by: OpenAI Codex --- tests/quantization/test_modelopt.py | 32 +++++++++++++++++++++++++ vllm/model_executor/models/gemma4.py | 8 ++++++- vllm/model_executor/models/gemma4_mm.py | 9 ++++--- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/tests/quantization/test_modelopt.py b/tests/quantization/test_modelopt.py index a08e14c53c..d2541dcc91 100644 --- a/tests/quantization/test_modelopt.py +++ b/tests/quantization/test_modelopt.py @@ -165,6 +165,38 @@ def test_modelopt_mixed_precision_does_not_quantize_unlisted_fused_sibling(): assert config._resolve_quant_algo("model.layers.0.linear_attn.in_proj_ba") is None +def test_modelopt_mixed_precision_composes_gemma4_mappers(): + from vllm.model_executor.models.gemma4 import Gemma4ForCausalLM + from vllm.model_executor.models.gemma4_mm import ( + Gemma4ForConditionalGeneration, + ) + + config = _mixed_precision_config( + { + "model.language_model.layers.0.experts": { + "quant_algo": "NVFP4", + "group_size": 16, + }, + "model.language_model.layers.1.moe.experts.gate_up_proj": { + "quant_algo": "NVFP4", + "group_size": 16, + }, + } + ) + + config.apply_vllm_mapper( + Gemma4ForConditionalGeneration.hf_to_vllm_mapper.get_unstacked_mapper() + ) + config.apply_vllm_mapper(Gemma4ForCausalLM.hf_to_vllm_mapper.get_unstacked_mapper()) + + expected_prefix = "language_model.model.layers.0.moe.experts" + assert set(config.quantized_layers) == { + expected_prefix, + "language_model.model.layers.1.moe.gate_up_proj", + } + assert config._resolve_quant_algo(expected_prefix) == "NVFP4" + + def test_modelopt_mixed_precision_infers_fused_gate_up_projection(): from vllm.model_executor.layers.linear import LinearBase diff --git a/vllm/model_executor/models/gemma4.py b/vllm/model_executor/models/gemma4.py index 63d97fbd1b..e0c3130bdd 100644 --- a/vllm/model_executor/models/gemma4.py +++ b/vllm/model_executor/models/gemma4.py @@ -84,6 +84,12 @@ from .utils import ( logger = init_logger(__name__) +_GEMMA4_EXPERT_PARENT_MAPPER = WeightsMapper( + orig_to_new_regex={ + re.compile(r"(? str: return re.sub(r"(?