Methodology
Every verdict on this site is computed from published specs and measured file sizes — deterministically, the same way every time, with the formula and thresholds disclosed below. We'd rather show you the math than ask you to trust us.
1. The fit formula
A model fits when everything it needs in memory fits inside your usable memory pool:
required = weights + KV cache + activations + runtime overhead
pool = VRAM − runtime base allocation (discrete GPUs)
= memory × GPU-addressable fraction − base (unified memory)- Weights — the measured size of the actual quantized file (e.g. the GGUF on Hugging Face), not a params-times-bits formula. Measured beats derived whenever we have it.
- KV cache — computed from the model's real attention config:
2 × layers × context × KV heads × head dim × 2 bytes (fp16). Models with MLA, sliding-window, or hybrid attention use their own branch of the formula and carry a beta label until validated. - Activations + overhead — a small scratch-buffer term plus a fixed runtime overhead constant, calibrated conservatively.
- The pool — for discrete GPUs, VRAM minus what the runtime itself allocates at startup. For Macs and unified-memory mini-PCs, total memory times the GPU-addressable fraction (macOS and the mini-PC firmware don't let the GPU take everything), minus the same base allocation.
Worked example: RTX 4090 × Qwen2.5-32B-Instruct (Q4_K_M, 8K context)
| Weights (measured Q4_K_M GGUF) | 19.85 GB |
| KV cache (64 layers × 8 KV heads × 128 dim × 8,192 tokens, fp16) | 2.15 GB |
| Activations | 0.17 GB |
| Runtime overhead | 0.35 GB |
| Required | 22.52 GB |
| Pool (24 GB VRAM − 0.5 GB llama.cpp base) | 23.5 GB |
| Ratio → verdict | 0.958 → Tight (grade C), tier interactive |
Note what the honest answer looks like: 95.8% of the pool is Tight, not “fits”. It loads and runs well — but a longer context or anything else using VRAM pushes it over. Most calculators would round this to a clean yes. Run this exact check yourself.
2. Why speed is a tier, not a number
Internally we compute a bandwidth-roofline estimate — decode speed on a single request is dominated by how fast the hardware can stream the model's active weights through memory. But publishing that estimate as “42 tok/s” would be fake precision: the real number moves with runtime version, drivers, quant kernel, batch size, and thermals. A tier survives a stopwatch; a number does not.
| Tier | Band | What it feels like |
|---|---|---|
| Interactive | > 20 tokens/s | Chat feels instant. |
| Usable | 8–20 tokens/s | Fine for most work; noticeable on long outputs. |
| Painful | < 8 tokens/s | You will be waiting. Honest label, not a euphemism. |
The unified-memory mini-PC class is the sharpest argument for tiers. An NVIDIA DGX Spark (128 GB unified, ~273 GB/s bandwidth) fits a 120B-class MoE model — huge capacity — but that bandwidth caps single-request decode to a middling tier, while its prompt-processing (compute-bound, not bandwidth-bound) can land a tier higher. One headline number would mislead in both directions at once. The tier plus the stated assumptions — decode, batch 1, the exact quant — is the answer that stays true.
Same logic for multi-GPU: a second card raises the VRAM pool (run a bigger model) but with the default layer-split serving, a request still runs the layers sequentially — so the pool adds and the speed doesn't. We compute the two effects separately and never conflate them.
3. The grade thresholds — disclosed
The grade is the required-to-pool ratio against fixed, published thresholds. These are locked by tests in the codebase — they only change together with a test update, never silently.
| Grade | Rule | Meaning |
|---|---|---|
| A+ | required ÷ pool ≤ 0.70 | Fits with real headroom — room for longer context or a bigger quant. |
| B | required ÷ pool ≤ 0.90 | Fits. Comfortable for everyday use at the stated assumptions. |
| C | required ÷ pool ≤ 1.00 | Tight — it loads, but margin cases (longer context, other apps using VRAM) can fail. |
| C (offload) | spills into system RAM | Loads only by offloading layers to CPU RAM. Never grades better than C: spilling is survivable, not good. |
| D | required ÷ pool > 1.00, no offload path | Won't fit. We say so instead of suggesting a workaround that doesn't exist. |
Before any of this math runs, a hard compatibility gate checks that the quant format actually has a supported kernel on your hardware's backend — an AMD card on a CUDA-only path is a “no” regardless of VRAM, and gated results carry no misleading numbers at all.
4. What “beta” means
A beta badge means the fit verdict is solid (it's physics) but the speed tier for that regime hasn't been calibrated against enough real-world measurements yet, so it carries wider error bars. We show the label instead of pretending. The beta regimes:
- AMD Radeon and Intel Arc discrete GPUs (ROCm / Vulkan paths) — performance is volatile across driver and runtime versions
- The unified-memory mini-PC class (DGX Spark, Strix Halo boxes) — new hardware, few verified measurements exist anywhere
- MoE models — expert routing makes decode speed estimates carry wide error bars
- CPU offload — speed varies heavily with how many layers spill to RAM
- MLA, sliding-window, and hybrid attention — the KV-cache formula branches are implemented but not yet validated against measurements
A single fast result on a nightly driver build never promotes a tier — calibration requires reviewed, verified submissions across versions.
5. Data sources and stamping
- Model architecture — layer counts, KV heads, head dims, context limits read from each model's
config.jsonon Hugging Face. - Quantized file sizes — measured from the actual published artifacts (GGUF repos on Hugging Face), not estimated.
- Hardware specs — VRAM, memory bandwidth, TDP from TechPowerUp and vendor spec sheets; every row links its source.
- Prices — MSRP from vendors; used prices from market listings. Dated, because a dated real number beats a fresh made-up one.
Every row in the dataset carries a source_url and an as_of date. The current data snapshot is 2026-07-11. AI tooling may polish our prose; it never generates the facts — every number traces to a source or a formula on this page.
6. What we do not model — yet
Published so you can decide whether a verdict applies to your setup:
- Batching — every tier assumes batch 1 (one request at a time), the single-user case
- Speculative decoding — draft-model speedups are not modeled
- Tensor-parallel speedups — a second GPU adds VRAM in our math (layer-split), never speed
- KV-cache quantization — we assume fp16 KV; Q8/Q4 KV options would shrink the cache and aren't modeled yet
- Prompt-processing speed — tiers describe decode (generation) speed only
- Thermals, power limits, and background load on your machine
7. The error-bar commitment
Estimates should be falsifiable. As verified real-world submissions accumulate, we will calibrate the tier model against them and publish our median error on this page — including where we were wrong. Submissions are reviewed before they influence anything (our anti-poisoning policy), and until a regime has enough verified data it keeps its beta label.
Ran a model we got wrong? Use the submission form under any result — hardware, model, quant, and runtime come pre-filled; you add the measured tokens-per-second.