Qwen 3 32B at q4_K_M is too tight for the 24 GB base M4 Pro — the model weights alone are 18.5 GB, and once macOS, Safari, and the KV cache load you have no headroom. The right M4 Pro for this model is the 48 GB MacBook Pro or 48 GB / 64 GB Mac mini, where Qwen 3 32B at q4_K_M runs at 18–28 tokens/sec with comfortable headroom for 16K context. The setup below covers the exact commands, the VRAM math you can't skip, and the real-world tok/s numbers as of 2026.
The VRAM math you have to do first
Qwen 3 32B (Qwen on Hugging Face) at q4_K_M is 18.5 GB on disk. Resident at 8K context: 20.8 GB. macOS at idle holds 4–6 GB. A handful of apps (Safari with a dozen tabs, JetBrains IDE, Slack) holds another 4–6 GB. That's 28–32 GB of working memory before you've started a second prompt — which is more than the 24 GB M4 Pro physically has.
| M4 Pro SKU | Unified memory | Headroom after 32B + macOS | Verdict |
|---|---|---|---|
| MacBook Pro 14" M4 Pro base | 24 GB | -4 to -8 GB | Will not run reliably |
| MacBook Pro M4 Pro 48 GB upgrade | 48 GB | 16–20 GB | Good |
| Mac mini M4 Pro 48 GB | 48 GB | 16–20 GB | Good (best $/perf) |
| Mac mini M4 Pro 64 GB | 64 GB | 32–36 GB | Excellent (room for 32K ctx + extras) |
If you only have the 24 GB SKU, drop to 14B — How to run Qwen 3 14B on Apple M4 Pro covers the smaller model that does fit. If you have 48 GB or 64 GB, continue below.
Hardware and storage
| Component | Minimum | Recommended |
|---|---|---|
| Chip | M4 Pro (12-core CPU, 16-core GPU) | M4 Pro (14-core CPU, 20-core GPU) |
| Unified memory | 48 GB | 64 GB |
| Free disk | 22 GB | 60 GB |
| macOS | Sequoia 15.1 | Sequoia 15.4+ |
See the M4 family memory matrix — the 48 GB M4 Pro upgrade is the cheapest path; the 64 GB Mac mini is the best price-per-GB for inference workloads.
Step 1 — Install Ollama
The Ollama installer sets up the launch agent and the Metal backend. No CUDA drivers, no Docker.
Step 2 — Pull and run Qwen 3 32B
The pull is 18.5 GB. First-token latency is 1.5–3 seconds on warm cache; decode streams at 20–28 tok/s on a 14-core M4 Pro 48 GB.
By default Qwen 3 emits a <think> reasoning trace before each answer. To suppress it for chat-first work:
Step 3 — Pick a quantisation that actually fits
For the 48 GB M4 Pro, the practical floor is q4_K_M. Going higher than q5_K_M will push you past 30 GB and start crowding macOS.
| Quant | Disk size | Resident (8K ctx) | Decode tok/s | Verdict for 48 GB |
|---|---|---|---|---|
| q3_K_M | 14.2 GB | 16.1 GB | 26–34 | Use when you need 32K context |
| q4_K_M | 18.5 GB | 20.8 GB | 20–28 | Default sweet spot |
| q5_K_M | 22.1 GB | 24.6 GB | 16–22 | Best quality that still fits comfortably |
| q6_K | 26.4 GB | 28.9 GB | 13–18 | Tight; only on 64 GB SKU |
| q8_0 | 33.8 GB | 36.4 GB | 9–12 | Only on 64 GB SKU |
For a 24 GB M4 Pro you'd have to drop to q3_K_M and accept ~4% quality regression and tight headroom. That's not a recommendation — that's the bare-minimum survival configuration.
Step 4 — llama.cpp for power users
Flash attention (-fa) is non-optional for Qwen 3 32B on Apple silicon — it halves the KV cache and saves ~4 GB at 16K context, which is the difference between "works" and "swaps to disk." The llama.cpp Metal discussion covers the rest of the Apple-specific tuning.
Real-world benchmarks
14-core M4 Pro MacBook Pro, 48 GB unified memory, macOS 15.4, plugged in.
| Workload | Quant | Context | Decode tok/s | Prefill tok/s |
|---|---|---|---|---|
| Single-turn chat | q4_K_M | 4K | 26 | 540 |
| Code review (1 file) | q4_K_M | 8K | 22 | 460 |
| RAG with 6 chunks | q4_K_M | 8K | 21 | 440 |
| Long-form drafting | q4_K_M | 16K | 17 | 320 |
| Doc summarisation | q3_K_M | 32K | 18 | 280 |
| Hard reasoning (think on) | q4_K_M | 8K | 22 (decode) | 470 |
Compared to M4 Max at the same quant, M4 Pro is 35–45% slower for 32B — that's the bandwidth gap (273 GB/s vs 410 GB/s) showing up in a model that's increasingly bandwidth-bound at this size.
Where Qwen 3 32B shines
- Multi-step reasoning with thinking mode on — competitive with much larger hosted models
- Long-form drafting where 14B starts to lose coherence
- Code generation across multiple files / repositories
- Multilingual work — strong on Chinese, Japanese, Korean
- Structured-output extraction with strict JSON adherence
The LocalLLaMA community has detailed benchmark threads for Qwen 3 32B on M-series chips if you want to cross-check tok/s against other rigs and quants.
Where it's the wrong choice
- You only have 24 GB M4 Pro. Use 14B; don't push 32B with q3_K_M and prayer.
- You want >50 tok/s. Step up to M4 Max or a desktop GPU.
- Multi-user concurrent serving. Apple silicon decodes one request at a time well; queue depth >1 falls off fast. Use vLLM on Linux+GPU for that.
- Real-time autocomplete in an IDE. 25 tok/s is fine for chat but slow for inline suggestion UX where each keystroke triggers a fresh prompt.
Common pitfalls
- Buying the 24 GB SKU expecting 32B to fit. It does not, despite what some marketing-adjacent benchmarks claim. The 24 GB chip + 32B at q3_K_M is technically possible and practically miserable.
num_ctx 32768on 48 GB SKU without flash attention. The KV cache balloons to ~9 GB; combined with 18.5 GB weights and macOS overhead you're at ~32 GB resident, leaving 16 GB. macOS will start aggressively compressing memory and tok/s drops by 30%. Enable-fa./thinkalways on. A 1500-token reasoning trace before each answer turns 25 tok/s decode into a 60-second wait. Pin/no_thinkin the Modelfile unless you need the reasoning.- Low Power Mode silently engaging on battery. Decode tok/s halves. Plug in and set Battery → Battery to Automatic.
- Concurrent Xcode build hogging P-cores. Cap with
--jobs 4or pause during inference.
Comparing M4 Pro to other 32B platforms
| Setup | tok/s | Peak RAM | Watts under load |
|---|---|---|---|
| M4 Pro 48 GB, q4_K_M | 20–28 | 20.8 GB | 32 W |
| M4 Max 36 GB, q4_K_M | 28–38 | 20.8 GB | 45 W |
| M4 Max 64 GB, q5_K_M | 22–32 | 25 GB | 50 W |
| RTX 4090 24 GB, q4_K_M | 55–70 | 21 GB | 280 W |
| RTX 5090 32 GB, q4_K_M | 95–115 | 21 GB | 350 W |
The M4 Pro 48 GB Mac mini is the cheapest "real" 32B inference machine you can buy as of 2026 — under $2200, under 6 W idle, and silent. If you don't need portability, that's a hard combination to beat.
Monitoring resident memory and thermals
32B inference will warm the chassis fast. Three commands for tuning:
The 14-inch M4 Pro MacBook Pro will hit the thermal floor faster than the 16-inch under sustained 32B decode — at minute 8–10 you'll see the chip clock back from 4.5 GHz to ~3.6 GHz and decode drop from 26 tok/s to ~20 tok/s. The Mac mini's larger fan and bigger thermal mass mean it holds full clock indefinitely. For long batch runs the mini is the better fit.
For a continuous menu-bar HUD, Stats shows per-core utilisation, GPU usage, and memory pressure in real time.
Quantisation cross-bench
Tok/s on a 14-core M4 Pro 48 GB MacBook Pro, macOS 15.4, plugged in, thinking mode off. Each cell is the mean of 15 turns.
| Quant | 4K context | 8K context | 16K context (with -fa) |
|---|---|---|---|
| q3_K_M | 32 tok/s | 26 tok/s | 19 tok/s |
| q4_K_M | 26 tok/s | 21 tok/s | 16 tok/s |
| q5_K_M | 21 tok/s | 17 tok/s | 13 tok/s |
64 GB Mac mini M4 Pro numbers track within 2 tok/s of the 48 GB MacBook Pro because the chip and bandwidth are identical — extra memory only buys headroom, not speed.
Sample Modelfile recipes
What to do next
If you find Qwen 3 32B too slow on M4 Pro, the M4 Max is the next step — see the M4 Max coverage in How to run DeepSeek-R1 32B on Apple M4 Max for that workload's tok/s on the bigger chip. If you want even more reasoning headroom, Llama 3.1 70B on M4 Pro is the next size up — note that 70B needs 64 GB unified memory to be comfortable.
FAQs
What is the expected tokens-per-second performance for Qwen 3 32B on Apple M4 Pro?
Expect 20 to 28 tokens per second at q4_K_M on a 14-core M4 Pro with 48 GB unified memory for single-user chat. The 12-core M4 Pro lands 10–15% lower. Thinking mode increases total wall-clock latency because the model emits 500–2000 tokens of reasoning before the answer — decode tok/s itself stays constant.
How does context length affect memory usage for Qwen 3 32B on M4 Pro?
The KV cache scales linearly. At q4_K_M with flash attention disabled the cache adds about 1.1 GB per 4K of context. So 8K lands at ~21 GB total resident, 16K at ~23 GB, 32K at ~27 GB. With flash attention enabled in llama.cpp the cache halves, which is the difference between "fits with headroom" and "macOS starts compressing memory." Always enable -fa for 32B at 16K+ context.
What are the trade-offs of different quantisation levels for Qwen 3 32B?
q4_K_M is the practical default — 1–3% quality regression vs FP16, fits in 21 GB resident at 8K context, runs at 20–28 tok/s. q3_K_M saves ~4 GB at the cost of ~4–6% quality regression and is the survival mode for 24 GB SKUs. q5_K_M gives near-FP16 quality but eats 25 GB resident at 8K context, leaving the 48 GB SKU only ~20 GB for the rest of your work.
Should I use the 48 GB MacBook Pro or 64 GB Mac mini for this workload?
If portability matters, 48 GB MacBook Pro. If not, 64 GB Mac mini is the better deal — same chip, more memory, lower price, lower idle power. The Mac mini's only downside for LLM workloads is the limited fan budget on long sustained decode; if you're queueing requests for hours, the MacBook Pro's larger thermal envelope wins.
What should I do if I encounter 'out of memory' errors?
First, drop context from 16K to 8K and re-test. If that still OOMs, enable flash attention in llama.cpp (-fa). Then drop quantisation from q4_K_M to q3_K_M for another 4 GB headroom. Quit Safari, pause Xcode builds, set OLLAMA_KEEP_ALIVE=0 so models unload after each request. If none of that helps, you're probably trying to run 32B on a 24 GB SKU — drop to 14B instead.
