BeginnerMac / Apple 3 min read

Mac M3 Max: The Ultimate Local LLM Setup

Maximise your Apple Silicon with Ollama. Run multiple models, set up an OpenAI-compatible API, and tune Metal GPU layers.

Written against

macOS 14+ · Apple Silicon · Ollama 0.6+ · Metal · Qwen3-8B / Llama 3.1 8B Q4

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

OllamaMacApple SiliconMetalGGUF

What you need first

macOS 14 or later on Apple silicon. Ollama’s macOS build uses Metal automatically — there is no CUDA-style toolkit to install and no flag to turn the GPU on. What you do need to understand is the memory model: the GPU and the CPU share one pool, so "VRAM" is a share of your total memory rather than a separate number.

bash
brew install ollama
brew services start ollama

# Or download the app from ollama.com — same daemon, adds a menu bar item.
ollama --version

Pull a model and run it

Start with an 8B at Q4_K_M. On this index’s numbers Llama 3.1 8B needs 5.6 GB at 4K context and Qwen3 8B needs 5.8 GB, so either is comfortable even on a 16GB Mac. A 48GB M3 Max runs 71 of the 81 models here comfortably — the largest being GLM-4.5-Air at 37.2 GB.

bash
ollama pull llama3.1:8b
ollama run llama3.1:8b "Summarise the difference between Q4_K_M and Q5_K_M."

Check it actually ran on the GPU

Unified memory makes the usual check useless — there is no separate VRAM figure to watch climb. Use the system’s own GPU counter instead, or ask Ollama what it decided. If a model was partly placed on the CPU, `ollama ps` says so in the PROCESSOR column.

bash
ollama ps
# NAME            SIZE     PROCESSOR    UNTIL
# llama3.1:8b     6.1 GB   100% GPU     4 minutes from now

# Or watch Metal directly while generating:
sudo powermetrics --samplers gpu_power -i 1000 -n 5

The limit nobody mentions

macOS reserves part of the unified pool for the system and caps how much a single process may wire down, so the practical budget is meaningfully below the number on the box — a 16GB Mac does not give a model 16GB. The cap is adjustable, but raising it too far will make the machine swap rather than make the model faster. Budget below nameplate and you will not meet it.

bash
# Current cap, in MB (0 means "use the default policy")
sysctl iogpu.wired_limit_mb

# Raising it is possible but resets on reboot, and over-raising causes swapping
# rather than speed. Prefer choosing a model that fits the default.

What the numbers should look like

An M3 Max moves 400 GB/s. Llama 3.1 8B at Q4_K_M is 4.6 GB of weights, so generation cannot exceed roughly 87 tok/s — a ceiling from two published numbers, not a benchmark. This index has one measured run on an M3 Max 48G: Llama 3.1 8B at Q4_K_M under Ollama, at 68 tok/s, which is 83% of that ceiling and about what a well-behaved Metal setup looks like. Memory climbs with context, not with use: the same model needs 5.6 GB at 4K and 9.5 GB at 32K.

When it does not work

`ollama ps` shows a CPU share: the model did not fit the wired limit — take a smaller quant or a shorter context rather than raising the cap. The whole machine becomes unresponsive while generating: you are swapping, which means the model plus the system exceeded physical memory; nothing about the model will fix that except being smaller. A model that ran yesterday will not load today: something else is holding memory — `ollama stop` unloads it, and models unload themselves after five minutes idle by default.

bash
ollama stop llama3.1:8b

# Keep a model resident for an hour instead of the 5-minute default:
curl http://localhost:11434/api/generate -d '{"model":"llama3.1:8b","keep_alive":"1h"}'

Common questions

Does a Mac’s unified memory count as VRAM for Ollama?

Mostly. The GPU addresses the same pool as the CPU, so a 48GB Mac holds models a 24GB discrete card cannot — 71 of the 81 models in this index fit an M3 Max 48G comfortably. What is not true is that all of it is available: macOS reserves part of the pool and caps what one process may wire down, so budget meaningfully below the figure on the box.

How do I tell whether Ollama used the GPU on a Mac?

Run `ollama ps` while a model is loaded. The PROCESSOR column reads `100% GPU` when the whole model is on Metal, and names a CPU share when part of it was not placed there. Unified memory means the usual trick of watching VRAM climb tells you nothing, because there is no separate figure to watch.

Which model should I start with on Apple silicon?

An 8B at Q4_K_M. Llama 3.1 8B needs 5.6 GB at 4K context and Qwen3 8B needs 5.8 GB, so both are comfortable on any Apple silicon Mac with 16GB or more, and both leave room to raise the context window later. Move up only once you have seen what the smaller model does — capacity is the easy part on a Mac, and bandwidth decides the rest.

What this guide uses

Format
GGUF

Next steps

See everything that fits 🍎 Mac M3 Max 48GReverse lookup — 48GB 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.