If you are choosing a laptop to run local models, the decision is mostly about one number: how many gigabytes the model, its context and the runtime can occupy at once. A 16 GB Mac comfortably runs a 4-bit 8B model, a 64 GB Mac can hold a 4-bit 70B, and a Windows laptop with an NVIDIA GPU is limited to its dedicated VRAM, which tops out at 24 GB in current laptop parts. This post gives you a fit table computed by a script, with the assumptions stated, so you can check a laptop before you buy it.
I computed everything on 2026-10-09. I did not run any model on a Mac or a laptop GPU, and I have no speed measurements. The table answers "will it fit", not "will it be fast".
How do I know if a model fits my laptop?
Add three things: the weights, the KV cache for the context you actually use, and about a gigabyte of runtime overhead. The VRAM calculator post has the formulas and a script, vram_estimate.py, and this post builds on it. If you want to understand why a "4-bit" model file is closer to 4.9 bits per weight, read quantization explained.
Then compare the total against the memory the GPU may use:
- On a Windows laptop with an NVIDIA GPU: the dedicated VRAM. NVIDIA's laptop pages (read via a summarising fetch on 2026-10-09, so check the exact wording) list the RTX 5090 Laptop GPU at 24 GB, the 5080 at 16 GB, the 5070 Ti at 12 GB, and the 5060 and 5050 at 8 GB. The RTX 5070 Laptop GPU is listed at both 12 GB and 8 GB without saying which configuration applies. For the previous generation, the RTX 4090 Laptop is 16 GB, the 4080 is 12 GB, the 4070 and 4060 are 8 GB, and the 4050 is 6 GB. Laptop VRAM is not the same as desktop VRAM for a card with a similar name, so always read the laptop spec.
- On an Apple Silicon Mac: a share of unified memory. Apple documents
recommendedMaxWorkingSetSizeonly as an approximation of what the GPU can allocate without hurting performance. A llama.cpp GitHub discussion (read via a summary) reports a default where the system keeps roughly a third of memory up to 32 GB and a quarter above that, so the GPU gets about two thirds, then about three quarters. This is community-reported, not an Apple-published number, and it can change between macOS releases.
The script
Save this next to vram_estimate.py from the calculator post, then run python3 laptop_fit.py.
"""laptop_fit.py: which models fit on which laptop. Needs vram_estimate.py (from the VRAM post) in the same folder."""
from vram_estimate import MODELS, infer_gb
# two more configs, copied from config.json on Hugging Face
MODELS["qwen2.5-3b"] = dict(H=2048, L=36, nh=16, nkv=2, I=11008, V=151936, tied=True, bias=True)
MODELS["qwen2.5-32b"] = dict(H=5120, L=64, nh=40, nkv=8, I=27648, V=152064, tied=False, bias=True)
ORDER = ["qwen2.5-3b", "llama3.1-8b", "qwen2.5-14b", "qwen2.5-32b", "llama3.1-70b"]
CTX = 8192
def mac_budget(ram_gb):
# Assumption: GPU may use ~2/3 of unified memory up to 32 GB, ~3/4 above (community-reported macOS default)
return ram_gb * (2 / 3 if ram_gb <= 32 else 3 / 4)
def largest(budget, quant):
fits = [m for m in ORDER if infer_gb(m, quant, CTX) <= budget]
return fits[-1] if fits else "none"
print(f"Memory needed (GB), context {CTX}, batch 1")
print(f"{'model':13s} {'Q8_0':>6s} {'Q4_K_M':>7s}")
for m in ORDER:
print(f"{m:13s} {infer_gb(m, 'Q8_0', CTX):6.1f} {infer_gb(m, 'Q4_K_M', CTX):7.1f}")
print("\nApple Silicon (unified memory)")
print(f"{'RAM':>4s} {'GPU budget':>10s} {'largest at Q4_K_M':18s} largest at Q8_0")
for ram in (8, 16, 24, 32, 36, 48, 64, 96, 128):
b = mac_budget(ram)
print(f"{ram:4d} {b:10.1f} {largest(b, 'Q4_K_M'):18s} {largest(b, 'Q8_0')}")
print("\nNVIDIA laptop GPUs (dedicated VRAM only, no CPU offload)")
for label, vram in [("RTX 4050 (6 GB)", 6), ("8 GB class", 8), ("12 GB class", 12), ("16 GB class", 16), ("RTX 5090 (24 GB)", 24)]:
print(f"{label:18s} {largest(vram, 'Q4_K_M'):18s} {largest(vram, 'Q8_0')}")
print("\n16 GB Mac, llama3.1-8b Q4_K_M: what context fits?")
for ctx in (8192, 32768, 65536, 131072):
need = infer_gb("llama3.1-8b", "Q4_K_M", ctx)
print(f"ctx {ctx:6d}: {need:5.1f} GB vs budget {mac_budget(16):.1f} GB -> {'fits' if need <= mac_budget(16) else 'no'}")
Real output:
Memory needed (GB), context 8192, batch 1
model Q8_0 Q4_K_M
qwen2.5-3b 4.6 3.2
llama3.1-8b 10.6 7.0
qwen2.5-14b 18.3 11.7
qwen2.5-32b 38.0 23.2
llama3.1-70b 78.6 46.9
Apple Silicon (unified memory)
RAM GPU budget largest at Q4_K_M largest at Q8_0
8 5.3 qwen2.5-3b qwen2.5-3b
16 10.7 llama3.1-8b llama3.1-8b
24 16.0 qwen2.5-14b llama3.1-8b
32 21.3 qwen2.5-14b qwen2.5-14b
36 27.0 qwen2.5-32b qwen2.5-14b
48 36.0 qwen2.5-32b qwen2.5-14b
64 48.0 llama3.1-70b qwen2.5-32b
96 72.0 llama3.1-70b qwen2.5-32b
128 96.0 llama3.1-70b llama3.1-70b
NVIDIA laptop GPUs (dedicated VRAM only, no CPU offload)
RTX 4050 (6 GB) qwen2.5-3b qwen2.5-3b
8 GB class llama3.1-8b qwen2.5-3b
12 GB class qwen2.5-14b llama3.1-8b
16 GB class qwen2.5-14b llama3.1-8b
RTX 5090 (24 GB) qwen2.5-32b qwen2.5-14b
16 GB Mac, llama3.1-8b Q4_K_M: what context fits?
ctx 8192: 7.0 GB vs budget 10.7 GB -> fits
ctx 32768: 10.2 GB vs budget 10.7 GB -> fits
ctx 65536: 14.5 GB vs budget 10.7 GB -> no
ctx 131072: 23.1 GB vs budget 10.7 GB -> no
What does the table say, in plain terms?
Macs.
| Unified memory | Practical ceiling at 4-bit (8k context) |
|---|---|
| 8 GB | 3B-class models only |
| 16 GB | 8B-class |
| 24 to 32 GB | 14B-class |
| 36 to 48 GB | 32B-class |
| 64 GB and up | 70B-class, with 64 GB only just: 46.9 GB needed against a 48 GB budget |
| 128 GB | 70B at 8-bit |
The 64 GB line is the one to be careful with. It leaves 1.1 GB spare at 8,192 tokens, and macOS plus your browser also want memory. Treat 64 GB as "70B works for short contexts, with other apps closed".
NVIDIA laptops. An 8 GB GPU runs an 8B model at 4-bit with 8,192 tokens, with about 1 GB to spare. A 12 GB or 16 GB GPU gets you to 14B-class at 4-bit, but 12 GB is tight: the 14B needs 11.7 GB. Only the 24 GB RTX 5090 Laptop reaches 32B-class at 4-bit (23.2 GB needed, so very little spare). Nothing in a laptop holds a 4-bit 70B in VRAM.
So in terms of model size, a Mac with plenty of memory holds bigger models than any current laptop GPU. That is the whole case for Macs here. It is a statement about capacity, not speed: how quickly each machine generates tokens depends on memory bandwidth and software, and I did not measure either.
What does context length do to the answer?
Everything above assumed 8,192 tokens. The last block of the output shows why that assumption matters. On a 16 GB Mac, a 4-bit Llama 3.1 8B fits at 32,768 tokens (10.2 GB against a 10.7 GB budget) and not at 65,536 (14.5 GB). Long documents, agent loops and code-base chats are exactly where laptops fall over, because the cache is a separate bill from the weights.
If you plan to use long contexts, buy memory for the cache first. Or plan to quantize the cache if your runtime supports it, and test the quality cost on your own prompts, which I did not do.
Which should I buy?
My judgement, based on the numbers above and nothing else:
- You want to run models of 30B and up, or 70B at all: a Mac with 64 GB or more. No laptop GPU on NVIDIA's pages has enough VRAM.
- You want CUDA-based tools, such as the fine-tuning stacks that most tutorials assume: a Windows laptop with the most VRAM you can afford. Fine-tuning needs more memory than inference, so use the VRAM calculator to see whether your target even fits on 8 or 16 GB. Many people are better off renting a GPU for a few hours; see the rental cost method.
- You only want a private assistant for notes and code snippets: a 16 GB machine of either kind and a 7B to 8B model is enough. See the beginner Ollama guide for setup and the small language models post for what small models can do.
- You are unsure: buy more memory than the table says. Laptop VRAM is fixed at purchase, and, as far as I know, so is Apple Silicon unified memory. Check the specific model you are buying.
Privacy is a separate reason to go local; the local vs cloud decision guide covers when it matters.
What this table does not tell you
- Speed. Not measured.
- Quality. A 14B at 4-bit may or may not beat an 8B at 8-bit on your task. Test on your prompts.
- Mac memory limit. The two-thirds and three-quarters figures are community-reported. You can check yours: llama.cpp prints a
recommendedMaxWorkingSetSizeline at startup. Some guides describe an undocumentediogpu.wired_limit_mbsetting to raise the limit; it is not published by Apple, has changed name between macOS versions, and leaving too little for the system can freeze the machine. I would not rely on it for a purchase decision. - Windows partial offload. Some runtimes can split a model between VRAM and system RAM. It lets bigger models load, slowly. The NVIDIA rows count VRAM only.
- Unlisted hardware. AMD and Intel laptops, and newer Apple chips, are not covered because I did not verify their specs.
- Model dimensions. Qwen2.5 and Llama 3.1 configs were read from Hugging Face on 2026-10-09. Newer models have different head counts and will shift the cache numbers.



