Skip to work
All work
No. 392026On-device optimization · Apple Silicon

LLM Quantization BenchWhere Quantization Actually Bites

The same model at FP16, Q8_0 and Q4_K_M measured on-device for accuracy, speed and memory, with a per-category breakdown that shows exactly which capability quantization costs you.

Headline results

Q4 vs FP16
0.39× size, 2.0× speed
Accuracy cost
−2.5 points
Where it lands
All arithmetic, 40% → 30%
Unaffected
Factual · reading · reasoning

System architecture

System architecture diagram for llm-quantization-bench
Fig. 1 — LLM Quantization Bench — system architectureFull size

Problem

Shipping a model to a laptop or a phone means quantizing it, and the guidance is a shrug: four-bit is usually fine. Usually fine is not a deployment decision. What is missing is which capability degrades, by how much, and what you get back in speed and memory.

Approach

Hold the model fixed and vary only the quantization. Qwen2.5-0.5B-Instruct at FP16, Q8_0 and Q4_K_M as llama.cpp GGUFs on Apple Silicon with Metal, scored on 40 multiple-choice questions at temperature 0 with three 128-token generations per quant for throughput. Accuracy is broken out by category, arithmetic, factual recall, reading comprehension and reasoning, so the aggregate cannot hide where the loss lands. File size, resident memory and load time are recorded alongside.

Impact

Q4_K_M runs at 0.39× the file size and 2.0× the speed of FP16 for 2.5 points of accuracy. The per-category breakdown is the finding: factual, reading and reasoning scores are identical across all three quantizations, and the entire drop is arithmetic, 40% down to 30%. So the deployment question is not whether to quantize, it is whether your workload does precise multi-step computation. Q8_0 is dominated on this model, matching Q4's accuracy at 1.4× the size.

Decisions & tradeoffs

Break accuracy out by category

A single 2.5-point drop reads as a rounding error and tells you nothing. Split by capability it becomes a clear rule: quantize freely for retrieval and comprehension, think twice for anything computational.

Report resident memory, not just file size

File size is what people quote and RSS is what fills the machine. Both are measured because a 491 MB file that resides at 392 MB is a different deployment story than the download suggests.

State the small-n caveat with the headline

Forty questions puts roughly 2.5 points on a single question, which is the same size as the headline gap. Saying so is what keeps the per-category finding, which is robust, separate from the aggregate, which is not.

Build spec

Model
Qwen2.5-0.5B-Instruct, llama.cpp GGUF, Metal
f16
1,266 MB · 40.5 tok/s · 60.0% · arith 40%
q8_0
676 MB · 67.4 tok/s · 57.5% · arith 30%
q4_k_m
491 MB · 80.6 tok/s · 57.5% · arith 30%
Q4 vs FP16
0.39× size · 2.0× speed · −2.5 points

System notes

  • The whole accuracy loss is arithmetic; factual, reading and reasoning are identical across every quant
  • Smaller is faster because inference here is bandwidth-bound, so the memory saving buys throughput too
  • Q8_0 is dominated on this model, which is a useful negative for anyone reaching for it as the safe middle
  • Load time drops from 10.6s to 0.50s, which matters for anything that cold-starts

What this does not show

  • Forty questions puts roughly 2.5 points on a single answer, the same size as the headline gap. The per-category split is the robust finding; the aggregate is not.

Stack

llama.cpp (Metal) · GGUF · Qwen2.5 · huggingface-hub · psutil

View source on GitHub
Next project
Active Learning · Which Labels Are Worth Buying