BLOG · GUIDE ·

Quantise your own LLM to NVFP4 or FP8 for the NVIDIA RTX PRO 6000 Blackwell Server Edition

Eurokommerz, Vienna, since 2006: Private AI/ML · IT Managed Services · Enterprise Training · AI Hardware & Software

IN BRIEF
  • FP8 with llm-compressor's FP8_DYNAMIC scheme needs no calibration data; NVFP4 needs a calibration set, because the global scales of the activations are calibrated, and its documentation recommends data that matches what the model will see in use
  • llm-compressor's sequential pipeline moves only a fraction of the weights to the GPU at a time and keeps the rest in CPU memory or on disk, so a single 96 GB card can quantise a model many times its size
  • The full BF16 model must still be read: Llama 3.3 70B is about 141 GB, which the 384 GB of our two-card entry server hold; models that exceed host memory spill to disk through device_map="auto_offload"
  • Model Optimizer's PTQ script takes --qformat nvfp4 or fp8, typically calibrates on 128 to 512 samples and exports a Hugging Face checkpoint that TensorRT-LLM, vLLM and SGLang load
  • Merge a LoRA adapter into the BF16 model before quantising, then compare the result with the BF16 model on your own evaluation set

Supplied by Eurokommerz: NVIDIA RTX PRO 6000 Blackwell  Check price and availability →

When you need to quantise a model yourself

You quantise a model yourself when no ready-made NVFP4 or FP8 checkpoint exists for it: after a fine-tune, for a niche or regional model, or when you want a different recipe from the published one. For FP8, llm-compressor's dynamic scheme needs no calibration data; for NVFP4, llm-compressor and NVIDIA's Model Optimizer calibrate on a small set of samples. The server needs CPU memory for the 16-bit model above all; GPU memory matters less.

The sample sets range from 20 in llm-compressor's example to 2,048 for one of NVIDIA's own checkpoints. Host memory comes first because llm-compressor's sequential pipeline keeps most weights there while it works through the model layer by layer.

NVIDIA publishes NVFP4 versions of many popular models, listed with sizes and card counts in our NVFP4 checkpoint list for the RTX PRO 6000. Use one of those when it exists. This guide is for the other cases, with the NVIDIA RTX PRO 6000 Blackwell Server Edition as the serving target. What the formats are and how many bits they cost is in our guide to FP8, NVFP4, MXFP4 and INT4; here we deal with producing the checkpoint. Versions and documentation were read on 24 October 2026.

FP8 or NVFP4: which format to produce

The choice follows from the GPU that will serve the model.

SERVING GPUFP8 W8A8NVFP4 W4A4
RTX PRO 6000, all editionsnativenative
H200 NVLnativeweight-only in vLLM
L40S, L4nativeweight-only in vLLM
Calibration datanot needed (dynamic)needed

vLLM documentation "FP8 W8A8", page dated 24 September 2026 ("FP8 computation is supported on NVIDIA GPUs with compute capability >= 8.9"); llm-compressor documentation on compression schemes and its NVFP4 example (below SM100, "vLLM will not run activation" quantisation). Read 24 October 2026.

FP8 halves the memory of a BF16 model and runs natively on every card we supply for LLM serving. NVFP4 takes about 56 per cent of the memory of FP8 and computes natively only on Blackwell, which among our cards means the RTX PRO Blackwell family and DGX Spark. A model that will run on H200 NVL cards as well as on RTX PRO 6000 cards is easier to operate as one FP8 checkpoint. A model that has to fit fewer RTX PRO 6000 cards, or leave more memory for the KV cache, is the case for NVFP4.

The memory difference is large enough to change the server. Our users per RTX PRO 6000 guide shows it for Llama 3.3 70B: 12 full 8K sessions per card with FP8 weights and an FP8 cache, 34 with NVFP4 weights.

The two tools: llm-compressor and Model Optimizer

ITEMLLM-COMPRESSORMODEL OPTIMIZER
MaintainervLLM projectNVIDIA
Release read0.13.0README news to 15 October 2026
NVFP4 callscheme="NVFP4"--qformat nvfp4
Output loads invLLMTensorRT-LLM, vLLM, SGLang
Large modelssequential onloading, disk offload--use_seq_device_map, --low_memory_mode

llm-compressor documentation (model loading, sequential onloading, NVFP4 example) and release page of 0.13.0 (dated 11 August, no year shown); Model Optimizer README (install with pip install -U nvidia-modelopt[all]) and its hf_ptq example README on GitHub. Read 24 October 2026.

llm-compressor. The NVFP4 example in its documentation quantises all linear layers except the output head with one recipe line: a QuantizationModifier with targets="Linear", scheme="NVFP4" and ignore=["lm_head"]. It then runs oneshot with a calibration dataset and saves with save_compressed=True. NVFP4 stores weights with a local FP8 scale per block of 16 elements and a global scale per tensor; activations get a global scale from calibration and local scales computed at inference time. For FP8, vLLM's documentation recommends the FP8_DYNAMIC scheme on all linear layers with the output head excluded, and states that "we do not need any calibration data for this quantization flow". The 0.13.0 release added weight calibration in parallel across distributed workers and moved disk offloading into the model-loading context.

Model Optimizer. NVIDIA's library ships a post-training quantisation script, hf_ptq.py, called for example with --pyt_ckpt_path for the source model, --qformat fp8, --kv_cache_qformat fp8_cast and --export_path for the output. Its README lists nvfp4 among the formats and recommends nvfp4_mlp_only, nvfp4_experts_only or nvfp4_omlp_only "for higher NVFP4 accuracy". The KV cache format defaults to fp8_cast, with nvfp4 and none as alternatives. The recommended output is a unified Hugging Face checkpoint, which TensorRT-LLM loads directly and vLLM and SGLang load with quantization="modelopt". This is the path NVIDIA uses for its own NVFP4 checkpoints, whose cards name the Model Optimizer version, for example 0.48.0 for Qwen3.8-27B.

Which one to use depends mostly on the serving engine. A vLLM-only deployment can use either. For TensorRT-LLM, or to reproduce one of NVIDIA's recipes on a fine-tuned version of the same model, Model Optimizer is the direct route; its README marks NVFP4 support per model family, for example Llama 3.x and 4, Qwen 3, DeepSeek V3 to V3.2, Kimi K2, GPT-OSS and Nemotron 3, and marks Gemma 3 and Phi-4 as not supported.

Calibration data and sample counts

Calibration runs a small set of prompts through the model to measure the range of the activations, from which the scales are set. The published sample counts span two orders of magnitude:

SOURCESAMPLESDATA
llm-compressor NVFP4 example20ultrachat
Model Optimizer README128 to 512 typicalcnn_dailymail and Nemotron post-training mix
NVIDIA Qwen3.8-27B-NVFP4 card2,048not stated in what we read
Nemotron 3.5 Lightning card1,000 at 32K tokensnot stated in what we read

llm-compressor NVFP4 example; Model Optimizer hf_ptq README (default calib_set); NVIDIA model cards. Read 24 October 2026.

The llm-compressor example gives the more important rule: match the calibration data to what the model will see in use, for a fine-tuned model for example samples from its training data. A legal assistant fine-tuned on German contracts should be calibrated on German contracts, not on an English chat dataset. Keep the calibration prompts at the length the service will run; a model that will answer long-context questions needs long calibration samples, as the Lightning recipe with its 32K-token samples shows.

If the model was fine-tuned with LoRA, merge the adapter first. PEFT's merge_and_unload() merges the adapter weights into the base model and returns a standalone model. PEFT's documentation also notes that on a quantised model "merging re-quantizes the base weight", so merge into the BF16 weights and quantise the merged model, not the other way round. Our guide to GPU memory for fine-tuning covers the training side.

We build servers with RTX PRO 6000 Server Edition cards that serve the quantised model and have the host memory to produce it; send us the base model, its size and the format you need, and our team replies with a configuration for both tasks.

What the server needs: host memory, GPU and disk

The sequential pipeline changes where memory is needed. llm-compressor's documentation describes it: "only a fraction of the model weights are moved to GPU memory for calibration" while "the rest of the weights remain offloaded to CPU or disk", and the calibration dataset is held on the CPU and moved to the GPU one batch at a time. By default the unit moved is one decoder layer; sequential_targets="Linear" moves single linear layers instead, which "will result in lower VRAM usage, but a longer runtime". For models too large for CPU memory, the model-loading guide recommends device_map="auto_offload", which tries the CPU first and falls back to disk, with offload_folder on "a file system with lots of storage"; it warns that "some operations may be slower due to disk offloading".

By our estimate, BF16 weights take two bytes per parameter. Set against the host memory of our reference configurations on the AI servers page, that gives:

MODEL IN BF16WEIGHTSENTRY, 384 GB4 CARDS, 768 GB
8B denseabout 16 GBin memoryin memory
70B dense (Llama 3.3)about 141 GBin memoryin memory
128B denseabout 256 GBin memoryin memory
397B MoEabout 794 GBdisk offloaddisk offload

our arithmetic, 2 bytes per parameter; Llama 3.3 70B at about 141 GB as in our VRAM guide; host memory of the entry and inference configurations on our AI servers page. An eight-card RTX PRO 6000 Server Edition server, which we quote with 1,536 GB, holds the 397B model in memory.

The operating system, the calibration data and the output checkpoint need room as well, so the fit is tighter than the column suggests for the 128B row on the entry server. On the GPU side, one decoder layer of a 70B dense model is about 1.8 GB in BF16 by our estimate (141 GB over 80 layers), far below the 96 GB of one RTX PRO 6000; the large MoE layers of the biggest models are where sequential_targets="Linear" helps. Model Optimizer has its own levers: --use_seq_device_map uses "up to 80% of each GPU's memory" across the GPUs, and --low_memory_mode compresses weights to low precision before calibration, supported for FP8 and NVFP4 with max calibration only.

Disk space is the third item. The BF16 source, any offload folder and the output must sit on fast local storage at the same time; for a 397B model that is well over a terabyte. Our guide to NVMe storage for an LLM server sizes the drives, and our guide to host memory for a GPU server explains why we quote twice the GPU memory as a starting point.

A procedure that holds up in production

  1. Fix the source. Pin the exact BF16 checkpoint and, for a fine-tune, the merged model. Record the tool version, here llm-compressor 0.13.0 or the Model Optimizer version, in the output folder.
  2. Choose the format by serving GPU. FP8 for a mixed fleet with H200 NVL or L40S cards; NVFP4 for RTX PRO 6000 Server Edition servers where memory per card is the limit.
  3. Start with the standard recipe. Output head excluded, all other linear layers quantised; for mixture-of-experts models, try an experts-only recipe as NVIDIA does for several of its own checkpoints.
  4. Calibrate on your own data. A few hundred samples from the deployment domain at realistic lengths.
  5. Load it in the serving engine. In vLLM, read the start-up log for fallback warnings and the KV cache size, as our guide to vLLM KV cache size and maximum concurrency explains. On RTX PRO 6000 cards, a W4A16 or Marlin line means the native NVFP4 path was not taken.
  6. Evaluate against BF16. vLLM's FP8 documentation evaluates with lm_eval, for example on 250 GSM8K samples, and notes that quantised models can be sensitive to the beginning-of-sequence token. Add your own task set, as in our guide to LLM evaluation before model upgrades.
  7. Keep the BF16 or FP8 version. If the NVFP4 model fails a task, the fallback is ready without a second quantisation run.

Fine-tuned models need every step: the fine-tune changes the weight ranges, so a published NVFP4 recipe for the base model is only a starting point.

Which server to quantise on

Quantisation is a batch job and does not need its own server. The RTX PRO 6000 Server Edition server that will serve the model can produce it, as long as host memory and disk fit the source model. By the table above, the two-card entry configuration with 384 GB covers dense models up to about 128B in BF16, and the four-card inference node with 768 GB adds headroom. For the largest mixture-of-experts models, the choice is disk offload with a longer run, or a server with more memory, such as an eight-card RTX PRO 6000 Server Edition server with the 1,536 GB we quote for it. Our pages on the four-card RTX PRO 6000 Server Edition server and on CPU, RAM and storage for a four-GPU server give the component detail.

The quantised checkpoint is then served by the same engine as any published one. A fine-tuned 70B model in NVFP4, at about the size of NVIDIA's 42.7 GB Llama 3.3 70B checkpoint if the same recipe is used, runs on one card with room for 34 full 8K sessions with an FP8 cache by our users-per-card rule.

Our engineering partner Vixen.UNO deploys open models with vLLM on the servers we supply as part of our Private AI/ML service; describe the model and the format you need, and we check the tool and engine versions for it before you order.

FAQ

How do I quantise a model to NVFP4?
With llm-compressor, apply a QuantizationModifier with scheme="NVFP4" on all linear layers except lm_head through oneshot with a calibration dataset and save with save_compressed=True. With NVIDIA's Model Optimizer, run its hf_ptq.py script with --qformat nvfp4 and export a Hugging Face checkpoint. Both outputs load in vLLM.
Does FP8 quantisation need a calibration dataset?
Not for dynamic FP8. vLLM's documentation recommends llm-compressor's FP8_DYNAMIC scheme and states that this flow needs no calibration data, because activation scales are computed at inference time. NVFP4 does need calibration data for the global activation scales.
How much GPU memory do I need to quantise a 70B model?
Far less than the model, with llm-compressor's sequential pipeline: it moves one decoder layer at a time to the GPU, about 1.8 GB in BF16 for Llama 3.3 70B by our estimate, while the rest stays in CPU memory. One RTX PRO 6000 with 96 GB is enough; the host needs about 141 GB of free memory for the BF16 weights.
How many calibration samples does NVFP4 need?
Published values range from 20 in llm-compressor's example to 128 to 512 as Model Optimizer's typical range and 2,048 on NVIDIA's Qwen3.8-27B NVFP4 card. More important than the count is that the samples match the data the model will see in use, at realistic length.
Can I quantise a LoRA fine-tuned model to NVFP4?
Yes, after merging. PEFT's merge_and_unload() merges the adapter into the base model; do this on the BF16 weights, because merging into already quantised weights re-quantises them. Then quantise the merged model and compare it with the BF16 version on your evaluation set.
Which GPUs can run my NVFP4 model?
Natively, Blackwell GPUs: the RTX PRO 6000 in every edition, the other RTX PRO Blackwell cards and DGX Spark. On the H200 NVL, L40S and L4, vLLM runs NVFP4 weight-only, without activation quantisation, so for those cards produce an FP8 checkpoint instead.
Where can I buy a server to quantise and serve my own models?
From us: we build servers with two, four or eight RTX PRO 6000 Server Edition cards to order, with host memory and NVMe sized for the models you plan to quantise. We quote the exact configuration in writing; the price depends on card count, memory, storage and network.

We build RTX PRO 6000 Server Edition servers with the memory and storage to quantise and serve your own models. Describe your task in a few sentences and our team will help. We reply within one business day. The first call is free.

Talk to an expert
Talk to an expert

We reply within one business day

By sending this form you agree that we process your details to answer your enquiry; see our privacy policy.

request@eurokommerz.at
Jordangasse 7, 1010 Vienna