From f4966f8b3ddf757c607d57d4bb35624e2ee4f6b4 Mon Sep 17 00:00:00 2001 From: bnellnm <49004751+bnellnm@users.noreply.github.com> Date: Wed, 10 Jun 2026 01:20:13 -0400 Subject: [PATCH] [Bugfix] Fix weight loading issues caused by #41184 (#45054) Signed-off-by: Bill Nell --- vllm/model_executor/models/aria.py | 4 +-- vllm/model_executor/models/qwen3_vl_moe.py | 14 +++++++-- vllm/model_executor/models/step3_text.py | 18 +++++++++-- vllm/model_executor/models/step3p5.py | 36 ++++++++++++++-------- vllm/models/deepseek_v4/quant_config.py | 8 ++--- 5 files changed, 55 insertions(+), 25 deletions(-) diff --git a/vllm/model_executor/models/aria.py b/vllm/model_executor/models/aria.py index 34a72c9390..6b72388342 100644 --- a/vllm/model_executor/models/aria.py +++ b/vllm/model_executor/models/aria.py @@ -335,8 +335,8 @@ class AriaTextModel(LlamaModel, SupportsQuant): packed_modules_mapping = { "qkv_proj": ["q_proj", "k_proj", "v_proj"], "gate_up_proj": ["gate_proj", "up_proj"], - "experts.w13_weight": ["experts.fc1.weight"], - "experts.w2_weight": ["experts.fc2.weight"], + "experts.routed_experts.w13_weight": ["experts.fc1.weight"], + "experts.routed_experts.w2_weight": ["experts.fc2.weight"], } def __init__(self, *, vllm_config: VllmConfig, prefix: str = ""): diff --git a/vllm/model_executor/models/qwen3_vl_moe.py b/vllm/model_executor/models/qwen3_vl_moe.py index 195b3355e3..298863209d 100644 --- a/vllm/model_executor/models/qwen3_vl_moe.py +++ b/vllm/model_executor/models/qwen3_vl_moe.py @@ -187,8 +187,18 @@ class Qwen3MoeLLMModel(Qwen3MoeModel): "base_layer." if any(".base_layer." in name for name in params_dict) else "" ) fused_expert_params_mapping = [ - (f"experts.{base_layer}w13_weight", "experts.gate_up_proj", 0, "w1"), - (f"experts.{base_layer}w2_weight", "experts.down_proj", 0, "w2"), + ( + f"experts.routed_experts.{base_layer}w13_weight", + "experts.gate_up_proj", + 0, + "w1", + ), + ( + f"experts.routed_experts.{base_layer}w2_weight", + "experts.down_proj", + 0, + "w2", + ), ] num_experts = self.config.num_experts for name, loaded_weight in weights: diff --git a/vllm/model_executor/models/step3_text.py b/vllm/model_executor/models/step3_text.py index dd4af6f0fe..7fb5a91705 100644 --- a/vllm/model_executor/models/step3_text.py +++ b/vllm/model_executor/models/step3_text.py @@ -422,9 +422,21 @@ class Step3TextModel(nn.Module): ) expert_params_mapping = [ - (f".moe.experts.{base_layer}w13_weight", ".moe.gate_proj.weight", "w1"), - (f".moe.experts.{base_layer}w13_weight", ".moe.up_proj.weight", "w3"), - (f".moe.experts.{base_layer}w2_weight", ".moe.down_proj.weight", "w2"), + ( + f".moe.experts.routed_experts.{base_layer}w13_weight", + ".moe.gate_proj.weight", + "w1", + ), + ( + f".moe.experts.routed_experts.{base_layer}w13_weight", + ".moe.up_proj.weight", + "w3", + ), + ( + f".moe.experts.routed_experts.{base_layer}w2_weight", + ".moe.down_proj.weight", + "w2", + ), ] disable_moe_stacked_params = [data[1] for data in expert_params_mapping] diff --git a/vllm/model_executor/models/step3p5.py b/vllm/model_executor/models/step3p5.py index e10f5260a2..7a60946ba5 100644 --- a/vllm/model_executor/models/step3p5.py +++ b/vllm/model_executor/models/step3p5.py @@ -635,36 +635,48 @@ class Step3p5Model(nn.Module): # Old packed 3D format: .moe.gate_proj.weight [num_experts, out, in] expert_params_mapping = [ - (f".moe.experts.{base_layer}w13_weight", ".moe.gate_proj.weight", "w1"), - (f".moe.experts.{base_layer}w13_weight", ".moe.up_proj.weight", "w3"), - (f".moe.experts.{base_layer}w2_weight", ".moe.down_proj.weight", "w2"), ( - f".moe.experts.{base_layer}w13_weight_scale_2", + f".moe.experts.routed_experts.{base_layer}w13_weight", + ".moe.gate_proj.weight", + "w1", + ), + ( + f".moe.experts.routed_experts.{base_layer}w13_weight", + ".moe.up_proj.weight", + "w3", + ), + ( + f".moe.experts.routed_experts.{base_layer}w2_weight", + ".moe.down_proj.weight", + "w2", + ), + ( + f".moe.experts.routed_experts.{base_layer}w13_weight_scale_2", ".moe.gate_proj.weight_scale_2", "w1", ), ( - f".moe.experts.{base_layer}w13_weight_scale_2", + f".moe.experts.routed_experts.{base_layer}w13_weight_scale_2", ".moe.up_proj.weight_scale_2", "w3", ), ( - f".moe.experts.{base_layer}w2_weight_scale_2", + f".moe.experts.routed_experts.{base_layer}w2_weight_scale_2", ".moe.down_proj.weight_scale_2", "w2", ), ( - f".moe.experts.{base_layer}w13_weight_scale", + f".moe.experts.routed_experts.{base_layer}w13_weight_scale", ".moe.gate_proj.weight_scale", "w1", ), ( - f".moe.experts.{base_layer}w13_weight_scale", + f".moe.experts.routed_experts.{base_layer}w13_weight_scale", ".moe.up_proj.weight_scale", "w3", ), ( - f".moe.experts.{base_layer}w2_weight_scale", + f".moe.experts.routed_experts.{base_layer}w2_weight_scale", ".moe.down_proj.weight_scale", "w2", ), @@ -672,17 +684,17 @@ class Step3p5Model(nn.Module): # input scales are stored as moe.{gate,up,down}_proj.input_scale # rather than the standard per-expert format handled generically. ( - f".moe.experts.{base_layer}w13_input_scale", + f".moe.experts.routed_experts.{base_layer}w13_input_scale", ".moe.gate_proj.input_scale", "w1", ), ( - f".moe.experts.{base_layer}w13_input_scale", + f".moe.experts.routed_experts.{base_layer}w13_input_scale", ".moe.up_proj.input_scale", "w3", ), ( - f".moe.experts.{base_layer}w2_input_scale", + f".moe.experts.routed_experts.{base_layer}w2_input_scale", ".moe.down_proj.input_scale", "w2", ), diff --git a/vllm/models/deepseek_v4/quant_config.py b/vllm/models/deepseek_v4/quant_config.py index d6e1619cac..721a913891 100644 --- a/vllm/models/deepseek_v4/quant_config.py +++ b/vllm/models/deepseek_v4/quant_config.py @@ -8,7 +8,6 @@ from typing import TYPE_CHECKING from vllm.config import get_current_vllm_config from vllm.model_executor.layers.fused_moe import ( - MoERunner, RoutedExperts, UnquantizedFusedMoEMethod, ) @@ -133,7 +132,7 @@ class DeepseekV4FP8Config(Fp8Config): return None def get_quant_method(self, layer, prefix): - if isinstance(layer, (MoERunner, RoutedExperts)): + if isinstance(layer, RoutedExperts): if is_layer_skipped( prefix=prefix, ignored_layers=self.ignored_layers, @@ -156,9 +155,6 @@ class DeepseekV4FP8Config(Fp8Config): return super().get_quant_method(layer, prefix) def is_mxfp4_quant(self, prefix, layer): - if ( - not isinstance(layer, (MoERunner, RoutedExperts)) - or self.expert_dtype != "fp4" - ): + if not isinstance(layer, RoutedExperts) or self.expert_dtype != "fp4": return False return self.moe_quant_algo != "NVFP4"