Views
No views yet
nvidia-modelopt discards the MTP head because AutoModelForCausalLM doesn't load it. This checkpoint restores the MTP weights from the original model in bf16 and adds them to the quantization ignore list, giving you working speculative decoding out of the box.| Property | Value |
|---|---|
| Method | NVFP4 via nvidia-modelopt 0.41.0 |
| Group size | 16 |
| Calibration | 256 samples from CNN/DailyMail (train split), max_seq_len=2048 |
| Excluded from quantization | lm_head, all conv1d layers (Mamba blocks), all MTP linear layers |
| MTP head | bf16 (15 tensors, ~850 MB, grafted from original) |
| Total checkpoint size | ~19 GB |
vllm/vllm-openai:qwen3_5-cu130, vLLM 0.16.0rc2).1vllm serve osoleve/Qwen3.5-27B-NVFP4-MTP \
2 --trust-remote-code \
3 --gpu-memory-utilization 0.85 \
4 --max-model-len 8192 \
5 --quantization modelopt \
6 --language-model-only \
7 --speculative-config '{"method":"mtp","num_speculative_tokens":1}'1vllm serve osoleve/Qwen3.5-27B-NVFP4-MTP \
2 --trust-remote-code \
3 --gpu-memory-utilization 0.85 \
4 --max-model-len 8192 \
5 --quantization modelopt \
6 --language-model-only--language-model-only — Required. Qwen3.5 is natively multimodal; this skips the vision encoder (no vision weights are included).--quantization modelopt — Required. Tells vLLM to use the NVFP4 weight format.num_speculative_tokens: 1 — The model has a single MTP layer. Setting this to 2 reuses the same layer twice with degraded acceptance rates.1{
2 "chat_template_kwargs": {"enable_thinking": false}
3}| Configuration | Nodes | tok/s | Speedup |
|---|---|---|---|
| bf16, TP=2 | 2 | ~5.8 | 1.0x |
| bf16, TP=2 + MTP(2) | 2 | ~13.0 | 2.2x |
| NVFP4 (this model) | 1 | ~10.5 | 1.8x |
| NVFP4 + MTP(1) (this model) | 1 | ~19.7 | 3.4x |
Qwen/Qwen3.5-27B in bf16 via AutoModelForCausalLMmodelopt.torch.quantization.quantize() with NVFP4_DEFAULT_CFGmodelopt.torch.export.unified_export_hf.export_hf_checkpoint()quantization_config.ignore in config.jsonconfig.json structure (ForConditionalGeneration with text_config/vision_config) to match weight naming conventions