Q4 vs Q8 Quantization
Q8_0 is near-lossless and 74% larger than Q4_K_M. Whether that is worth it depends entirely on whether the larger file still fits in your VRAM — and usually it does not.
The short answer
Q8_0 is close enough to the original weights that the difference rarely shows in normal use. Q4_K_M is about 42% smaller, and it is the level most people run because it is the largest that fits. The honest framing is not which is better in isolation — Q8_0 is — but which fits. A larger model at Q4 generally beats a smaller model at Q8 at the same memory budget, and a model resident in VRAM at Q4 always beats one spilling into system RAM at Q8.
Q4_K_M
About 4.9 bits per weight. The practical default for local use.
Q8_0
About 8.51 bits per weight. Near-lossless, and 74% bigger.
Q4_K_M vs Q8_0 at a glance
| Factor | Q4_K_M | Q8_0 |
|---|---|---|
| Measured bits per weightDerived from real GGUF files, not from the format's nominal bit depth | 4.90 | 8.51 |
| Size relative to the other | 42% smaller | 74% larger |
| Size vs the BF16 original | About 31% | About 53% |
| Quality | Small but measurable degradation | Near-lossless against FP16 |
| Typical use | The default for running models locally | When you have memory to spare, or are evaluating |
Weight size at each level, for common model sizes
| Model | Q4_K_M (4.9 bpw) | Q8_0 (8.51 bpw) | Extra for Q8_0 |
|---|---|---|---|
| 8B | 4.9 GB | 8.5 GB | +3.6 GB |
| 14B | 8.6 GB | 14.9 GB | +6.3 GB |
| 32B | 19.6 GB | 34.0 GB | +14.4 GB |
| 70B | 42.9 GB | 74.5 GB | +31.6 GB |
Weights only — the KV cache and framework overhead sit on top. Bits per weight are measured from real GGUF files, not taken from the format names.
Neither name means what it says
A Q4_K_M file is not four bits per weight and a Q8_0 file is not eight. Both are mixed precision: the quantizer keeps attention projections and embedding tables at higher bit depth, because error there propagates through the whole network, and pushes the bulk of the feed-forward weights down.
We measured this against real GGUF files rather than taking the labels at face value — file size in bytes times eight, divided by the exact parameter count from the model's safetensors index. Q4_K_M lands at about 4.90 bits per weight and Q8_0 at about 8.51.
That extra weight above the nominal figure is the point. It is why Q4_K_M holds up as well as it does, and why comparisons against a strict 4-bit format elsewhere in the ecosystem are not comparing like with like.
The decision is almost never quality in isolation
At the same memory budget you usually have a choice between a bigger model at Q4 and a smaller one at Q8. For most tasks the bigger model wins, and it is not close — the capability difference between parameter counts is larger than the quality difference between quantization levels.
The second and sharper form of the decision is residency. If Q8_0 does not fit in your VRAM and Q4_K_M does, Q4_K_M is the right answer regardless of quality, because every offloaded layer runs at system-memory bandwidth on every token. A slightly degraded model that responds is better than a pristine one that crawls.
This is why Q4_K_M became the default recommendation. It is not the best quantization; it is the best one that fits on the hardware most people own.
When Q8 is the right call
When it fits with room to spare. On a 24GB card running an 8B model, Q8_0 needs about 8.5GB against Q4_K_M's 4.9GB, and both leave ample room for context. There is no reason to take the quality loss.
When you are evaluating. If you are measuring a model's capability, or comparing two models, quantization artefacts are noise in your results. Use the highest precision you can hold.
And when the task is precision-sensitive — structured output that must parse, code that must compile, long chains of reasoning where small errors compound. These are the cases where users most often report a difference between quantization levels, and they are worth testing on your own workload rather than trusting a general claim.
Choose Q4_K_M when
- Q8_0 does not fit in your VRAM but Q4_K_M does
- You would rather run a larger model at the same memory budget
- You need room for a long context window alongside the weights
- General chat, summarising, drafting — tasks tolerant of small errors
Choose Q8_0 when
- The model is small enough that both fit comfortably
- You are benchmarking or comparing models and want minimal noise
- The task is structured output, code, or long reasoning chains
- You have already noticed quality problems at Q4 on your workload
Work it out for your own setup
Common questions
- How much worse is Q4 really?
- Small on most benchmarks and task-dependent in practice. It shows up most in precise work — structured output, code, long reasoning — and least in open-ended writing. Rather than trusting a single number, run both on a prompt that represents your actual use if you have the memory to try.
- What about Q5 and Q6?
- They sit between, at about 5.71 and 6.57 bits per weight. Q6_K is a good compromise when Q8_0 overflows and you have room above Q4_K_M. The ladder exists precisely so you can find the highest rung that fits.
- Is Q4_K_M better than Q4_K_S?
- It keeps more tensors at higher precision, so it is slightly larger — about 4.90 bits per weight against 4.66 — and slightly better. If both fit, take the M.
- Does quantization affect speed?
- Yes, and in the direction that helps. Generation is bound by reading weights from memory, so fewer bytes per weight means faster tokens. A Q4 model generates faster than the same model at Q8, on top of being smaller.
Guides that go deeper
Longer reads on the concepts behind this comparison.
- Quantization Guide: Q4_K_M vs Q8_0 vs FP8What each quant level costs you in memory and quality.Read the guide
- How Much RAM and VRAM Do You Need to Run Local LLMs?Model weights, KV cache and OS overhead, tier by tier.Read the guide
- Best Local LLM Runners: Ollama vs LM Studio vs Jan vs llama.cpp vs vLLMWhich runner suits your hardware and workflow.Read the guide