Get quantization right and a 27B model runs comfortably on a single consumer card. Get it wrong and you either run out of memory, or run a model that is fluent and subtly wrong. Both failures look like something else until you measure them.

§1What quantization actually changes

A model is a set of numbers. Each weight is stored as a fixed number of bits. More bits means the stored numbers sit closer to the model's original precision, which usually means better quality — at the cost of memory.

Quantization reduces those bits. It does not delete the model; it rounds the numbers. A 4-bit weight stores one of sixteen values; an 8-bit weight stores one of 256. The 8-bit version can express finer distinctions, so it usually answers more precisely.

THE SENTENCE TO REMEMBER

Quantization trades memory for quality, not quality for free. There is no quantization that is both smaller and better. Everything is a trade you can measure.

§2The formats that actually matter

You do not need to know every format. You need the handful that show up in practice:

FormatBitsWhat it isUse it when
BF16 / FP1616The model's native precisionYou have the memory and want the ceiling
FP88Native 8-bit, fast on modern cardsYour card supports it natively
Q88Quantized 8-bitYou want 8-bit quality without native FP8
Q66A rarer middle pathYou need to squeeze past 8-bit VRAM
Q4 (Q4_K_M)4The common efficient choiceYou want small, fast, and usually "good enough"
NVFP44NVIDIA's 4-bit for Blackwell cardsYou are on RTX 50 and want the smallest fit

The Q4 family has sub-formats (Q4_0, Q4_1, Q4_K_M). The _K_M variant is a mix that keeps the important weights more precise. It is the default for a reason. Do not chase the exotic variants; start with Q4_K_M and Q8, and only go lower if memory forces you.

§3The memory math that decides everything

VRAM is shared. The model weights are the fixed bill. The KV cache is the growing bill. Everything else — runtime workspaces, CUDA graphs, a speculative drafter when you use one — competes for what is left.

So the real question is never "how big is the model?" It is "how much memory is left for context after the model loads?" On a 32 GB card, roughly:

27B model atWeights needOn 32 GBLeft for everything else
BF16~54 GBDoes not fit
Q8 / FP8~27–28 GBFits, barelyAlmost nothing for context
Q4 / NVFP4~14–15 GBFits comfortably17+ GB for KV cache and acceleration

This is the whole lesson in one direction: lower quantization frees memory for context, and context is the thing you are actually buying. A model that fits with room for 64K context is more useful than a model that fills the card at 8-bit and can only hold 8K.

§4The quality trade-off, honestly

Here is what I have observed, and what I would tell someone who asks me directly:

The pattern is a cliff after the cliff. The first few steps lose almost nothing. The last step can lose a lot — and you usually only find out by testing, not by reading.

§5How to test a quantization instead of guessing

Do not trust the label. Test the model the way you will actually use it. My field-note contract records nine things for every configuration, and a quantization is no different:

  1. Model identity + quantization — exact filename and bits.
  2. Configured context — what the runtime was told to reserve.
  3. Task and input shape — the real job, not a synthetic prompt.
  4. Recall — can it answer a question it was asked to remember?
  5. Tool calling — does structured output still work?
  6. Instruction following — does it obey the format you asked for?
  7. Latency and memory — tokens per second, VRAM after the run.
  8. Observed failure — what broke, and how.
  9. Cloud comparison — does it match a cloud model on the same task?

A quantization that returns fluent text but breaks tool calls is not faster. It is broken. If a configuration passes all nine, it is good enough. If it fails one, the question is not "is 4-bit bad?" It is "does this task need the thing that broke?"

§6The KV cache is the hidden cost

Here is the part most guides skip. A lower quantization frees memory for context, but a speculative drafter — the thing that makes local inference fast — also uses that memory. So the cheapest model is not automatically the fastest, because the fast recipe may not fit in the memory you just saved.

I measured this directly when I built the RTX 5090 serving recipes: the fastest profile was not the longest-context one. D-Flash 2 stayed my validated 32K speed profile. DSpark, which used less VRAM, could reach 112K. Quantization, context, and speed are three lanes that share one tank. You cannot optimize all three at once.

WEIGHTS ARE NOT THE ONLY QUANTIZED THING

The KV cache has its own precision knob, and it does not behave like the weight knob. In my serving recipes an FP8 KV cache was effectively free. The engine's published table for a larger reasoning model shows a 4-bit KV cache collapsing a reasoning benchmark to roughly half its score. Choose weight precision first; treat KV precision as a separate decision with its own test.

§7What I actually run, and why

I do not run one quantization for everything. I run the one that matches the machine and the job:

The rule is not "always use the smallest." The rule is use the largest quantization that still leaves room for the context this task needs. A coding task that needs 64K context should give up weight precision for cache room, because the context is the bottleneck, not the model.

§8The mistakes I made

Mistake 1: chasing the smallest number. Saving a few gigabytes on weights bought nothing when the thing I actually wanted — a speculative drafter plus long context — no longer fit beside them in the same recipe. Smaller was not better. It was just smaller.

Mistake 2: trusting the advertised context. A model can advertise 128K while the loaded configuration has far less room. The effective limit is the smaller of the declared length and the physical KV pool. Always measure what fits, not what is printed.

Mistake 3: comparing quantizations on one synthetic prompt. A high tokens-per-second on a short prompt means nothing. Test on the real task, at the real context length, and repeat it. One run per configuration is not a measurement.

§9The questions people actually ask

Can one RTX 5090 run a 27B model?

Yes. At Q4 or NVFP4 it fits with room for context. At Q8 it fits but leaves little. At BF16 it needs roughly 54 GB and does not fit at all.

Is 4-bit quantization good enough?

For most chat and coding, yes. For long recall or structured tool use, test it first — those are the tasks where 4-bit tends to slip first.

Q4 or Q8?

Start with the one that leaves room for the context you need. If the task needs 64K context on a 32 GB card, the smaller weights usually win because the KV cache is the bottleneck. If 32K is enough and quality matters more, prefer 8-bit.

Does quantization slow down inference?

Not on modern cards. FP8 and Q8 can be faster than BF16 because they move fewer bytes. The slowdown, if any, comes from running out of memory, not from the quantization itself.

What is NVFP4?

NVIDIA's 4-bit floating-point format for Blackwell cards like the RTX 5090. It is the smallest common option and the format the card accelerates natively — and like every 4-bit choice, it earns trust through testing, not through the spec sheet.

The decision in one view

  • Quantization trades memory for quality, never for free.
  • The real question is how much memory is left for the KV cache after the weights load.
  • BF16 to FP8 is usually free. Q8 to Q4 is the first real loss — and KV-cache precision is a separate knob with its own cliff.
  • Test every quantization on the real task, at the real context length, before trusting it.
  • Use the largest quantization that still leaves room for the context the task needs.