NetworkChuck lab notes

Mac Studio · local AI benchmark

M5 Ultra vs M3 Ultra

Local AI, measured.

We ran five chat models at four prompt lengths, image and video generation, transcription, transcoding, a vision model, two decision models, an agent and a local-AI edit in DaVinci Resolve on both Macs. Here is every number, the tool that took it, and how to run it yourself.

Apple loaned us the M5 Ultra Mac Studio for this review. The M3 Ultra is Chuck's own.

Watch the video Get the data and the tool Read the results

A gauge: reading 3.9x faster, writing 1.5x faster on the M5 Ultra1x2x3x4x5xREADING3.9xWRITING1.5x

Qwen3.8 27B, 32K-token prompt, median of 5 runs

3.9x
faster reading a prompt
388 → 1,526 tokens/s, Qwen3.8 27B, 32K
1.5x
faster writing the answer
27.8 → 42.6 tokens/s, same run
21.3 s
to the first word
down from 83.6 s on the M3 Ultra
4.0x
faster image generation
FLUX.2 klein 4B, 7.00 s → 1.77 s per 1024x1024 image

Reading got about 4x faster. Writing got about 1.5x.

A chat model does two different jobs. First it reads your prompt, all of it at once, as huge matrix multiplications. Then it writes the answer one token at a time, and for every token a dense model reads essentially every one of its weights out of memory again, plus the cached keys and values for the conversation so far.

Reading is limited by math. The M5 Ultra puts Neural Accelerators in every GPU core, which Apple says "deliver dramatically faster matrix multiplication" (Apple Newsroom). On the dense models, reading came out 3.9x to 4.1x faster.

Writing is limited by memory bandwidth. Apple says that went from 819 GB/s to 1.2 TB/s, which is 1.47x. Writing came out 1.5x faster on four of the five models, and 1.8x on Qwen3 14B. That is an explanation of the numbers, not a measurement of the chip: the full reasoning.

Reading got up to 4.1x faster. Writing got 1.5x to 1.8x.How many times faster the M5 Ultra was at a 32K-token prompt. Qwen3 14B (dense): reading 4.1x, writing 1.8x; Qwen3.8 27B (dense): reading 3.9x, writing 1.5x; Gemma 4 31B (dense): reading 4.1x, writing 1.5x; Qwen3.6 35B-A3B (moe): reading 2.7x, writing 1.5x; Qwen3.5 122B-A10B (moe): reading 3.0x, writing 1.5x. Apple's memory bandwidth ratio is 1.47x.Reading the promptWriting the answerMemory bandwidth gain (Apple says)Memory bandwidth: 1.47x (Apple says)DENSEreading 3.9x to 4.1xQwen3 14B14B, all active per token · 4-bit1.8x4.1xQwen3.8 27B27B, all active per token · 4-bit1.5x3.9xGemma 4 31B31B, all active per token · 16-bit1.5x4.1xMIXTURE OF EXPERTSreading 2.7x to 3.0xQwen3.6 35B-A3B35B total, 3B active per token · 4-bit1.5x2.7xQwen3.5 122B-A10B122B total, 10B active per token · 4-bit1.5x3.0x1x2x3x4xtimes faster on the M5 Ultra (1x = the same speed)
Reading got up to 4.1x faster. Writing got 1.5x to 1.8x.How many times faster the M5 Ultra was at a 32K-token prompt. Qwen3 14B (dense): reading 4.1x, writing 1.8x; Qwen3.8 27B (dense): reading 3.9x, writing 1.5x; Gemma 4 31B (dense): reading 4.1x, writing 1.5x; Qwen3.6 35B-A3B (moe): reading 2.7x, writing 1.5x; Qwen3.5 122B-A10B (moe): reading 3.0x, writing 1.5x. Apple's memory bandwidth ratio is 1.47x.Reading the promptWriting the answerMemory bandwidth gain (Apple says)Memory bandwidth: 1.47x (Apple says)DENSEreading 3.9x to 4.1xQwen3 14B14B, all active per token · 4-bit1.8x4.1xQwen3.8 27B27B, all active per token · 4-bit1.5x3.9xGemma 4 31B31B, all active per token · 16-bit1.5x4.1xMIXTURE OF EXPERTSreading 2.7x to 3.0xQwen3.6 35B-A3B35B total, 3B active per token · 4-bit1.5x2.7xQwen3.5 122B-A10B122B total, 10B active per token · 4-bit1.5x3.0x1x2x3x4xtimes faster on the M5 Ultra (1x = the same speed)
How many times faster the M5 Ultra was at each half of the job, 32K-token prompt, median of 5 runs. The vertical line is Apple's memory bandwidth ratio. data/language-models/summary.json

Dense models gained more than mixture-of-experts models

A dense model runs every token through every weight. A mixture-of-experts model sends each token to a few small "experts" and leaves the rest idle, so a 35B model like Qwen3.6 35B-A3B only uses about 3B per token.

On reading, the dense models gained 3.9x to 4.1x and the mixture-of-experts models 2.7x to 3.0x. The likely explanation (not profiled): a mixture-of-experts model spends part of its reading time routing tokens between experts and on attention, which is not the big matrix math the new hardware speeds up most. The 35B-A3B mixture-of-experts model is still the fastest model here on both Macs. Dense vs mixture of experts, explained.

ModelReading, tok/sWriting, tok/sFirst word
Qwen3 14B14B, all active per token · 4-bit551 → 2,2784.1x31.5 → 55.41.8x59.0 s → 14.3 s4.1x
Qwen3.8 27B27B, all active per token · 4-bit388 → 1,5263.9x27.8 → 42.61.5x83.6 s → 21.3 s3.9x
Gemma 4 31B31B, all active per token · 16-bit294 → 1,2174.1x9.0 → 13.61.5x110.4 s → 26.7 s4.1x
Qwen3.6 35B-A3B35B total, 3B active per token · 4-bit2,193 → 6,0122.7x71.5 → 109.11.5x14.8 s → 5.40 s2.7x
Qwen3.5 122B-A10B122B total, 10B active per token · 4-bit771 → 2,3003.0x42.3 → 65.31.5x42.2 s → 14.1 s3.0x

The wait for the first word

With a long prompt, most of what you feel is the wait before the answer starts. That is the reading half, so it shrank the most.

The wait for the first word got 2.7x to 4.1x shorterSeconds before the first word at a 32K-token prompt. Gemma 4 31B: 110.4 s on the M3 Ultra, 26.7 s on the M5 Ultra; Qwen3.8 27B: 83.6 s on the M3 Ultra, 21.3 s on the M5 Ultra; Qwen3 14B: 59.0 s on the M3 Ultra, 14.3 s on the M5 Ultra; Qwen3.5 122B-A10B: 42.2 s on the M3 Ultra, 14.1 s on the M5 Ultra; Qwen3.6 35B-A3B: 14.8 s on the M3 Ultra, 5.40 s on the M5 Ultra.M3 Ultra, 512 GBM5 Ultra, 256 GBGemma 4 31Bdense · 16-bit4.1xshorter110.4 s26.7 sQwen3.8 27Bdense · 4-bit3.9xshorter83.6 s21.3 sQwen3 14Bdense · 4-bit4.1xshorter59.0 s14.3 sQwen3.5 122B-A10Bmixture of experts · 4-bit3.0xshorter42.2 s14.1 sQwen3.6 35B-A3Bmixture of experts · 4-bit2.7xshorter14.8 s5.40 s0 s30 s60 s90 s120 sseconds before the first word (shorter is better)
The wait for the first word got 2.7x to 4.1x shorterSeconds before the first word at a 32K-token prompt. Gemma 4 31B: 110.4 s on the M3 Ultra, 26.7 s on the M5 Ultra; Qwen3.8 27B: 83.6 s on the M3 Ultra, 21.3 s on the M5 Ultra; Qwen3 14B: 59.0 s on the M3 Ultra, 14.3 s on the M5 Ultra; Qwen3.5 122B-A10B: 42.2 s on the M3 Ultra, 14.1 s on the M5 Ultra; Qwen3.6 35B-A3B: 14.8 s on the M3 Ultra, 5.40 s on the M5 Ultra.M3 Ultra, 512 GBM5 Ultra, 256 GBGemma 4 31B4.1x shorterdense · 16-bit110.4 s26.7 sQwen3.8 27B3.9x shorterdense · 4-bit83.6 s21.3 sQwen3 14B4.1x shorterdense · 4-bit59.0 s14.3 sQwen3.5 122B-A10B3.0x shortermixture of experts · 4-bit42.2 s14.1 sQwen3.6 35B-A3B2.7x shortermixture of experts · 4-bit14.8 s5.40 s0 s30 s60 s90 s120 sseconds before the first word (shorter is better)
Seconds from sending a 32K-token prompt to the first word, median of 5 runs. Shorter is better. data/language-models/summary.json

The longer the prompt, the more of the new chip you get

A short prompt is over almost before it starts, and much of its time is fixed overhead. A long one is mostly matrix math, so the gap opens up. Pasting in a document, a codebase or a long chat is where the M5 Ultra pulls away.

Longer prompts get more of the new chipReading speed of Qwen3.8 27B 4-bit by prompt length, M3 Ultra vs M5 Ultra. 512: 366 vs 1,052 tokens per second (2.9x); 4K: 429 vs 1,685 tokens per second (3.9x); 16K: 414 vs 1,673 tokens per second (4.0x); 32K: 388 vs 1,526 tokens per second (3.9x).M3 Ultra, 512 GBM5 Ultra, 256 GBprompt tokens read per second05001,0001,5002,0003661,0522.9x5124291,6853.9x4K4141,6734.0x16K3881,5263.9x32Ktokens in the prompt
Longer prompts get more of the new chipReading speed of Qwen3.8 27B 4-bit by prompt length, M3 Ultra vs M5 Ultra. 512: 366 vs 1,052 tokens per second (2.9x); 4K: 429 vs 1,685 tokens per second (3.9x); 16K: 414 vs 1,673 tokens per second (4.0x); 32K: 388 vs 1,526 tokens per second (3.9x).M3 Ultra, 512 GBM5 Ultra, 256 GBprompt tokens read per second05001,0001,5002,0003661,0522.9x5124291,6853.9x4K4141,6734.0x16K3881,5263.9x32Ktokens in the prompt
Reading speed of Qwen3.8 27B 4-bit, prompt tokens per second, median of 5 runs. data/language-models/summary.json
Reading gain5124K16K32K
Qwen3 14Bdense2.8x4.1x4.2x4.1x
Qwen3.8 27Bdense2.9x3.9x4.0x3.9x
Gemma 4 31Bdense2.9x4.0x4.2x4.1x
Qwen3.6 35B-A3Bmixture of experts1.6x2.5x2.7x2.7x
Qwen3.5 122B-A10Bmixture of experts2.0x2.9x3.0x3.0x

Everyday AI work

Image generation is almost pure matrix math and gained the most. Transcription reads and then writes, so it lands in between. Hardware video transcoding runs on the media engines, not the GPU, and gained the least. A tiny decision model answering one short question barely changed.

Everyday AI jobs finished 1.0x to 4.0x fasterHow many times faster the M5 Ultra finished each job. Draw a 1024x1024 image (FLUX.2 klein 4B): 4.0x; Draw a 1024x1024 image (Z-Image Turbo): 3.0x; Make a 4-second video clip with sound (LTX-2.5, experimental port, load included): 2.7x; Describe 60 s of camera footage (Qwen3-VL 32B, load included): 2.6x; Describe 60 s of camera footage (Qwen3-VL 8B, load included): 2.5x; Transcribe a 2 h 5 min shoot day (Whisper large-v3 turbo): 2.1x; Transcode a 13.8-min 4K take to ProRes 422 (hardware encoder): 1.9x; Transcribe a 2 h 5 min shoot day (Whisper large-v3): 1.8x; Make a 2-second video clip with sound (LTX-2.5, experimental port, load included): 1.7x; Answer 300 decision questions (Laya, load included): 1.5x; Transcode the same take to HEVC (hardware encoder): 1.3x; Answer one decision question (Kev-4B, model already warm): about 1.0x.1x = the same speedDraw a 1024x1024 imageFLUX.2 klein 4B4.0xDraw a 1024x1024 imageZ-Image Turbo3.0xMake a 4-second video clip with soundLTX-2.5, experimental port, load included2.7xDescribe 60 s of camera footageQwen3-VL 32B, load included2.6xDescribe 60 s of camera footageQwen3-VL 8B, load included2.5xTranscribe a 2 h 5 min shoot dayWhisper large-v3 turbo2.1xTranscode a 13.8-min 4K take to ProRes 422hardware encoder1.9xTranscribe a 2 h 5 min shoot dayWhisper large-v31.8xMake a 2-second video clip with soundLTX-2.5, experimental port, load included1.7xAnswer 300 decision questionsLaya, load included1.5xTranscode the same take to HEVChardware encoder1.3xAnswer one decision questionKev-4B, model already warmabout 1.0x01x2x3x4xtimes faster on the M5 Ultra
Everyday AI jobs finished 1.0x to 4.0x fasterHow many times faster the M5 Ultra finished each job. Draw a 1024x1024 image (FLUX.2 klein 4B): 4.0x; Draw a 1024x1024 image (Z-Image Turbo): 3.0x; Make a 4-second video clip with sound (LTX-2.5, experimental port, load included): 2.7x; Describe 60 s of camera footage (Qwen3-VL 32B, load included): 2.6x; Describe 60 s of camera footage (Qwen3-VL 8B, load included): 2.5x; Transcribe a 2 h 5 min shoot day (Whisper large-v3 turbo): 2.1x; Transcode a 13.8-min 4K take to ProRes 422 (hardware encoder): 1.9x; Transcribe a 2 h 5 min shoot day (Whisper large-v3): 1.8x; Make a 2-second video clip with sound (LTX-2.5, experimental port, load included): 1.7x; Answer 300 decision questions (Laya, load included): 1.5x; Transcode the same take to HEVC (hardware encoder): 1.3x; Answer one decision question (Kev-4B, model already warm): about 1.0x.1x = the same speedDraw a 1024x1024 imageFLUX.2 klein 4B4.0xDraw a 1024x1024 imageZ-Image Turbo3.0xMake a 4-second video clip with soundLTX-2.5, experimental port, load included2.7xDescribe 60 s of camera footageQwen3-VL 32B, load included2.6xDescribe 60 s of camera footageQwen3-VL 8B, load included2.5xTranscribe a 2 h 5 min shoot dayWhisper large-v3 turbo2.1xTranscode a 13.8-min 4K take to ProRes 422hardware encoder1.9xTranscribe a 2 h 5 min shoot dayWhisper large-v31.8xMake a 2-second video clip with soundLTX-2.5, experimental port, load included1.7xAnswer 300 decision questionsLaya, load included1.5xTranscode the same take to HEVChardware encoder1.3xAnswer one decision questionKev-4B, model already warmabout 1.0x01x2x3x4xtimes faster on the M5 Ultra
M3 Ultra time divided by M5 Ultra time. Images are the median of 5 runs; the rest are single runs. data/everyday.json, data/images/summary.json, data/transcription.json

Every result

TestM3 UltraM5 UltraM5 Ultra is
Live race, Qwen3.8 27B, 32K prompt: wait for the first word73.8 s18.5 s4.0xdetails
Live race, same race: writing speed28.3 tok/s43.6 tok/s1.5xdetails
Live race, same race: whole answer80.4 s22.8 s3.5xdetails
Live race, a short question: whole answer3.42 s2.10 s1.6xdetails
One 1024x1024 image, FLUX.2 klein 4B (median of 5)7.00 s1.77 s4.0xdetails
One 1024x1024 image, Z-Image Turbo (median of 5)27.9 s9.25 s3.0xdetails
4-second video clip with sound, LTX-2.5 (load included)48.4 s17.8 s2.7xdetails
2-second video clip with sound, LTX-2.5 (load included)24.3 s14.0 s1.7xdetails
Describe 60 s of footage, Qwen3-VL 32B (load included)61.4 s23.5 s2.6xdetails
Describe 60 s of footage, Qwen3-VL 8B (load included)17.2 s7.0 s2.5xdetails
Transcode a 13.8-min 4K take to ProRes 422 (hardware)91 s47 s1.9xdetails
Transcode the same take to HEVC (hardware)120 s90 s1.3xdetails
Laya, 300 decision questions (load included)35.6 s24.2 s1.5xdetails
Kev-4B, one question, model warm~0.20 s~0.19 sabout 1.0xdetails
Kev-4B, the first (cold) question3.88 s3.98 s0.97xdetails
Hermes agent on the 27B: read a repo, answer five questionsnot run89 sdetails
Resolve edit A: the 27B decides 30 keep ranges and builds the timelinenot runabout 2 mindetails
Resolve edit B: Kev judges 143 segments, the 27B buildsnot run95 sdetails

Transcription, all six Whisper models

Whisper model13.8-min take2 h 5 min shoot day
Whisper large-v319.63 s → 11.21 s1.75x162.2 s → 90.0 s1.80x
Whisper large-v3 turbo7.21 s → 3.05 s2.36x57.8 s → 27.3 s2.12x
Whisper medium12.44 s → 7.44 s1.67x98.7 s → 59.8 s1.65x
Whisper small5.88 s → 3.79 s1.55x46.8 s → 30.9 s1.52x
Whisper base3.00 s → 2.06 s1.46x25.6 s → 17.6 s1.46x
Whisper tiny2.45 s → 1.66 s1.48x18.5 s → 12.7 s1.45x

What the Macs made

Pictures made by two AI image models on each Mac, from the same prompt and seed. They are not bit-identical, and each time is the median per image with the model already loaded.

Machine generated. These clips were made by the LTX-2.5 video model through an experimental MLX port. They are not real footage (LTX-2.x Community License). Times include loading the model.

The race page during a 32K-prompt race: the M5 Ultra is already writing while the M3 Ultra is still reading the prompt
An earlier 32K-prompt race, caught mid-race: the same request went to both Macs at the same instant, and the M5 Ultra is already writing while the M3 Ultra is still reading. This is a different run from the live race in the results table. About the race

The two machines

The new Mac has the faster chip. The old Mac has twice the memory, which decides how big a model fits. Every model we tested fit on both. The two Macs side by side.

M3 Ultra 512GBM5 Ultra 256GB
ChipM3 UltraM5 Ultra
CPU cores32 (24 performance + 8 efficiency)36 (12 super + 24 performance)
GPU cores8080
Memory in this unit512 GB256 GB
Memory bandwidth, Apple says819 GB/s1,200 GB/s
macOS as tested26.5.127.0
WhoseChuck's ownloaned by Apple for review

How we measured

  • Chat models ran on mlx_lm.server (mlx-lm 0.31.3, MLX 0.32.2) on each Mac, prompt cache off, thinking off, temperature 0.
  • Every cell: 1 warm-up run thrown away, then 5 measured runs, 30 s of rest between cells, 128-token answers. Headline numbers are medians, never means.
  • Reading speed is true prompt tokens divided by the seconds to the first word. Writing speed is (output tokens − 1) divided by the time from the first piece of the answer to the last.
  • Every prompt starts with a unique run id and every run logged the server's cached tokens (all zero), so no answer came from a cache.
  • Images: mflux 0.19.2 on MLX 0.32.2, 1024x1024, the same prompt and seed on both Macs, 5 measured images after a warm-up, with the model load timed separately.
  • Everything else ran once per Mac, usually on both Macs at the same moment, the way the video shows it.
  • The Macs ran different macOS versions (26.5.1 and 27.0), and a stuck background process held one M3 Ultra CPU core during most tests. It can only have made the M3 Ultra look slower. See docs/limits.md.

More: the method, honest limits, Apple's claims next to ours, glossary.

Get the data, run it yourself

Every number on this page is in data/ as JSON, with the raw logs beside it (schema). The benchmark tool is in harness/, and it runs with no AI hardware at all against two fake Macs:

git clone https://github.com/theNetworkChuck/mac-studio-m5-ultra-local-ai.git
cd mac-studio-m5-ultra-local-ai/harness
bun run mock    # terminal 1: two fake Macs
bun run race    # terminal 2: open the URL it prints, press START

To test your own Macs: docs/reproduce.md. This page and the README tables are generated from the data by scripts/build.py.