BeginnerMac / Apple 3 min read

Mac M3 Pro: Realistic Model Limits

Unified memory is not all yours — what an 18GB and a 36GB M3 Pro actually hold, and the Metal limit that decides it.

Written against

macOS 14+ · M3 Pro 18GB / 36GB unified memory · Ollama Metal · GGUF Q4_K_M · single stream

Not re-run since it was last edited — treat the commands as a starting point, not a tested recipe.

MacM3 ProApple SiliconOllamaMetal

The number that actually limits you

Unified memory is shared with macOS and everything you have open, and Metal will not let a process wire down all of it — the default ceiling is roughly 75% of installed RAM. So an 18GB M3 Pro offers something like 13.5GB to a model, and a 36GB machine around 27GB. Every "will it fit" question on a Mac is against that number, not against the number on the box. It is adjustable with iogpu.wired_limit_mb, but raising it means macOS starts swapping instead of the model failing to load, which is worse.

bash
# What Metal will currently wire down (0 = system default, ~75% of RAM)
sysctl iogpu.wired_limit_mb

# 18 GB machine → ≈ 13.5 GB usable
# 36 GB machine → ≈ 27   GB usable

18GB M3 Pro

More than the earlier version of this guide claimed. A 14B at Q4_K_M is about 11.0GB at 8K context and does fit — it was previously listed here as needing 36GB+, which was wrong. 7–8B models sit near 6GB and leave room to keep working while one is loaded. What does not fit is a 30B: even the MoE Qwen3 30B-A3B is around 20GB at 8K, above both the 75% ceiling and the machine.

text
Llama 3.1 8B    Q4_K_M  @8K   ≈  6.2 GB   comfortable
Qwen3 8B        Q4_K_M  @8K   ≈  6.4 GB   comfortable
Qwen2.5 14B     Q4_K_M  @8K   ≈ 11.0 GB   fits, watch what else is open
GPT-OSS 20B     MXFP4   @8K   ≈ 12.0 GB   fits, near the 13.5 GB ceiling
Qwen3 30B-A3B   Q4_K_M  @8K   ≈ 20.1 GB   does not fit

36GB M3 Pro

A 32B at Q4_K_M is about 22.8GB at 8K, which fits inside the ~27GB ceiling — the earlier claim that 32B "requires Q3 or heavy context sacrifice" was too conservative. 14B models at 8K leave most of the machine free. The honest limit on this tier is speed rather than capacity: memory bandwidth, not VRAM, is what makes a 32B feel slow on an M3 Pro, and this guide has no measured tok/s for that combination.

bash
ollama pull qwen2.5:14b     # ≈ 11 GB at 8K — plenty of room
ollama pull qwen2.5:32b     # ≈ 23 GB at 8K — fits, expect it to be slow

Check what it is really using

ollama ps reports the resident size and whether the model is on the GPU; on Apple Silicon it should read 100% GPU, because Metal has no partial-offload equivalent — a model that does not fit fails or swaps rather than splitting. If the machine starts paging, you will feel it everywhere before you see it in any model metric, so watch memory pressure in Activity Monitor rather than free memory.

bash
ollama ps
# NAME            SIZE      PROCESSOR    UNTIL
# qwen2.5:14b     11 GB     100% GPU     4 minutes from now

Common problems

Model loads then the Mac crawls: you are over the wired limit and macOS is swapping — close applications or drop to a smaller model rather than raising iogpu.wired_limit_mb. Long context is what pushed you over: the KV cache scales with it and nothing else does, so halve the context before changing the model. Ollama pulled a bigger file than expected: a bare tag gives that tag’s default build, usually Q4_K_M, not a level chosen for your memory.

Next steps

Select your Mac in the VRAM calculator — the unified-memory machines are in the list — and compare at the context you actually use. Remember to judge the result against ~75% of the machine, not 100%.

What this guide uses

Next steps

See everything that fits 🍎 Mac M3 Pro 18GReverse lookup — 18GB at 8192 context, ranked by quality

Models covered in this guide

Did this actually run?

Copying a command is not the same as it working, so this is the only place the site asks. Nothing is collected beyond the answer itself.

Related guides

Deployment guides are educational. Each model is subject to its own license — read the official Hugging Face model card before downloading or deploying.