modelopt NVFP4 checkpoints exclude mtp* from quantization, so the entire MTP
speculative-decoding stack runs as BF16 passthrough: ~850 MiB of draft-layer
weights + mtp.fc, plus the 40960-row draft LM head (~420 MiB) — all re-read
on every draft forward (3× per decode step at num_speculative_tokens=3).
This gist converts the whole draft stack to FP8 e4m3 (per-tensor weight scales,
dynamic per-token activations, CUTLASS scaled_mm). The drafter only proposes
tokens — the target model verifies every one — so **outputs are bit-identical