Skip to content
Models & quality

Quantization explained: FP8, INT4, and serving models cheaper

Can the same model run on cheaper hardware? Often, yes: quantization stores the model in a compact form that needs less GPU memory, usually with a quality difference too small to notice. Here is how it works, and where the limits are.

6 min read Updated 31 October 2026

What quantization does

A model is a very large set of numbers, called weights. Normally each one is stored in 16 bits (two bytes); the formats are named BF16 and FP16. Quantization stores them with fewer bits: 8 bits (one byte), or even 4 (half a byte). Fewer bits per weight means the model needs less GPU memory and the GPU can read it faster, so you need cheaper hardware and pay less per token.

The biggest effect is on memory. A model needs roughly its number of weights times the bytes per weight, plus some working space for the requests it is serving. Halve the bytes per weight and you roughly halve the memory:

PrecisionBytes / weightRelative sizeTypical use
BF16 / FP1621.0x (baseline)Full-precision serving and training.
FP8 / INT81~0.5xHigh-quality compression with broad hardware support.
INT4 / FP4 (AWQ, GPTQ, NVFP4)0.5~0.25xAggressive compression to fit big models on small GPUs.
Fewer bits per weight: a smaller model, and cheaper hardware that can serve it.

FP8 vs. INT8: the same size, spent differently

FP8 and INT8 both store a weight in one byte, so neither is smaller: a model with 8 billion weights needs about 8 GB in either, plus working space for the requests it serves. The difference is what the byte holds.

FP8INT8
Memory per weight1 byte1 byte
What the byte holdsA tiny floating-point number: a sign, an exponent and a few digits. The common variants are E4M3 and E5M2.A whole number from -128 to 127, multiplied by a scale shared across a group of weights.
How values are spacedClose together near zero and further apart for large values, so one format covers a wide range.Evenly, so a few very large values force a coarse step on all the others.
Runs at full speed onGPUs with FP8 hardware: NVIDIA Ada, Hopper and Blackwell (L4, L40S, H100 and newer), and AMD MI300.Most data-center GPUs of recent generations, including those without FP8 hardware, such as the A100, A10G and T4.
Same memory, different number formats.

The spacing is what decides quality. A model carries a few values far larger than the rest (the outliers LLM.int8() was built around). FP8 represents them alongside the small values with little extra rounding; INT8 needs extra handling, such as keeping the outliers in 16 bits, to do as well. Done well, both land close to the 16-bit model.

Which to choose depends mostly on the GPU. On one with FP8 hardware, FP8 is usually the simpler choice, with no outlier handling to tune. On an older GPU, INT8 runs at full speed and FP8 does not: serving software such as vLLM still loads FP8 weights there, saving the memory, but does the arithmetic in 16 bits.

On a 16 GB card, an 8-bit model of about 8 billion weights fits with room for long prompts. One of 14 billion does not fit at 8 bits, but does at 4.

What it costs in quality

Quantization loses a little information: storing each weight in fewer bits means rounding it, and rounding adds small errors. Modern methods are very good at keeping those errors from mattering. The skill is in how the rounding is done.

It is worth knowing why, because "compression that loses almost nothing" sounds like marketing until you see the mechanism. A small minority of weights do a large share of the work, and every good method is built around finding and protecting them. The AWQ paper puts it plainly:

Protecting only 1% salient weights can greatly reduce quantization error.

Their second finding is the surprising half: to find those weights, "we should refer to the activation distribution, not weights". In plain terms, which weights matter depends on the text running through the model. So the sample text a quantization is tuned on (its calibration data) is part of the method: one tuned on text unlike yours may do worse on your work than one tuned on text like it.

8-bit (FP8, INT8)
The quality loss is usually too small to measure against the 16-bit model. A safe default for cheaper serving.
4-bit (INT4 via AWQ, GPTQ, NVFP4, MXFP4)
Bigger savings, with a small but real quality cost. Good methods tune on sample text to protect the weights that matter most, which keeps the loss minor for most tasks.

Whether the 4-bit cost matters depends on your task, and only a test on your own data can say. For many classification and extraction jobs the difference does not show; for the hardest reasoning it can. The usual pattern: compress hard, then check on a gold set.

The method names you will see

Quantized models on model-sharing sites carry tags that name the format. A quick key:

  • AWQ, GPTQ: popular 4-bit methods that tune on sample text to protect quality. Widely supported.
  • FP8, W8A8: 8-bit formats. FP8 keeps quality high and runs well on recent GPUs.
  • NVFP4, MXFP4: newer 4-bit formats. NVFP4 in particular needs the latest GPU generation.
  • BNB, 4bit: the bitsandbytes library, often used because it is convenient.

Why it matters for batch cost

Quantization moves a model onto cheaper hardware. A model that needs an expensive 80 GB GPU at 16 bits might fit comfortably on a much cheaper 24 GB card at 4 bits. A cheaper card that reads the model faster means a lower cost per token. Together with batching and spare (spot) capacity, it is one of the main ways a provider lowers its costs without changing what you see.

On Otium you do not choose a format. You choose a size (small, medium or large), and we pick and test the model and precision behind it. What you should still test is the size, on your own gold set.

Sources

The method names in this guide are all papers. If you are choosing between quantized builds of the same model, the differences between them are in these four papers; the vLLM page covers which GPUs run FP8.

Frequently asked questions

Does quantization make a model worse?

Very slightly at 8 bits, usually too little to notice; a little more at 4 bits. Methods like AWQ and GPTQ tune on sample text to protect the most important weights, so for most classification, extraction and enrichment work the difference does not show. Test on a typical sample of your own to be sure.

Is FP8 or INT8 smaller?

Neither. Both use one byte per weight, so a model needs the same memory in either. FP8 spaces its values like a floating-point number, which copes better with the few very large values in a model; INT8 spaces them evenly and runs at full speed on older GPUs without FP8 hardware.

What is the difference between FP8 and INT4?

FP8 stores each weight in 8 bits (one byte), with quality close to the original and wide hardware support. INT4 formats such as AWQ and GPTQ use 4 bits (half a byte), roughly halving the size again for a small quality cost. INT4 lets large models fit on much cheaper GPUs.

Related guides

Put a deadline on your next batch.

Create an account, point your OpenAI-compatible client at our base URL, and send your first deadline-flexible batch.

Free to try on our demo model. No credit card, no spam: we email you a link to finish.

Otium is in beta and open to everyone. Already have an account? Sign in.