- Prioritize memory capacity, then bandwidth, then compute when selecting local AI hardware
- Calculate the largest model a machine can hold under the 85% fit rule, including KV cache and overhead
- Derive the memory bandwidth needed to reach a target decode speed
- Calculate the context budget left after weights and evaluate the effect of KV-cache quantization
- Compare machine classes against a stated goal and recommend a configuration with explicit trade-offs
Before this: AI Hardware Explained, Tokens per Second: Estimating Local AI Speed, Local Runtimes and Model Formats
Buying hardware for local AI is easy to get wrong. A fast machine with too little memory cannot run the models you want, and a huge-memory machine with low bandwidth may run them too slowly to enjoy. This lesson turns the earlier lessons into a buying process. It deliberately avoids quoting prices, which change often; check the AI Hardware & Model Index for current prices and fit.
Start with the goal, not the hardware
Answer three questions first:
- What is the largest model you want to run? This sets the memory you need.
- How fast must it answer? This sets the bandwidth you need.
- What else will the machine do? A gaming PC, a portable laptop, and a silent office box are different purchases.
An analogy: buying for local AI is like buying a truck. First decide the heaviest load you will carry (memory), then how fast you need to drive with it (bandwidth). Horsepower (compute) matters too, but a fast truck that cannot hold the load is useless.
Priority order: memory first, then bandwidth
- Memory capacity first. If the model does not fit, nothing else matters. Recall the rule from earlier: weights + KV cache + about 1.5 GB should be at most 85% of usable memory.
- Bandwidth second. It sets decode speed. Divide 0.55 × bandwidth by the bytes read per token to estimate tokens per second.
- Compute third. It sets prompt-processing speed, which matters for long documents and agents.
- Then everything else: noise, power, size, operating system, and software support.
Remember the "usable" part. On a discrete GPU, usable memory is the VRAM. On a unified-memory machine, keep two numbers apart:
- The AI Index's figure is total memory minus an operating-system reserve: 8 GB on macOS and Windows, 4 GB on Linux or on machines with 16 GB or less. For a Mac, this assumes the GPU memory cap has been raised. A 64 GB Mac counts as 56 GB usable, and 85% of that is about 47.6 GB.
- A Mac at default settings lets the GPU use only part of unified memory: roughly 75% on large configurations (a smaller share on small ones) until you raise the cap, for example with
sudo sysctl iogpu.wired_limit_mb=<megabytes>, which lasts until reboot. At the default, the same 64 GB Mac has about 48 GB usable, and 85% of that is about 41 GB.
The main classes of machine
As of November 2026, these are the common options.
Laptops and desktops with 16–32 GB. Most people already own one. They comfortably run small models (roughly 3B–8B parameters at 4-bit), which handle drafting, summarizing, and simple coding help well. Apple silicon laptops use unified memory, so a 32 GB MacBook has about 24 GB usable by the Index's measure (32 − 8 GB), and somewhat less at the default GPU cap; Windows laptops with a discrete GPU are limited by that GPU's VRAM, often 8–16 GB.
Unified-memory machines with large pools. These trade bandwidth for capacity:
- Apple Mac Studio and higher-memory MacBook Pro configurations; for example, the M5 Ultra Mac Studio announced in August 2026 offers up to 512 GB at up to about 1.2 TB/s.
- AMD Ryzen AI Max+ 395 systems with up to 128 GB at 256 GB/s, of which up to 96 GB can be assigned to the GPU.
- NVIDIA GB10 systems such as the DGX Spark, with 128 GB at 273 GB/s, running Linux with NVIDIA's software stack.
These are the most practical way to run 70B dense models and large mixture-of-experts (MoE) models on one quiet box. Generation is slower than on a big GPU, and prompt processing can be noticeably slower on some of them.
Single big-VRAM GPUs. A desktop with one high-end card is the fastest option for models that fit. The GeForce RTX 5090 has 32 GB at 1,792 GB/s and 575 W board power. The workstation RTX PRO 6000 Blackwell has 96 GB at about 1,792 GB/s. These suit people who want maximum speed on small and mid-sized models, or who also game, render, or train.
Workstations and multi-GPU builds. Two or more GPUs, or a professional card in a workstation, extend capacity while keeping high bandwidth. They cost more, draw more power, and need more setup. The next lesson covers what splitting a model across GPUs does and does not do.
Decision table by target model size
Sizes assume about 4.8 bits per weight with a moderate context (a few thousand tokens). Longer contexts need more.
| Target model | Approx. memory need | Machines that fit (by the 85% rule) |
|---|---|---|
| 3B–8B dense | about 3–7 GB | Most 16 GB laptops; GPUs with 12 GB or more (8 GB for the smaller sizes) |
| 12B–14B dense | about 9–11 GB | 16 GB GPUs; Macs with 24 GB or more |
| 27B–32B dense | about 19–23 GB | 32 GB GPUs (24 GB GPUs for the 27B end); Macs with 48 GB or more |
| 70B dense | about 45–48 GB | 96–128 GB unified-memory machines; 96 GB pro GPUs; two 32 GB GPUs |
| MoE around 100B–120B total | about 65–80 GB | 128 GB unified-memory machines; 96 GB pro GPUs |
| 200B–400B+ total (usually MoE) | about 130–260 GB+ | 256–512 GB unified-memory machines, or clusters |
Two notes. First, a 64 GB Mac at the default GPU cap does not fit a 70B model at this quantization under the 85% rule. With the cap raised (the Index's assumption, 56 GB usable), it fits only at short context, roughly 6,000 tokens or fewer; a smaller quantization buys more room. Second, MoE models suit unified-memory machines especially well, because they need lots of capacity but read only their active parameters per token.
Matching goals to machines
- "I want private chat and writing help." Use the laptop you have with a 4B–8B model.
- "I want a capable coding or research assistant at home." Aim for enough memory for 27B–32B dense or a mid-sized MoE model: a 32 GB GPU for speed, or a 64–128 GB unified-memory machine for flexibility.
- "I want to run the largest open models." You need 128 GB or more of usable memory, or a cluster, and should accept slower generation.
- "I want to serve a small team." Favor high-bandwidth GPUs and a server runtime with batching.
Common mistakes
- Buying for compute (TOPS) instead of memory.
- Forgetting the operating-system reserve on unified memory.
- Ignoring context: a 100,000-token context can add many gigabytes of KV cache.
- Treating NPUs or system-RAM offload as a way to run big models fast.
Going deeper
The decision table is a summary of three inequalities. Writing them out lets you answer questions the table cannot, such as "what is the biggest model this machine can hold?" or "how much context do I have left?".
Inequality 1: fit
With usable memory (GB), total parameters (billions), bits per weight , KV cache (GB), and 1.5 GB overhead, the Index's fit rule is
Solving for gives the largest model that fits:
Example: a 64 GB Mac at the default GPU cap (about 75%) has . At 4.8 bits ( GB per billion parameters) and ignoring the cache, B. With a 70B-class model's 8K-token cache of about 2.7 GB, B. So 70B misses by roughly 10–17%. With the cap raised, the Index uses : B without cache and about 69B with the 8K cache, so a 70B model fits only if its cache stays under GB, roughly 6,000 tokens for that architecture.
Inequality 2: speed
To reach a target decode speed with active parameters, invert the decode formula:
For 20 tok/s: s. A 32B dense model at 4.8 bits (19.2 GB per token) needs GB/s. A 70B dense model (42 GB per token) needs about 1,575 GB/s, which only the fastest single devices offer. A machine at about 1,200 GB/s would give roughly 15 tok/s on that 70B model.
Inequality 3: context
Once the weights are placed, what remains is your context budget:
where is the KV cache per token. For a 32B model with 64 layers, 8 KV heads, head dimension 128, and a 16-bit cache, bytes. On a 32 GB GPU: GB of budget, or about 21,000 tokens. The same GPU running an 8B model has room for more than 150,000 tokens. Quantizing the KV cache to 8 bits, which several runtimes support, halves and doubles the budget at a small quality cost.
Putting it in code
def kv_bytes_per_token(layers, kv_heads, head_dim, bytes_el=2):
return 2 * layers * kv_heads * head_dim * bytes_el
def max_params_b(usable_gb, bits, kv_gb=0.0):
"""Largest model (billions of params) that passes the 85% fit rule."""
return (0.85 * usable_gb - kv_gb - 1.5) / (bits / 8 * 1.05)
def max_context(usable_gb, params_b, bits, kv_per_token):
weights = params_b * bits / 8 * 1.05
budget_gb = 0.85 * usable_gb - weights - 1.5 # what is left for the KV cache
return max(0, int(budget_gb * 1e9 / kv_per_token))
def bandwidth_needed(active_b, bits, target_tps):
return active_b * bits / 8 / (0.55 * (1 / target_tps - 0.0015))
print(round(max_params_b(48, 4.8), 1)) # 64 GB Mac, default GPU cap
print(round(max_params_b(56, 4.8), 1)) # same Mac, Index assumption (cap raised)
print(max_context(32, 32, 4.8, kv_bytes_per_token(64, 8, 128))) # 32B on a 32 GB GPU
print(max_context(32, 32, 4.8, kv_bytes_per_token(64, 8, 128, 1))) # same, 8-bit KV cache
print(round(bandwidth_needed(32, 4.8, 20))) # GB/s for 20 tok/s
Output: 62.4 and 73.2 (billion parameters), 21,133 tokens, 42,266 tokens, and 720 GB/s. With these four functions you can screen any shortlist: drop machines that fail the fit inequality for your target model at your target context, then rank the survivors by how far their bandwidth exceeds the requirement.
Energy per token
Power draw matters more once you divide it by speed. Energy per generated token is joules, where is power in watts and is tokens per second. Using board or adapter ratings as rough upper bounds (real draw during decode is often lower): a 575 W GPU decoding a 32B model at about 48 tok/s uses at most about 12 J per token, or kWh per million tokens; a box limited to 240 W decoding the same model at about 7.7 tok/s uses up to about 31 J per token, or about 8.6 kWh per million. The lower-power machine is not automatically the more efficient one; a fast device that finishes quickly and then idles can use less energy per token. Measure at the wall for real numbers.
A worked buying decision
A user wants a 70B dense model at no less than 10 tok/s. Option A is a 32 GB GPU at 1,792 GB/s; option B is a unified-memory box with about 120 GB usable at 273 GB/s.
- Fit: about 48 GB needed. A fails (); B passes.
- Speed on B: s, about 3.6 tok/s, below the target.
- Bandwidth needed for 10 tok/s: GB/s.
Neither machine meets the goal. The professional answer is to change one constraint: accept a mixture-of-experts model with similar quality and far fewer active parameters (B becomes fast enough), choose a 96 GB GPU, or use two 32 GB GPUs. The inequalities make that trade explicit instead of leaving it to marketing.
A final check before buying: run the three inequalities at the context length you will actually use, not the default. A machine that fits a model comfortably at 8K tokens may fail at 64K, and agents and document workflows routinely use long contexts. If the budget is tight, a smaller quantization, an 8-bit KV cache, or a model with fewer KV heads usually buys more room than a hardware upgrade.
In practice
- Write down your target model size and minimum acceptable speed, then filter machines by memory first and bandwidth second.
- Use the decision table for a first cut, then check exact fit and estimated speed in the AI Hardware & Model Index, which tracks current prices.
- Before buying, test the model you care about on hardware you can borrow or rent, so you know it is good enough for your work.
Key takeaways
- Choose memory capacity first, because a model that does not fit cannot run; then choose bandwidth, which sets generation speed.
- Usable memory is VRAM on a discrete GPU; on unified memory the AI Index uses total minus an operating-system reserve (assuming a Mac's GPU cap has been raised), while a Mac at default settings lets the GPU use only about 75% on large configurations.
- Laptops with 16–32 GB suit small models, large unified-memory machines suit 70B dense and big MoE models, and big-VRAM GPUs are fastest for models that fit.
- Mixture-of-experts models are a good match for large but slower unified memory.
- Check current prices and exact fit in the AI Index rather than relying on remembered prices.
Terms in this lesson
- Usable memory
- The memory actually available to run a model: VRAM on a discrete GPU, or on unified memory total minus an operating-system reserve (the AI Index's measure, which assumes a Mac's default GPU cap has been raised).
- 85% rule
- The AI Index's guideline that a model fits only if its total memory need is at most 85% of usable memory.
- Mixture of experts (MoE)
- A model design that holds many expert sub-networks but uses only a few of them for each token.
- Workstation GPU
- A professional graphics card, often with much more VRAM than consumer cards, aimed at heavy compute work.
- Context budget
- The memory left for the KV cache after weights and runtime overhead, which sets the longest context a machine can hold for a given model.
Check your understanding
- 1.
You want to run a 70B dense model at 4-bit. Which spec should you check first?
- 2.
On a 64 GB Mac left at default settings, a 70B model at about 4.8 bits fails the 85% fit rule even though it can pass with the GPU memory cap raised. Why?
- 3.
Which kind of model makes the best use of a 128 GB unified-memory machine with modest bandwidth?
- 4.
A Mac with 128 GB of unified memory is left at its default GPU cap of about 75%. What is the largest total memory need that passes the 85% fit rule?
- 5.
Roughly what memory bandwidth does a 32B dense model at 4.8 bits per weight need to decode at 20 tok/s under the Index formula?
Exercises
Work each problem before opening the solution.
- Exercise 1Core
A GPU has 24 GB of VRAM. At 4.8 bits per weight and with about 1 GB of KV cache, what is the largest dense model (in billions of parameters) that passes the 85% rule? Does a 27B or 32B model fit?
Show solution
B. A 27B model fits (with little headroom); a 32B model does not.
- Exercise 2Core
You want 25 tok/s from a mixture-of-experts model with 12B active parameters at 4.8 bits. What memory bandwidth do you need?
Show solution
Bytes per token: 12 × 0.6 = 7.2 GB. s. GB/s. Many unified-memory machines in the 256–273 GB/s class fall short (about 19–20 tok/s); a machine in the 400 GB/s or higher range clears it.
- Exercise 3Core
Using the lesson's worked buying decision, which single change lets option B (about 120 GB usable, 273 GB/s) reach 10 tok/s: a 70B dense model at 3.5 bits, or an MoE model with 120B total and 6B active at 4.8 bits? Show the numbers.
Show solution
70B at 3.5 bits: bytes per token = 70 × 3.5 ÷ 8 = 30.6 GB; time = 30.6 ÷ 150.15 + 0.0015 ≈ 0.205 s, about 4.9 tok/s. Still too slow.
MoE at 4.8 bits: bytes per token = 6 × 0.6 = 3.6 GB; time = 3.6 ÷ 150.15 + 0.0015 ≈ 0.0255 s, about 39 tok/s. Fit check: weights 120 × 0.63 = 75.6 GB, plus cache and 1.5 GB, well under 0.85 × 120 = 102 GB. The MoE model meets the goal; lowering bits alone does not.
- Exercise 4Challenge
Write a function
shortlist(machines, model, ctx, min_tps)where each machine is a dict withname,usable_gb,bwand the model dict hastotal_b,active_b,bits,layers,kv_heads,head_dim. Return machines that pass the fit rule at contextctxand reachmin_tps, sorted by speed. Test with a 32B dense model (64 layers, 8 KV heads, head dim 128) at 4.8 bits, ctx 16,384, min 15 tok/s, against: GPU-24 (24, 1008), GPU-32 (32, 1792), Unified-96 (96, 819), Unified-120 (120, 273).Show solution
def shortlist(machines, model, ctx, min_tps): kv = 2 * model["layers"] * model["kv_heads"] * model["head_dim"] * 2 * ctx / 1e9 need = model["total_b"] * model["bits"] / 8 * 1.05 + kv + 1.5 per_tok = model["active_b"] * model["bits"] / 8 out = [] for m in machines: if need > 0.85 * m["usable_gb"]: continue tps = 1 / (per_tok / (0.55 * m["bw"]) + 0.0015) if tps >= min_tps: out.append((m["name"], round(tps, 1))) return sorted(out, key=lambda x: -x[1]) machines = [dict(name="GPU-24", usable_gb=24, bw=1008), dict(name="GPU-32", usable_gb=32, bw=1792), dict(name="Unified-96", usable_gb=96, bw=819), dict(name="Unified-120", usable_gb=120, bw=273)] model = dict(total_b=32, active_b=32, bits=4.8, layers=64, kv_heads=8, head_dim=128) print(shortlist(machines, model, 16384, 15)) # [('GPU-32', 47.7), ('Unified-96', 22.7)]Need: weights 20.16 GB + KV 4.29 GB (262,144 bytes × 16,384) + 1.5 ≈ 25.95 GB. GPU-24 fails fit (limit 20.4 GB). GPU-32 fits (limit 27.2 GB) at about 47.7 tok/s. Unified-96 fits at about 22.7 tok/s. Unified-120 fits but reaches only about 7.7 tok/s, below 15, so it is excluded. The machine specs here are illustrative inputs, not product claims.
Further reading
- paperDettmers & Zettlemoyer, The case for 4-bit precision: k-bit Inference Scaling Laws (ICML 2023)
- paperAinslie et al., GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints (2023)
- bookAustin et al. (Google DeepMind), How to Scale Your Model, chapter: All About Transformer Inference (2025)
- docsHugging Face Hub documentation: GGUF
- paperPope, Douglas, Chowdhery, Devlin, Bradbury, Levskaya, Heek, Xiao, Agrawal & Dean, Efficiently Scaling Transformer Inference (2022)
Go further
Sources
- Tom's Hardware: Nvidia GeForce RTX 5090 review
- Tom's Hardware: Nvidia Blackwell RTX Pro with up to 96GB of VRAM
- 9to5Mac: Apple unveils next-generation Mac Studio with M5 Max and M5 Ultra
- Tom's Hardware: AMD's Strix Halo Ryzen AI Max debuts with new memory tech
- NVIDIA DGX Spark User Guide: Hardware Overview
- LM Studio docs: System requirements
- Apple Developer Forums: recommendedMaxWorkingSetSize and GPU access to unified memory
Fact-checked and last reviewed 2026-11-05