Local LLMs on Apple Silicon: What Unified Memory Changes

Apple Silicon Macs are unusually good at running local models for one structural reason: the CPU and GPU share a single pool of fast memory, so there is no small dedicated VRAM budget to overflow. A machine with a large unified memory configuration can load models that would require an expensive discrete GPU on a PC. The trade-off shows up in speed rather than capacity.

The capacity wall mostly goes away

On a PC, a model that exceeds VRAM spills to the CPU across a comparatively slow link, and performance collapses. On Apple Silicon there is no such boundary to cross — the GPU can address the same memory the system uses, at the same speed. Loading a model is a question of whether it fits in total memory alongside everything else, not whether it fits in a separate, smaller pool.

This is why memory configuration is the specification that matters when these machines are discussed for local inference, and why the entry-level configurations are the real constraint. Practically:

  • Your budget is total unified memory minus what the system and your applications are using. The operating system reserves a share for itself, so you cannot spend all of it on weights.
  • Everything you have open competes directly. On a discrete-GPU machine, a browser eating RAM doesn’t touch VRAM. Here it does, so a heavy desktop session genuinely reduces the model you can run.
  • The sizing arithmetic is otherwise the same. Use the method in how much VRAM and RAM you need and read “memory” as unified memory.

Where bandwidth becomes the ceiling

Token generation is limited by how fast weights can be streamed out of memory, so memory bandwidth is the number that predicts speed. Apple’s chip tiers differ substantially in bandwidth as well as in capacity, and the difference between the base chip and the higher tiers is a real performance difference for inference, not a marketing gradient.

The consequence is a distinctive performance profile: a Mac with lots of unified memory will load a large model that a mid-range discrete GPU cannot, and then generate more slowly than that GPU would on a model both can hold. You are buying capacity more than throughput. For running big models at acceptable-if-not-fast speeds, that’s an excellent trade. For maximum tokens per second on a small model, it isn’t.

If a large model feels sluggish rather than broken, that’s the bandwidth ceiling rather than a misconfiguration — check the diagnostic order in why your local model is slow to rule out the usual causes first, then accept it.

Prompt processing deserves separate attention

Reading a long prompt is compute-bound and parallel, which is a different workload from generation. On these machines a long input can take a noticeable pause before output begins, even when generation afterwards is fine. If most of your work is long documents in and short answers out, that pause is your real cost, and it responds to different levers — prompt processing vs token generation separates the two.

Practical notes for a Mac setup

Runtime support is good, and specific. The major local runtimes support Apple’s GPU framework, and llama.cpp has had first-class support for it for a long time — which matters because most friendlier tools are built on that engine. Some ecosystems also offer Apple-specific stacks optimised for this hardware. Support details and build requirements change, so check the current documentation for whichever you choose; choosing a local LLM runtime covers the general decision.

Watch what the model file format is. GGUF is the common denominator and runs everywhere. Apple-specific formats exist and can be faster on this hardware, but they’re less portable — worth knowing before you build a library of downloads you can’t move.

Leave real headroom. Because the model competes with your applications, running right at the edge produces memory pressure and swapping that feels like the model being slow. Being a gigabyte or two more conservative than the arithmetic suggests is usually the better experience.

Thermals are a laptop reality. Sustained generation is a sustained load. Fanless and thin models will start fast and settle lower; that’s expected, not a fault.

Battery matters. Inference is power-hungry, and some machines behave differently unplugged. If you’re comparing performance and got a different answer than yesterday, check that first.

Choosing a configuration

If you’re specifying a machine with local inference in mind, the useful order is: pick the memory capacity that covers the largest model class you want to run with context headroom first, then take the highest chip tier your budget allows for the bandwidth. Memory cannot be added later, and it’s the constraint that decides what’s possible at all.

A practical takeaway

Apple Silicon is the easiest path to running mid-size and large models on a machine you already own, because the capacity wall that dominates PC planning largely isn’t there. Approach it as capacity-rich and bandwidth-limited: expect to run bigger models than a similarly-priced PC and to wait a bit longer for each token, and size your memory generously because it’s the one thing you can’t change afterwards.