llm-jp-4-33b-thinking NVFP4 (W4A16)
Weight-only NVFP4 quantization of
llm-jp/llm-jp-4-33b-thinking
(revision 9e6928628594b205bd3ccd93c2813064aa53fe97) for vLLM on NVIDIA
Blackwell. The checkpoint is 21.6 GB, 0.32× the BF16 size.
On llm-jp-eval it scores 0.673 against 0.661 for BF16 on the same harness and prompts (30 samples per dataset). On a DGX Spark, NVFP4 plus the companion DSpark drafter decodes 5.2× faster than BF16 (19.1 vs 3.6 tok/s at 128 output tokens). On an RTX PRO 6000 the same pair decodes at 103.7 tok/s (NVFP4 alone 62.8, BF16 21.4).
Quickstart
pip install "vllm==0.28.0"
hf download kel-dx/llm-jp-4-33b-thinking-NVFP4 --include "vllm_plugin/*" --local-dir nvfp4
pip install ./nvfp4/vllm_plugin # the llmjp4 reasoning parser (source in this repo)
vllm serve kel-dx/llm-jp-4-33b-thinking-NVFP4 \
--trust-remote-code \
--reasoning-parser llmjp4 \
--kv-cache-dtype fp8 \
--max-model-len 16384 \
--gpu-memory-utilization 0.6
With the DSpark drafter (num_speculative_tokens must be 8):
vllm serve kel-dx/llm-jp-4-33b-thinking-NVFP4 \
--trust-remote-code --reasoning-parser llmjp4 --kv-cache-dtype fp8 \
--max-model-len 16384 --gpu-memory-utilization 0.6 \
--speculative-config '{"method":"dspark","model":"kel-dx/llm-jp-4-33b-thinking-NVFP4-speculator.dspark","num_speculative_tokens":8}'
These are the settings of the quality run below on a DGX Spark. The
throughput run used --gpu-memory-utilization 0.35, which holds the 21.6 GB
checkpoint, the 4.7 GB drafter and single-stream KV at 16k context. On the
GB10's 119 GB unified memory, 0.85 starved the host and the server was killed
by the out-of-memory daemon during KV allocation, so leave host headroom.
Raise --max-model-len as memory allows.
Any OpenAI-compatible client works against /v1/chat/completions. The
llmjp4 parser returns the Harmony analysis channel as reasoning and the
final channel as content, in streaming mode as well.
Tokenizer
Use the tokenizer files in this repository. The upstream
llmjp4_tokenizer.py subclasses LlamaTokenizerFast, and under transformers 5
(bundled in vLLM 0.25 and later) that class rebuilds the Unigram tokenizer as
merge-less BPE and emits one token per character. The class shipped here is the
one the LLM-jp 8B repositories already use; tokenizer.json is unchanged
from upstream.
Quantization
- Tool: NVIDIA Model Optimizer
nvidia-modelopt==0.45.0,W4A16_NVFP4_CFG, modelopt export format, served by vLLM's native NVFP4 path. - Layout: every
Linearin the 64 decoder layers (q/k/v/o, gate/up/down) in NVFP4 W4A16: FP4 weights, group 16, FP8 E4M3 block scales, FP32 per-tensor scale.lm_head, embeddings and norms stay BF16. - No activation quantization. At batch 1 the matmuls are memory-bound GEMVs, so quantizing activations adds work without a bandwidth gain.
- Calibration: weight-only
max. - KV cache: FP8 E4M3 at serve time (
--kv-cache-dtype fp8). The checkpoint carries no calibrated KV scales. NVFP4 KV is not used because vLLM's NVFP4 KV kernel corrupts decode on SM120 and SM121 (vllm#50084).
Quality (llm-jp-eval v2.1.5)
| Category | BF16 | NVFP4 (this checkpoint) | NVFP4 / BF16 |
|---|---|---|---|
| AVG (14 categories) | 0.6612 | 0.6731 | 101.8% |
| JA AVG | 0.6384 | 0.6545 | 102.5% |
| EN AVG | 0.7453 | 0.7432 | 99.7% |
| NLI | 0.8000 | 0.8133 | 101.7% |
| QA | 0.6236 | 0.6446 | 103.4% |
| RC | 0.5667 | 0.6000 | 105.9% |
| CR | 0.8833 | 0.8917 | 100.9% |
| HE | 0.6583 | 0.6444 | 97.9% |
| EL | 0.5632 | 0.5798 | 103.0% |
| FA | 0.2890 | 0.2921 | 101.1% |
| MR | 0.6313 | 0.6341 | 100.5% |
| MT | 0.8529 | 0.8523 | 99.9% |
| CG | 0.9667 | 1.0000 | 103.4% |
| SUM | 0.0816 | 0.0841 | 103.0% |
| IF | 0.6764 | 0.6792 | 100.4% |
| BBH | 0.8083 | 0.8083 | 100.0% |
| LM | 0.8556 | 0.9000 | 105.2% |
Setup: 30 samples per dataset, 58 datasets plus xlsum_ja, temperature 0,
dataset-default few-shot (4 or 0), max_tokens = output length + 4096 for
reasoning, no drafter, vLLM 0.28.0, same prompts for both. BF16 ran on an
RTX PRO 6000 with bf16 KV, NVFP4 on a DGX Spark with fp8 KV.
Notes:
- With 30 samples per dataset and one run each, a point or two of AVG is noise. Some datasets go either way (mmlu_en 28/30 → 24/30).
- Generations that ran out of the 4096 reasoning tokens count as wrong: 55/1770 (BF16) and 56/1770 (NVFP4), mostly polymath and gpqa.
- SUM is xlsum_ja ROUGE-2 on the whole answer. The harness default cuts at the first blank line, which turned most summaries into their heading (SUM 0.033 / 0.039, AVG 0.658 / 0.670 before the fix).
- CG: jhumaneval 28/30 (BF16) vs 30/30 (NVFP4), mbpp 30/30 for both. The prompts include the test cases.
- Per-dataset scores and sample generations:
benchmark/phase3-llm-jp-eval-{nvfp4,bf16}-r4096-vllm0.28.0-sumfix.json, recovery tablebenchmark/phase3-recovery-bf16-vs-nvfp4-sumfix.json. Files without the-sumfixsuffix are the original scoring.
Throughput
ELYZA-tasks-100 prompts, temperature 0, one request at a time, exactly N
generated tokens per request (ignore_eos), decode tok/s excluding
time-to-first-token, mean over 100 prompts.
DGX Spark (GB10, SM121, vLLM 0.28.0, fp8 KV)
| Configuration | 128 tokens | 1024 tokens | vs BF16 |
|---|---|---|---|
BF16 llm-jp/llm-jp-4-33b-thinking (vLLM 0.27.1, bf16 KV) |
3.64 | — | 1.0× |
| NVFP4 (this checkpoint) | 11.04 | 10.94 | 3.0× |
| NVFP4 + DSpark drafter (k=8) | 19.05 | 20.08 | 5.2× |
The BF16 row is from an earlier run on vLLM 0.27.1 with a pre-fix tokenizer (longer prompts); it was not repeated on 0.28.0.
RTX PRO 6000 Blackwell (SM120, 96 GB, vLLM 0.28.0, fp8 KV)
| Configuration | 128 tokens | 1024 tokens | vs BF16 |
|---|---|---|---|
BF16 llm-jp/llm-jp-4-33b-thinking (bf16 KV) |
21.44 | 21.29 | 1.0× |
| NVFP4 (this checkpoint) | 62.85 | 62.35 | 2.9× |
| NVFP4 + DSpark drafter (k=8) | 103.68 | 109.53 | 4.8× / 5.1× |
The NVFP4 legs ran at --gpu-memory-utilization 0.9, the BF16 leg at 0.85.
Per-request records for every row are in benchmark/.
Limitations
- The fp8 KV cache runs with scale 1.0 because the checkpoint has no calibrated KV scales. The quality numbers above were measured in this configuration.
Versions
vLLM 0.28.0 (serving), nvidia-modelopt 0.45.0, transformers 5.5.4 (quantization) and 5.15.1 (serving), base model revision 9e69286.
License and attribution
Apache-2.0, following the base model. Base model by the Research and Development Center for Large Language Models, National Institute of Informatics (LLM-jp). Quantization, drafter and measurements by kel-dx.
- Downloads last month
- 170