The useful part, up front

What you’ll take away

  • Weight storage, compute precision, activation precision, and scale metadata are separate choices; a single bit-width label does not describe all four.[1][2]
  • Rounding moves values to the nearest representable code, while clipping forces out-of-range values to the boundary, so the two error mechanisms must be analyzed separately.[3]
  • Storage arithmetic for an 8B model—about 16GB at bf16, 8GB at 8 bits, and 4–5GB at 4 bits—describes weights only and does not establish accuracy or speed.[1]
  • Outliers and sensitive computations justify selective higher precision, as in the documented outlier threshold and critical-computation handling for 8-bit quantization.[2]
  • Format choice should follow the tensor distribution and the deployment path, not a product name or a bit count alone.[2][3]
01

The question low-bit quantization actually answers

Low-bit quantization asks a narrower question than it first appears to ask. It does not ask whether a model can be made smaller in every respect, or whether every part of a model should use the same number of bits. It asks which numbers can be represented with fewer bits, where those numbers are stored, and what error that representation introduces when the numbers are used again.[1]

That distinction matters because a model contains more than a single list of weights. It also contains activations, which are the intermediate values produced while the model runs, and metadata, which helps software interpret the stored numbers. A method may compress one of these categories while leaving another at higher precision. Reading a bit-width label as a description of the whole system therefore hides the most important design choices.[1][2]

The useful question is consequently not simply “Is this 4-bit or 8-bit?” It is “What is 4-bit or 8-bit, what remains at another precision, and how are the compressed values restored or used?” Once those questions are separated, the tradeoff becomes clearer: fewer bits usually reduce weight storage, but they can cost accuracy, and different methods balance memory, speed, and accuracy differently.[1]

Rounding and clipping as ordered steps. A value is first checked against the representable range, then rounded or clipped.
A value is first checked against the representable range, then rounded or clipped. · Ameer Journal — original explanatory diagramOriginal editorial illustration; no third-party artwork reused.
02

Four things not to merge: weights, compute, activations, and metadata

Weights are the learned numbers stored in a model checkpoint. Quantization most commonly targets these weights because they are persistent and can be packed before the model is loaded. In one documented loading pattern, a full-precision checkpoint is quantized as it loads, while in another the checkpoint is already quantized and the stored configuration identifies the method.[1]

Computation precision is different. It describes the format used when arithmetic is performed. A 4-bit stored weight, for example, may be converted to a wider type for computation, and a configuration can specify a separate compute data type. The bitsandbytes documentation gives bf16 as a possible compute type for a 4-bit load, which shows that storage and computation need not match.[2]

Activations are the values created during a forward pass, and scale metadata is the extra information needed to interpret compressed codes. Some methods quantize activations as well as weights, while others preserve higher precision for sensitive computations. A reader who merges these four categories into one label will miss why two models with the same nominal bit width can behave differently.[1][2][3]

03

Storage arithmetic: what fewer bits do and do not prove

The basic storage arithmetic is straightforward. A bf16 value takes 2 bytes, so an 8-billion-parameter model needs about 16 gigabytes for its weights at that precision. The same weight count corresponds to about 8 gigabytes at 8 bits and about 4 to 5 gigabytes at 4 bits in the documented example.[1]

That arithmetic describes weight storage, not the total memory used by a running system. Runtime state, activations, software overhead, and any modules kept at higher precision are not captured by multiplying a parameter count by a bit width. The source material also warns that actual accuracy and latency require measurements, so a storage calculation should not be presented as a benchmark result.[1]

The arithmetic is still useful when its scope is stated honestly. It explains why 8-bit quantization can halve weight memory and why 4-bit quantization can reduce it by roughly a factor of four in the documented bitsandbytes examples.[2] It does not, by itself, prove that a particular model will run faster, fit comfortably on a particular device, or preserve accuracy on a particular task.

Integer versus floating-point low-bit formats. Integer codes space values evenly; floating-point codes allocate bits to range and resolution.
Integer codes space values evenly; floating-point codes allocate bits to range and resolution. · Ameer Journal — original explanatory diagramOriginal editorial illustration; no third-party artwork reused.
04

Rounding and clipping: the two basic sources of representation error

Rounding replaces a value with the nearest representable value. If a format can represent only a limited set of numbers, most original values will fall between two available choices. Rounding moves each value to one of those choices, so the stored value is close to the original but rarely identical. The resulting difference is the rounding error.[3]

Clipping is different. It occurs when a value lies outside the range the format can represent. Instead of choosing the nearest available value inside the range, the system forces the value to the boundary. A large value may therefore be replaced by the largest representable value, which can create a much larger error than ordinary rounding.[3]

Both effects matter, but they fail in different ways. Rounding spreads small errors across many values, while clipping can distort the few values that are unusually large or small. A format with a narrow range may round finely inside that range yet clip important extremes, whereas a format with a wider range may avoid clipping while rounding less precisely.

05

A clearly hypothetical worked example with rounding and clipping

The following example is entirely hypothetical and is designed only to show the arithmetic. Suppose a toy format can represent values in steps of 0.5, from -2.0 to 2.0. Its available values are therefore -2.0, -1.5, -1.0, -0.5, 0, 0.5, 1.0, 1.5, and 2.0. No claim is made that a real model uses this format.[3]

Consider three hypothetical weights: 0.24, 0.76, and 2.4. Rounding 0.24 to the nearest available value gives 0.0, an error of 0.24. Rounding 0.76 gives 1.0, an error of 0.24. The value 2.4 is outside the range, so clipping forces it to 2.0, an error of 0.4. The first two errors come from rounding, and the third comes from clipping.[3]

Now suppose the same three values are multiplied by a hypothetical activation of 3.0. The original products are 0.72, 2.28, and 7.2. Using the rounded or clipped weights gives 0.0, 3.0, and 6.0. The product errors are therefore 0.72, 0.72, and 1.2. The example shows why a modest weight error can become more visible after multiplication, and why the clipped value produces the largest product error in this constructed case.

06

Scales, grouping, and why metadata is part of the format

A low-bit code is useful only when software knows how to interpret it. In a symmetric quantization scheme, activations and weights are mapped to values centered around zero, and the transformation between quantized and floating-point representations typically involves a scaling factor.[3] The scale is therefore part of the representation, not a decorative label attached to it.

Grouping determines how widely one scale is shared. A single scale for a large tensor is simple, but it must accommodate the full range of that tensor. Separate scales for smaller groups can adapt to local ranges, yet they require more metadata. The tradeoff is between a compact representation and a representation that can follow local variation in the data.[1][3]

Nested quantization illustrates that metadata itself can be compressed. In the documented bitsandbytes feature, a second quantization of already quantized weights saves an additional 0.4 bits per parameter at no additional performance cost according to that documentation.[2] The example should not be generalized into a universal saving, but it shows that the cost of representing scales belongs in the overall accounting.

Four categories that must be specified separately. A complete quantization description names storage, compute, activations, and metadata.
A complete quantization description names storage, compute, activations, and metadata. · Ameer Journal — original explanatory diagramOriginal editorial illustration; no third-party artwork reused.
07

Computation precision can differ from storage precision

A common misunderstanding is to assume that a 4-bit checkpoint means every calculation happens in 4-bit arithmetic. Storage and computation are separate choices. A model may store weights in a packed low-bit form and then convert them to a wider type before performing arithmetic, or it may use a low-precision format directly when the hardware and software support it.[2][3]

The bitsandbytes documentation makes the separation explicit by allowing a 4-bit load to specify bf16 as the compute data type. It also notes that changing the compute type from float32 to bf16 can speed up computation in the documented configuration.[2] That statement concerns a specific configuration and should not be turned into a universal speed claim for all hardware.

The practical lesson is to ask two questions instead of one. First, how are the weights stored? Second, in what precision are they used when the model computes? A checkpoint can be small because its weights are packed, while the runtime still performs arithmetic at a wider precision. Conversely, a low-precision compute path may be available only on suitable hardware and software.

08

Activations, outliers, and sensitive computations

Activations deserve separate attention because they are created during computation rather than stored as part of the checkpoint. A method that quantizes weights does not automatically quantize activations, and a method that quantizes both must manage the errors in each. TensorRT documents a symmetric scheme in which both activations and weights are mapped to quantized values centered around zero.[3]

Outliers complicate activation quantization. An outlier is a hidden-state value beyond a chosen threshold, and such values are computed in fp16 in the documented 8-bit method. The documentation notes that values are usually distributed around [-3.5, 3.5], but large models can show very different ranges, and quantization works well for values around 5 while performance penalties grow beyond that region.[2]

Sensitive computations are another reason to avoid a uniform rule. The documented LLM.int8() method dynamically preserves higher precision for critical computations to prevent information loss in sensitive parts of the model.[2] Some modules may also be skipped entirely when quantizing them would cause instability. The lesson is that precision should be allocated where the computation is most sensitive, not spread evenly by default.

A quantization configuration checklist. Start with tensor scope, then check distribution, then measure task accuracy.
Start with tensor scope, then check distribution, then measure task accuracy. · Ameer Journal — original explanatory diagramOriginal editorial illustration; no third-party artwork reused.
09

Comparing formats by tradeoff, not by product name

Format names describe different ways of spending a bit budget. INT8 and INT4 use integer codes, while FP8 and FP4 use floating-point codes with exponent and mantissa bits. TensorRT documents FP8E4M3, with 4 exponent bits and 3 mantissa bits, and FP4E2M1, with 2 exponent bits and 1 mantissa bit, alongside INT8 and INT4 schemes.[3] The names alone do not determine which format is best for a given tensor.

Integer formats offer a regular spacing between values, which makes the rounding behavior easy to reason about. Floating-point formats allocate their values unevenly, giving finer resolution near zero and coarser resolution at larger magnitudes. That uneven allocation can be advantageous when values are concentrated near zero, but it also means that range and resolution must be considered together rather than inferred from the bit count alone.[3]

NF4 shows why distribution matters. It is a 4-bit data type adapted for weights initialized from a normal distribution, and the documentation recommends it for training 4-bit base models.[2] For inference, the choice between NF4 and another 4-bit type does not have a huge documented impact, but consistency with the model weights is recommended.[2] A format should therefore be matched to the data it represents, not selected by brand or by bit width alone.

10

Choosing a format and checking the result: an actionable checklist

Start by naming the tensor scope. Decide which weights, activations, and modules will be quantized and which will remain at higher precision. Record the storage format, the compute format, and the scale metadata separately, because a single bit-width label does not describe all three.[1][2]

Next, check the distribution before choosing the format. Look for outliers and unusually large values, since those values are the ones most likely to be clipped or to require higher precision. If the method supports an outlier threshold or a skip list, treat those settings as accuracy decisions rather than as minor configuration details.[2]

Then measure the result on the task that matters. Storage arithmetic can show that 8-bit weights take about half the space of bf16 weights and that 4-bit weights take about a quarter, but it cannot show whether accuracy is preserved.[1][2] Compare the quantized model against the unquantized model on representative inputs, and check the sensitive cases rather than relying on an average score alone.

Finally, verify the deployment path. Confirm that the checkpoint format, the loading code, and the hardware support match, and confirm whether the runtime dequantizes weights during execution. A pre-quantized checkpoint is loaded without a quantization config because the method is read from the checkpoint, while a full-precision checkpoint requires a config to quantize during loading.[1] If any of these checks fails, the bit-width label is not a sufficient description of the system.

Hypothetical rounding and clipping example. Original toy example: step 0.5 over [-2.0, 2.0]; not a real format.
Original toy example: step 0.5 over [-2.0, 2.0]; not a real format. · Ameer Journal — original explanatory diagramOriginal editorial illustration; no third-party artwork reused.
Follow the evidence

Sources & further reading

Explore the references behind this guide. External pages may change after our review.

  1. Overview · Hugging Face
    Hugging Face · Accessed 6 Nov 2026
  2. Bitsandbytes · Hugging Face
    Hugging Face · Accessed 6 Nov 2026
  3. Working with Quantized Types — NVIDIA TensorRT
    NVIDIA · Accessed 6 Nov 2026

Article updated 6 Nov 2026.

Found something we should revisit?

Good explanations get better with thoughtful feedback.

Suggest a correction