M3 Ultra LLM benchmark
On the M3 Ultra, measured single-user chat decode speeds are: ~7–9B models at 116.8 tok/s (mlx; Measured, middle of 8 results, source run), ~14–15B models at 70.5 tok/s (mlx; Measured, middle of 4 results, source run), ~22–32B models at 34.5 tok/s (mlx; Measured, middle of 4 results, source run) and ~70–72B models at 16.3 tok/s (mlx; Measured, middle of 2 results, source run). Short-chat workload, local runtimes, dense models only; quantization, backend and settings vary between submissions, so check each row in the tables below.
Specs vendor specs, not measured
- Unified memory (max configuration)
- 512 GB
- Memory bandwidth
- 819 GB/s
- Launch date
- 2025-03-05
Sources: support.apple.com, apple.com. Vendor-published figures, accessed 2026-10-14.
512 GB is the historical maximum announced in 2025. Apple's model-specific support page checked September 7, 2026 lists 96 GB configurable to 256 GB. Check the actual machine: a family ceiling is not installed memory, current availability or a measured configuration. 2025 launch specification · Model-specific specification
Fastest single result in these submissions (any model size)
429.2 decode tok/s
Qwen3-0.6B-4bit via mlx. Workload: chat-short. Reported hardware: M3 Ultra (60-core GPU) + 96GB unified. see full run
Qwen3-30B-A3B-Instruct-2507-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 112.5tok/s | 308.7tok/s | 356ms | r_o6wbmfegmde |
| chat-long | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 96.37tok/s | 1,885.2tok/s | 1,669ms | r_o6wbmfegmde |
| concurrent-decode | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 105.9tok/s | no data | no data | r_o6wbmfegmde |
| agent-trace | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 101.3tok/s | 1,978.0tok/s | 1,057ms | r_o6wbmfegmde |
DeepSeek-R1-0528-Qwen3-8B-MLX-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 116.8tok/s | 424.5tok/s | 247ms | r_yy_6jfx70jq |
| chat-long | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 100.5tok/s | 1,104.0tok/s | 2,846ms | r_yy_6jfx70jq |
| concurrent-decode | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 110.6tok/s | no data | no data | r_yy_6jfx70jq |
| agent-trace | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 107.2tok/s | 1,108.9tok/s | 1,884ms | r_yy_6jfx70jq |
Qwen3-4B-Instruct-2507-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 182.7tok/s | 636.6tok/s | 173ms | r_p2rpb_0iyjj |
| chat-long | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 147.0tok/s | 1,913.7tok/s | 1,644ms | r_p2rpb_0iyjj |
| concurrent-decode | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 168.4tok/s | no data | no data | r_p2rpb_0iyjj |
| agent-trace | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 160.8tok/s | 1,913.6tok/s | 1,091ms | r_p2rpb_0iyjj |
Qwen3-8B-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 120.5tok/s | 446.1tok/s | 247ms | r_b1awwhkoo2v |
| chat-long | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 103.3tok/s | 1,108.8tok/s | 2,838ms | r_b1awwhkoo2v |
| concurrent-decode | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 114.3tok/s | no data | no data | r_b1awwhkoo2v |
| agent-trace | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 109.4tok/s | 1,109.1tok/s | 1,885ms | r_b1awwhkoo2v |
Qwen3-0.6B-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 429.2tok/s | 1,185.2tok/s | 92.8ms | r_6rgao6ao735 |
| chat-long | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 334.3tok/s | 6,893.3tok/s | 457ms | r_6rgao6ao735 |
| concurrent-decode | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 368.7tok/s | no data | no data | r_6rgao6ao735 |
| agent-trace | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 368.5tok/s | 8,617.7tok/s | 233ms | r_6rgao6ao735 |
Qwen3-Next-80B-A3B-Instruct-MLX-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | 80B | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | 4bit | 80.34tok/s | 24.49tok/s | 4,493ms | r_1pl79r50ofy |
| chat-long | 80B | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | 4bit | 77.63tok/s | 1,608.6tok/s | 1,956ms | r_1pl79r50ofy |
| concurrent-decode | 80B | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | 4bit | 78.60tok/s | no data | no data | r_1pl79r50ofy |
| agent-trace | 80B | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | 4bit | 78.41tok/s | 1,586.3tok/s | 1,318ms | r_1pl79r50ofy |
qwen2.5-72b-Instruct-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 16.31tok/s | 23.25tok/s | 5,635ms | r_5c80gthqlh6 |
llama-3.3-70b-Instruct-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 16.78tok/s | 25.09tok/s | 5,420ms | r_sx3a4y9n-m4 |
stable-code-instruct-3b-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 192.5tok/s | 560.7tok/s | 226ms | r_y2_5y8oo97d |
Yi-Coder-9B-Chat-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 103.5tok/s | 390.9tok/s | 307ms | r_3hvui9a1yuc |
starcoder2-15b-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 64.16tok/s | 220.5tok/s | 490ms | r_wsxml_39dh_ |
granite-8b-code-instruct-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 112.3tok/s | 525.7tok/s | 221ms | r_bue3bee0gw7 |
Codestral-22B-v0.1-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 47.49tok/s | 205.7tok/s | 559ms | r_79dvtag5fd_ |
DeepSeek-Coder-V2-Lite-Instruct-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 168.3tok/s | 291.5tok/s | 449ms | r_l_v1-zq_qaz |
Qwen2.5-Coder-32B-Instruct-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 34.48tok/s | 144.1tok/s | 909ms | r_721b4bls_oq |
Qwen2.5-Coder-14B-Instruct-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 70.51tok/s | 306.1tok/s | 428ms | r_l36cijqxq4t |
Qwen2.5-Coder-7B-Instruct-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 138.6tok/s | 539.6tok/s | 243ms | r_uoehjq0nvc0 |
gpt-oss-20b-MXFP4-Q4
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 152.7tok/s | 239.9tok/s | 692ms | r_3ijun8ltjnb |
Qwen3-Coder-30B-A3B-Instruct-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 112.2tok/s | 204.0tok/s | 539ms | r_fpsca03u2o_ |
Qwen3-32B-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 34.41tok/s | 95.12tok/s | 1,156ms | r_anmmc80-aoq |
Qwen2.5-32B-Instruct-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | 32B | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | 4bit | 34.60tok/s | 141.9tok/s | 923ms | r_njgxtgyym1e |
gemma-2-9b-it-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 89.45tok/s | 170.7tok/s | 691ms | r_iz137eqvuzy |
Qwen2.5-14B-Instruct-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | 14B | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | 4bit | 70.85tok/s | 301.7tok/s | 434ms | r_v4bq1sviz4o |
phi-4-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 74.37tok/s | 255.0tok/s | 443ms | r_sqzp-0rdez- |
Llama-3.1-8B-Instruct-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | not supplied | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | - | 130.2tok/s | 400.3tok/s | 340ms | r_v2pbc0rq2l4 |
Qwen2.5-7B-Instruct-4bit
| Workload | Model size | Reported hardware | Backend | Quant | decode tok/s | prefill tok/s | TTFT | Run |
|---|---|---|---|---|---|---|---|---|
| chat-short | 7B | M3 Ultra (60-core GPU) + 96GB unified | mlx@0.31.3 | 4bit | 139.6tok/s | 190.0tok/s | 689ms | r_5r6rhiynenc |
Community folklore on M3 Ultra
13 unverified claims extracted from Reddit/HN comments. Lower trust than signed runs above; every row links to the source.
- communityconfidence 70%
18.50tok/s — Qwen3-Coder on M3 Ultra via mlx
our signed data: M3 Ultra · Qwen3-Coder
“m3 ultra with lmstudio-community/Qwen3-Coder-480B-A35B-Instruct-MLX-6bit 256k context len 18.50 token/s 1000 tokens first token 12.44 s”
- communityconfidence 70%
65.00tok/s — Qwen3-Coder-Next on M3 Ultra via vllm-mlx 6-bit
our signed data: M3 Ultra · Qwen3-Coder-Next
“Benchmarks (Mac Studio M3 Ultra, 256GB): Qwen3-Coder-Next-6bit (80B MoE, 3B active): - Decode: 65 tok/s”
- communityconfidence 60%
18.43tok/s — DeepSeek R1 on M3 Ultra via mlx
our signed data: M3 Ultra · DeepSeek R1
“R1 671B Q4 - M3 Ultra 512GB with MLX🔥 Yes it works! First test, and I'm blown away! Prompt: "Create an amazing animation using p5js" * **18.43 tokens/sec** * Generates a p5js zero-shot, tested at video's end * Video in real-time, no acceleration! https://reddit.com/link/1j9vj…”
- communityconfidence 60%
145.0tok/s — Llama 3.3 70b on M3 Ultra via lm-studio
our signed data: M3 Ultra · Llama 3.3 70b
“it so far. Prompt processing is not too bad for 70b models -- with about 7800 tokens of context, 8 bit MLX Llama 3.3 70b processes at about 145 t/s per second - and then in LM studio does not need to process for additional prompts, as it caches the context, assuming you're not ch…”
- communityconfidence 60%
51.47tok/s — GPT-OSS-120B on M3 Ultra via lm-studio
our signed data: M3 Ultra · GPT-OSS-120B
“-120B MLX I'm getting: Mac Studio M3 Ultra with 80 core GPU, 256GB RAM Application: LM Studio Reasoning effort set to High. I'm getting 51.47 tokens/second!”
- communityconfidence 60%
20.00tok/s — Qwen3-Coder-Next on M3 Ultra via vllm
our signed data: M3 Ultra · Qwen3-Coder-Next
“|Quant|RAM|Decode|Prefill|TTFT (cache hit)| |:-|:-|:-|:-|:-| |**4bit (mxfp4)**|\~60GB|33-38 tok/s|\~1500 tok/s|0.3s| |**8bit**|\~122GB|16-20 tok/s|\~300-550 tok/s|1-2s| 4-bit is the sweet spot for this model — decode speed is identical (memory bandwidth limited on MoE), but pref…”
- communityconfidence 60%
38.00tok/s — Qwen3-Coder-Next on M3 Ultra via vllm
our signed data: M3 Ultra · Qwen3-Coder-Next
“GB) # Qwen3.5-122B-A10B (MoE, 10B active params) |Quant|RAM|Decode|Prefill|TTFT (cache hit)| |:-|:-|:-|:-|:-| |**4bit (mxfp4)**|\~60GB|33-38 tok/s|\~1500 tok/s|0.3s| |**8bit**|\~122GB|16-20 tok/s|\~300-550 tok/s|1-2s| 4-bit is the sweet spot for this model — decode speed is id…”
- communityconfidence 60%
65.00tok/s — Qwen3-Coder-Next on M3 Ultra via vllm
our signed data: M3 Ultra · Qwen3-Coder-Next
“Qwen3-Coder-Next at 65 tok/s on M3 Ultra — with working tool calling for OpenClaw I've been running local coding agents on my Mac Studio (M3 Ultra 256GB) for the past”
- communityconfidence 60%
58.70tok/s — Qwen3-Coder-Next on M3 Ultra via lm-studio
our signed data: M3 Ultra · Qwen3-Coder-Next
“done<p>As of v0.2.0: Vision-Language Model support with the same tiered caching<p>Benchmarks on M3 Ultra 512GB with Qwen3-Coder-Next-8bit: 58.7 tok/s single request, 243 tok/s at 8x batch. Full results on the README.<p>It reuses LM Studio's model directory, so you don't need to r…”
- communityconfidence 60%
100.0tok/s — DeepSeek-R1 on M3 Ultra via ollama
our signed data: M3 Ultra · DeepSeek-R1
“Speed-wise, MLX's unified memory means zero CPU↔GPU copies. On an M3 Ultra: Qwen3.5-9B hits 108 tok/s (vs ~41 on Ollama), Qwen 3.6 35B does 100 tok/s with only 3B active params.<p>The full benchmark data is in the README. Happy to discuss the MLX performance characteristics or to…”
Models measured on M3 Ultra
- Qwen3-30B-A3B-Instruct-2507-4bit benchmarks
- DeepSeek-R1-0528-Qwen3-8B-MLX-4bit benchmarks
- Qwen3-4B-Instruct-2507-4bit benchmarks
- Qwen3-8B-4bit benchmarks
- Qwen3-0.6B-4bit benchmarks
- Qwen3-Next-80B-A3B-Instruct-MLX-4bit benchmarks
- qwen2.5-72b-Instruct-4bit benchmarks
- llama-3.3-70b-Instruct-4bit benchmarks
- stable-code-instruct-3b-4bit benchmarks
- Yi-Coder-9B-Chat-4bit benchmarks
- starcoder2-15b-4bit benchmarks
- granite-8b-code-instruct-4bit benchmarks
- Codestral-22B-v0.1-4bit benchmarks
- DeepSeek-Coder-V2-Lite-Instruct-4bit benchmarks
- Qwen2.5-Coder-32B-Instruct-4bit benchmarks
- Qwen2.5-Coder-14B-Instruct-4bit benchmarks
- Qwen2.5-Coder-7B-Instruct-4bit benchmarks
- gpt-oss-20b-MXFP4-Q4 benchmarks
- Qwen3-Coder-30B-A3B-Instruct-4bit benchmarks
- Qwen3-32B-4bit benchmarks
- Qwen2.5-32B-Instruct-4bit benchmarks
- gemma-2-9b-it-4bit benchmarks
- Qwen2.5-14B-Instruct-4bit benchmarks
- phi-4-4bit benchmarks
- Llama-3.1-8B-Instruct-4bit benchmarks
- Qwen2.5-7B-Instruct-4bit benchmarks
Common questions about M3 Ultra
Direct Q&A drawn from the runs above: fastest LLM, supported model classes, backend rankings, quantization guidance.
Request a run on M3 Ultra
No measured run yet for these pairs. Vote for the one you want; the most-requested runs go first. See all requests.
We never sell or share your email. Privacy