AI engineering and inferenceLoading progress…

Containers and KV state

Estimate weight memory at different precisions and explain quantization error, scales and calibration.

Containers and the KV cache

A quantized model has to be stored somewhere. GGUF is one file format; it holds tensors with associated encodings and metadata, and different tensors may use different encodings, so it is a container, not a precision. Scales are part of the real size: 4-bit codes with a 2-byte scale per 64 weights cost 0.53125 bytes per weight, so 7 billion weights take 3.72 GB, not 3.5.

The KV cache is separate state. Quantizing the weights does not change it: it stays in its own format (often 16-bit) unless you also choose to quantize it.

weight bits4values per scale64KV bytes per value2tokens in cache4,096
weights
KV
weights: 7e9 × (4/8 + 2/64) = 3.719 GB KV cache (reference model, 4,096 tokens, 2 byte(s) per value): 0.537 GB total ≈ 4.256 GB

Weight quantization and KV-cache quantization are separate choices on separate state. A model file format such as GGUF is a container that can hold tensors in several encodings; it is not one precision.

Weights and a KV cache are separate memory items.

Predict first. Does quantizing model weights automatically quantize the KV cache?

Chapter context

Quantization represents values with a smaller set of numerical codes. Memory savings are easy to estimate nominally, but quality and speed depend on scales, calibration, kernels and which tensors use the smaller representation.

Chapter reference: math, worked example & code

This section belongs to the whole chapter, so it is the same on every lesson in it and may cover a different lesson's topic. The code for the experiment you just ran is inside the experiment itself.

Math and notation

Nominal packed weight memory is

M=N b/8  bytes.M=N\,b/8\;\text{bytes}.

For affine quantization, q=clip⁡(round⁡(x/s)+z)q=\operatorname{clip}(\operatorname{round}(x/s)+z) and x^=s(q−z)\hat x=s(q-z). Here s is scale, z zero point and clipping uses the chosen integer range. Metadata and mixed-precision tensors add storage.

Worked example

Seven billion weights at 16 bits occupy 14 billion bytes (14 decimal GB) nominally. At 4 bits they occupy 3.5 decimal GB, a fourfold nominal reduction. Separately, x=0.23 with s=0.1,z=0 rounds to q=2 and reconstructs 0.2, an absolute error of 0.03.

Reference code

The following example uses the Python standard library and does not call a remote service.

from math import isclose
count=7_000_000_000
assert count*16/8 == 14_000_000_000
assert count*4/8 == 3_500_000_000
q=round(.23/.1)
assert q == 2
assert isclose(abs(.23-.1*q),.03)

Python examples are provided for study and local execution; this page does not execute Python.

Common mistakes

Nominal bit packing excludes scales, padding and other state. Different 16-bit float formats have different ranges and precision. Quantization quality and kernel speed both need measurement.