[Bugfix] Fix NVFP4+MTP crash: force unquantized mtp.fc for Qwen3Next (#46316)
Signed-off-by: Ranran Haoran Zhang <ranzhang@redhat.com>
Ranran committed
Jun 25, 2026 at 11:05 UTC
e45b279928726951738427f48141739c1a4bcfe2
1 file changed
+11
-2
vllm/model_executor/models/qwen3_next_mtp.py
+11
-2
@@ -64,13 +64,22 @@ class Qwen3NextMultiTokenPredictor(nn.Module):
64
config.hidden_size,
65
)
66
67
+ # Workaround: mtp.fc is stored as BF16 in NVFP4 checkpoints but is
68
+ # missing from the checkpoint quant exclude list (its `ignore` glob
69
+ # does not cover `mtp.fc`). Force unquantized to match the weights,
70
+ # mirroring the Qwen3.5 MTP handling (PR #38832).
71
+ fc_quant = (
72
+ None
73
+ if (quant_config and quant_config.get_name() == "modelopt_fp4")
74
+ else quant_config
75
+ )
76
self.fc = ColumnParallelLinear(
77
self.config.hidden_size * 2,
78
self.config.hidden_size,
79
gather_output=True,
80
bias=False,
81
return_bias=False,
73
- quant_config=quant_config,
82
+ quant_config=fc_quant,
83
prefix=f"{prefix}.fc",
84
)
85
@@ -242,7 +251,7 @@ class Qwen3NextMTP(nn.Module, QwenNextMixtureOfExperts):
251
"k_proj",
252
"v_proj",
253
],
245
- "gate_up_proj": ["up_proj", "down_proj"],
254
+ "gate_up_proj": ["gate_proj", "up_proj"],
255
}
256
257
def __init__(self, *, vllm_config: VllmConfig, prefix: str = ""):