Apple unified memory · Apple
Apple Mac Studio (M5 Ultra, 64-core GPU)
The lower M5 Ultra Mac Studio. 256GB is the largest memory option Apple sells for this chip, which fits the large open-weight MoE models at 4-bit.
Memory for models
Assumed three quarters of 256 GB for macOS's default GPU limit, which Apple does not publish.
Memory bandwidth
Maker price
Largest at 4-bit
187.6 GB at 8,192 tokens of context, default GPU limit (an assumed limit, see Memory for models)
gpt-oss-20b, 4-bit
Memory configurations
One page covers every memory option the maker sells. Prices are the maker’s list price for the cheapest configuration with that much memory.
| Memory | Price | Memory the GPU can use |
|---|---|---|
| 96 GB | ~$5,499 | 72 GB default gpu limitassumption 88 GB limit raised with sysctlassumption |
| 256 GB | ~$9,499 | 192 GB default gpu limitassumption 248 GB limit raised with sysctlassumption |
Assumed three quarters of 256 GB for macOS's default GPU limit, which Apple does not publish. Raised with iogpu.wired_limit_mb per the MLX docs, leaving an assumed 8 GB for macOS. How GPU memory limits work on unified-memory machines.
What it runs at 4-bit
Every model in the catalog at its 4-bit file with 8,192 tokens of context. 35 of 41 fit in at least one configuration. Speeds are the median of measured runs on the same chip where any exist; otherwise an estimate from memory bandwidth. Try other quants and context lengths.
| Model | Needs | Fit | Generation speed |
|---|---|---|---|
| Kimi K32.8T, 104B active · UD-Q4_K_XL | 1406.8 GBcontext memory estimated | Does not fit | |
| DeepSeek V4 Pro1.6T, 49B active · Q4_K_M | 890.5 GBcontext memory not counted | Does not fit | |
| Kimi K2.61T, 32B active · UD-Q4_K_XL | 545.7 GBcontext memory estimated | Does not fit | |
| DeepSeek V4.1 Flash552B, 16B active · Q4 (DwarfStar) | 484.5 GB | Does not fit | |
| GLM-5.3753.3B · UD-Q4_K_XL | 437.4 GBcontext memory estimated | Does not fit | |
| DeepSeek V3.2671B, 37B active · Q4_K_M | 379.6 GBcontext memory estimated | Does not fit | |
| MiniMax M3428B, 23B active · Q4_K_M | 244.8 GBcontext memory not counted | Fits with raised limitassumed limitfrom the 256 GB config | ~28–51 tok/sestimate |
| Qwen3.5 397B-A17B397B, 17B active · Q4_K_M | 229.1 GBcontext memory estimated | Fits with raised limitassumed limitfrom the 256 GB config | ~38–68 tok/sestimate |
| GLM-5.3 Flash320B, 18B active · UD-Q4_K_XL | 187.6 GBcontext memory estimated | Fitsassumed limitfrom the 256 GB config | ~36–63 tok/sestimate |
| Hy3295B, 21B active · Q4_K_M | 173.6 GB | Fitsassumed limitfrom the 256 GB config | ~31–55 tok/sestimate |
| MiniMax M2.7228.7B · Q4_K_M | 132.7 GB | Fitsassumed limitfrom the 256 GB config | – |
| Qwen3.8 Flash-Next125B, 6B active · Q4_K_M | 113.1 GBcontext memory estimated | Fitsassumed limitfrom the 256 GB config | ~70–124 tok/sestimate |
| Nemotron 3 Super 120B-A12B120B, 12B active · Q4_K_M | 82.6 GBcontext memory estimated | Fitsassumed limitfrom the 256 GB config | ~46–82 tok/sestimate |
| Qwen3.5 122B-A10B122B, 10B active · Q4_K_M | 73.0 GBcontext memory estimated | Fitsassumed limitfrom the 256 GB config | ~64–113 tok/sestimate |
| Mistral Medium 3.5 128B128B · Q4_K_M | 74.0 GB | Fitsassumed limitfrom the 256 GB config | ~12–15 tok/sestimate |
| GLM-4.5-Air106B, 12B active · Q4_K_M | 70.9 GB | Fitsassumed limitfrom the 96 GB config | ~48–86 tok/sestimate |
| Mistral Small 4 119B (2603)119B, 6.5B active · Q4_K_M | 69.3 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | ~101–179 tok/sestimate |
| Llama 4 Scout 17B-16E Instruct109B, 17B active · Q4_K_M | 62.4 GBcontext memory not counted | Fitsassumed limitfrom the 96 GB config | ~39–70 tok/sestimate |
| gpt-oss-120b117B, 5.1B active · MXFP4 (native) | 60.2 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | 100 tok/smedian of 3 runs |
| Qwen3 Coder Next80B, 3B active · Q4_K_M | 46.9 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | 111 tok/smedian of 1 run |
| Llama 3.3 70B Instruct70B · Q4_K_M | 43.6 GB | Fitsassumed limitfrom the 96 GB config | 24 tok/smedian of 3 runs |
| Nemotron 3.5 Lightning 30B-A3B30B, 3B active · Q4_K_M | 25.3 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | 196 tok/smedian of 1 run |
| Qwen3.6 35B-A3B35B, 3B active · Q4_K_M | 22.4 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | 161 tok/smedian of 2 runs |
| Ornith 1.5 35B-A3B35B, 3B active · Q4_K_M | 21.9 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | ~214–382 tok/sestimate |
| Qwen3 Coder 30B-A3B Instruct30.5B, 3.3B active · Q4_K_M | 19.5 GB | Fitsassumed limitfrom the 96 GB config | ~199–354 tok/sestimate |
| Gemma 4 31B IT30.7B · Q4_K_M | 18.9 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | 41 tok/smedian of 2 runs |
| Granite 4.2 30B29.3B · Q4_K_M | 20.3 GB | Fitsassumed limitfrom the 96 GB config | ~49–61 tok/sestimate |
| Qwen3.8 27B27B · Q4_K_M | 18.2 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | 52 tok/smedian of 2 runs |
| Gemma 4 26B-A4B IT25.2B, 3.8B active · Q4_K_M | 17.4 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | ~155–277 tok/sestimate |
| Qwen3.6 27B27B · Q4_K_M | 17.7 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | ~52–65 tok/sestimate |
| Devstral Small 2 24B (2512)24B · Q4_K_M | 16.1 GB | Fitsassumed limitfrom the 96 GB config | ~61–77 tok/sestimate |
| gpt-oss-20b21B, 3.6B active · MXFP4 (native) | 12.5 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | 171 tok/smedian of 1 run |
| Phi-414.7B · Q4_K_M | 11.3 GB | Fitsassumed limitfrom the 96 GB config | ~99–123 tok/sestimate |
| Ministral 3 14B Reasoning (2512)13.9B · Q4_K_M | 10.4 GB | Fitsassumed limitfrom the 96 GB config | ~107–133 tok/sestimate |
| Gemma 4 12B IT11.95B · Q4_K_M | 8.2 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | ~124–154 tok/sestimate |
| Qwen3.5 9B9B · Q4_K_M | 7.0 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | ~155–193 tok/sestimate |
| Granite 4.2 8B8.8B · Q4_K_M | 7.9 GB | Fitsassumed limitfrom the 96 GB config | ~159–198 tok/sestimate |
| Gemma 4 E4B IT8B · Q4_K_M | 6.5 GBcontext memory not counted | Fitsassumed limitfrom the 96 GB config | ~290–361 tok/sestimate |
| Qwen3 8B8.2B · Q4_K_M | 7.3 GB | Fitsassumed limitfrom the 96 GB config | ~175–218 tok/sestimate |
| Llama 3.1 8B Instruct8B · Q4_K_M | 7.1 GB | Fitsassumed limitfrom the 96 GB config | ~179–223 tok/sestimate |
| Qwen3.5 4B4B · Q4_K_M | 4.3 GBcontext memory estimated | Fitsassumed limitfrom the 96 GB config | ~321–400 tok/sestimate |
Measured speeds
23 published runs with one user, plain decoding and at most 4,096 tokens already in context, on M5 Ultra (30-core CPU, 64-core GPU).
| Model | Quant | Backend | Generation | Prompt | Context | Measured on | Source |
|---|---|---|---|---|---|---|---|
| Gemma 4 26B-A4B IT | 8bit (MLX) | oMLX (version not stated) | 116 tok/s | 4,425 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Gemma 4 31B IT | 4-bit MLX (gemma-4-31b-it-4bit) | oMLX (version not stated) (MLX) | 42 tok/s | 900 tok/s1,024-token prompt | 1,024 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Gemma 4 31B IT | 4bit (MLX) | oMLX (version not stated) | 39 tok/s | 958 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Gemma 4 31B IT | 8bit (MLX) | oMLX (version not stated) | 26 tok/s | 976 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Gemma 4 31B IT | 8bit (MLX) | oMLX (version not stated) | 26 tok/s | 967 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| gpt-oss-120b | 4bit (MLX) | oMLX (version not stated) | 118 tok/s | 3,493 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| gpt-oss-120b | 4bit (MLX) | oMLX (version not stated) | 100 tok/s | 3,374 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-09 |
| gpt-oss-120b | 4-bit MLX (gpt-oss-120b-MXFP4-Q8) | oMLX (version not stated) (MLX) | 97 tok/s | 858 tok/s1,024-token prompt | 1,024 | a machine with the same chip | oMLX benchmark submission2026-10 |
| gpt-oss-20b | 4-bit MLX (gpt-oss-20b-MXFP4-Q8) | oMLX (version not stated) (MLX) | 171 tok/s | 2,499 tok/s1,024-token prompt | 1,024 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Llama 3.3 70B Instruct | 4-bit MLX (Llama-3.3-70B-4bit) | oMLX (version not stated) (MLX) | 24 tok/s | 544 tok/s1,024-token prompt | 1,024 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Llama 3.3 70B Instruct | 4bit (MLX) | oMLX (version not stated) | 24 tok/s | 569 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Llama 3.3 70B Instruct | 4bit (MLX) | oMLX (version not stated) | 24 tok/s | 578 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Nemotron 3.5 Lightning 30B-A3B | 4bit (MLX) | oMLX (version not stated) | 196 tok/s | 4,504 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3 Coder Next | 4bit (MLX) | oMLX (version not stated) | 111 tok/s | 3,384 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3 Coder Next | 6bit (MLX) | oMLX (version not stated) | 99 tok/s | 4,672 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3 Coder Next | 8bit (MLX) | oMLX (version not stated) | 94 tok/s | 4,726 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.6 35B-A3B | 4-bit MLX (Qwen3.6-35B-A3B-4bit) | oMLX (version not stated) (MLX) | 163 tok/s | 1,376 tok/s1,024-token prompt | 1,024 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.6 35B-A3B | 4bit (MLX) | oMLX (version not stated) | 160 tok/s | 3,663 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.6 35B-A3B | 8bit (MLX) | oMLX (version not stated) | 127 tok/s | 3,475 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.6 35B-A3B | 8bit (MLX) | oMLX (version not stated) | 110 tok/s | 3,768 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.8 27B | 4-bit MLX (Qwen3.8-27B-oQ4e-fp16) | oMLX (version not stated) (MLX) | 53 tok/s | 1,340 tok/s1,024-token prompt | 1,024 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.8 27B | 4bit (MLX) | oMLX (version not stated) | 52 tok/s | 1,529 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.8 27B | 4bit (MLX) | oMLX (version not stated) | 51 tok/s | 1,339 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
With speculative decoding
A small draft model or extra prediction heads guess several tokens ahead. Generation is faster on text the guesses get right, so these are kept out of the medians above.
| Model | Quant | Backend | Generation | Prompt | Context | Measured on | Source |
|---|---|---|---|---|---|---|---|
| Gemma 4 31B IT | 4bit (MLX) | oMLX (version not stated) | 77 tok/s | 952 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Gemma 4 31B IT | 4bit (MLX) | oMLX (version not stated) | 52 tok/s | 1,044 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-09 |
| Gemma 4 31B IT | 6bit (MLX) | oMLX (version not stated) | 50 tok/s | 967 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Gemma 4 31B IT | 8bit (MLX) | oMLX (version not stated) | 61 tok/s | 974 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| GLM-5.3 Flash | 4bit (MLX) | oMLX (version not stated) | 82 tok/s | 1,968 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| GLM-5.3 Flash | 4bit (MLX) | oMLX (version not stated) | 57 tok/s | 787 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.6 27B | 8bit (MLX) | oMLX (version not stated) | 84 tok/s | 1,404 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.6 27B | 8bit (MLX) | oMLX (version not stated) | 32 tok/s | 1,335 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-09 |
| Qwen3.6 35B-A3B | 4bit (MLX) | oMLX (version not stated) | 92 tok/s | 4,254 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.6 35B-A3B | 6bit (MLX) | oMLX (version not stated) | 165 tok/s | 7,612 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.6 35B-A3B | 6bit (MLX) | oMLX (version not stated) | 156 tok/s | 7,624 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.6 35B-A3B | 8bit (MLX) | oMLX (version not stated) | 212 tok/s | 8,181 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.6 35B-A3B | 8bit (MLX) | oMLX (version not stated) | 211 tok/s | 9,255 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.8 27B | 4bit (MLX) | oMLX (version not stated) | 52 tok/s | 1,514 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.8 27B | 4bit (MLX) | oMLX (version not stated) | 52 tok/s | 1,515 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.8 27B | 8bit (MLX) | oMLX (version not stated) | 75 tok/s | 1,397 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.8 27B | 8bit (MLX) | oMLX (version not stated) | 65 tok/s | 1,401 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.8 Flash-Next | 4bit (MLX) | oMLX (version not stated) | 138 tok/s | 4,292 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.8 Flash-Next | 4bit (MLX) | oMLX (version not stated) | 118 tok/s | 1,267 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.8 Flash-Next | 6bit (MLX) | oMLX (version not stated) | 47 tok/s | 1,769 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.8 Flash-Next | 8bit (MLX) | oMLX (version not stated) | 117 tok/s | 4,281 tok/s4,096-token prompt | 4,096 | a machine with the same chip | oMLX benchmark submission2026-10 |
Deep into a long context
Measured with more than 4,096 tokens already in context, where every new token also reads the context memory.
| Model | Quant | Backend | Generation | Prompt | Context | Measured on | Source |
|---|---|---|---|---|---|---|---|
| Gemma 4 31B IT | 4-bit MLX (gemma-4-31b-it-4bit) | oMLX (version not stated) (MLX) | 36 tok/s | 978 tok/s16,384-token prompt | 16,384 | a machine with the same chip | oMLX benchmark submission2026-09 |
| gpt-oss-120b | 4-bit MLX (gpt-oss-120b-mxfp4-bf16) | oMLX (version not stated) (MLX) | 90 tok/s | 3,488 tok/s16,384-token prompt | 16,384 | a machine with the same chip | oMLX benchmark submission2026-09 |
| gpt-oss-120b | 4-bit MLX (gpt-oss-120b-MXFP4-Q8) | oMLX (version not stated) (MLX) | 75 tok/s | 2,941 tok/s32,768-token prompt | 32,768 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Llama 3.3 70B Instruct | 4-bit MLX (Llama-3.3-70B-4bit) | oMLX (version not stated) (MLX) | 21 tok/s | 519 tok/s16,384-token prompt | 16,384 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Llama 3.3 70B Instruct | 4-bit MLX (Llama-3.3-70B-4bit) | oMLX (version not stated) (MLX) | 19 tok/s | 457 tok/s32,768-token prompt | 32,768 | a machine with the same chip | oMLX benchmark submission2026-10 |
| Qwen3.8 27B | 4-bit MLX (Qwen3.8-27B-oQ4e-fp16) | oMLX (version not stated) (MLX) | 50 tok/s | 1,447 tok/s16,384-token prompt | 16,384 | a machine with the same chip | oMLX benchmark submission2026-10 |
Specifications
- Chip
- M5 Ultra (30-core CPU, 64-core GPU)
- Memory
- unified LPDDR (Apple does not state the generation)
- Memory bandwidth
- 1,200 GB/s
- FP16 compute
- Apple does not publish TFLOPS for the M5 GPU or its Neural Accelerators
- Software
- Metal, MLX
- Ships with
- macOS
- Power
- 480 W (Maximum continuous power, Apple tech specs)
- Form factor
- Desktop
- Networking
- 10GbE; six Thunderbolt 5 (120Gb/s, four back and two front), Thunderbolt 5 clustering with RDMA per Apple
- Released
- 2026-09
- Maker page
- apple.com
Sources
- apple.com: chip, memory options, bandwidth, ports, 10GbE, 480W max continuous power
- apple.com: base prices per chip
- apple.com: available 2026-09-22
- apple.com: clustering over Thunderbolt 5 with RDMA; MLX
- apple.com: memory deltas: 96GB +$0, 256GB +$4,000 over $5,499; 512GB not yet orderable
- apple.com: M5 Ultra 1.2TB/s memory bandwidth
- github.com: how far the GPU memory limit can be raised on a Mac (sysctl iogpu.wired_limit_mb)
- github.com: the default GPU memory limit on a Mac and how to raise it