[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 = ""):