Important: This is a static, weight-only quantization using round-to-nearest (RTN) — no calibration data, no activation quantization. Weights are FP4 (E2M1), activations stay BF16 at runtime. This means:
- The Marlin kernel dequantizes FP4 weights → BF16 before compute (BF16xBF16 matmul)
- Native Blackwell FP4 tensor cores are NOT used — those require W4A4 (both weights and activations in FP4)
- A W4A4 model with calibrated activation scales (
input_global_scale) is needed for native FP4xFP4 acceleration- Quality may be slightly lower than a calibration-aware quantization (GPTQ, etc.)
This model is useful for validating the NVFP4 pipeline and for inference where memory savings matter more than peak compute throughput.
| Parameter | Value |
|---|---|
| Method | NVFP4A16 — static, weight-only FP4, RTN (round-to-nearest) |
| Weight dtype | E2M1 (4-bit float) |
| Block scale | FP8 E4M3, one per 16 elements |
| Global scale | FP32, one per tensor |
| Format | nvfp4-pack-quantized (compressed-tensors) |
| Calibration | None — pure RTN, no forward passes |
| Original size | 18.8 GB (BF16) |
| Quantized size | 11.2 GB (59.5%) |
| Tensors quantized | 128 |
| Tensors kept BF16 | 632 |
q/k/v/o_proj), MLP (gate/up/down_proj).lm_head, all norms| Metric | Value |
|---|---|
| Max absolute error | 0.058 |
| Mean absolute error | 0.0008 |
1vllm serve nivvis/Qwen3.5-9B-heretic-NVFP4A16 \
2 --max-num-seqs 32 \
3 --max-model-len 32768 \
4 --gpu-memory-utilization 0.85 \
5 --enable-auto-tool-choice \
6 --tool-call-parser qwen3_coder \
7 --reasoning-parser qwen3 \
8 --trust-remote-code1from vllm import LLM
2model = LLM("nivvis/Qwen3.5-9B-heretic-NVFP4A16", trust_remote_code=True)| Metric | Value |
|---|---|
| VRAM | 10.58 GiB |
| Decode throughput | ~140 t/s (single request, not concurrent) |
| Hardware tested | NVIDIA RTX PRO 6000 Blackwell Max-Q |
| Kernel | Marlin FP4 (weight dequant → BF16 compute) |
| vLLM version | 0.17.0rc1 |
input_quant is None for weight-only quant). Fixed on SGLang main branch.max_tokens (8000+).