Every M5 configuration on llamaperf, M5, M5 Pro, M5 Max and M5 Ultra, with its unified memory, bandwidth and the generation and prompt-processing speeds people report. Memory decides which models fit; bandwidth shapes both speeds.
13 configurations · 206 reports
As of 28 Oct 2026, the models most run on M5 Macs, each on one configuration, with the median of plain runs (one machine, one request, no speculative decoding):
Generation and PP medians are plain single-machine runs of Qwen3.5 9B at 4-bit, so every row is the same model; a blank means no run of it on that configuration yet.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is shown only when the source reports it; generation speed cannot tell us time to first token. Check the full setup before comparing.
codingagentic
User reports Qwen 3.6 35B-A3B at about 40 tok/s on an M5 MacBook Pro with 32GB unified memory, against about 17 tok/s for a dense 27B at 4-bit.
Setup uses oMLX with an SSD-backed cache server, 8-bit KV cache and context set to roughly 32K.
The user says the 16GB dense model plus KV cache filled the 32GB machine and caused a shutdown; the MoE has been stable since.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is input throughput, not time to first token. Check the full setup before comparing.
agentictool-use
User reports Qwen3.8-27B at about 55 t/s generation and 448 t/s prefill on an M5 Pro MacBook Pro with 24GB unified memory.
Setup is the Inco Splash engine (v1.4.1) with the UD-IQ3_XXS GGUF (10.9GB), capped at 18GB memory for around 120k context.
User's own KLD measurements give 89.5% top-1 agreement with mean KLD 0.0542, and they say Safari and Discord still run comfortably alongside it.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is input throughput, not time to first token. Check the full setup before comparing.
coding
User benchmarks Nanbeige4.3-33B (dense, 4-bit) on a MacBook Pro M5 Max with 128 GB, comparing mlx-lm, llama.cpp and Kapitsa at prompt lengths from 512 to 32K tokens. At 512 tokens mlx-lm prefills at 757 t/s and decodes at 28.8 t/s, llama.cpp at 691 t/s and 27.3 t/s, and Kapitsa at 693 t/s and 34.9 t/s.
mlx-lm and Kapitsa read the same 4-bit MLX AWQ pack (group 64); llama.cpp reads Q4_K_M. Kapitsa's decode figures use KFlash, its tree-based speculative decoding with a small drafter, while mlx-lm and llama.cpp run plain decoding.
On a 512-token Python coding task Kapitsa reaches 36.6 tok/s greedy and 32.3 tok/s sampled, against 27.1 and 26.7 for mlx-lm and 24.9 and 24.8 for llama.cpp. At 29.5K context mlx-lm has the fastest cold TTFT at 59.4 s, Kapitsa the fastest follow-up TTFT at 300 ms and the lowest peak memory at 28.1 GB. The author works on Kapitsa and notes the KV cache is large, 26 GB for 128K tokens.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is shown only when the source reports it; generation speed cannot tell us time to first token. Check the full setup before comparing.
tool-useagentic
User reports Granite Switch 4.1 8B at 56 t/s chat on an M5 Max 128GB, with the 30B at 17 t/s.
Setup is mlx-lm with a custom granite_switch package, 8-bit MLX weights, greedy decoding, one request at a time, medians of 3 runs. The 4-bit builds reach 98 t/s (8B) and 32 t/s (30B).
Decision steps take 0.62 s on the 8B and 2.3 s on the 30B at a ~1.2K-token prompt. Accuracy on 500 labelled claims is 0.814 (8B 8-bit), 0.844 (30B 8-bit) and 0.840 (30B 4-bit), against 0.812 and 0.846 for the bf16 conversions. The user picks the 8B 8-bit for routing and classification.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is input throughput, not time to first token. Check the full setup before comparing.
agenticcoding
User reports Qwen3.8 Flash-Next at 200 tok/s decode and 8k tok/s prefill on a two-machine M5 Ultra 256GB (80-core) cluster.
Setup is Tensorfold with Q6 weights, connected over two Thunderbolt 5 cables; the user copied Tensorfold's guide and had DeepSeek set it up.
GLM-5.3 Flash on the same cluster gave 50 tok/s decode and 4.9k tok/s prefill, which the user found too slow. A previous Qwen3.8 27B Q4 run under NInfer gave around 1.4k prefill and 100-120 tok/s decode. The user runs Hermes as the harness and asks whether a lighter harness would speed things up.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is shown only when the source reports it; generation speed cannot tell us time to first token. Check the full setup before comparing.
User reports the Flint model at around 112 tok/s on an M5 Pro 48GB Mac.
Setup is Ollama, with the speed read from Ollama's own eval_count / eval_duration and the model unloaded after each run.
The figure comes from the author's own speed-test tool, which streams the answer and counts reasoning tokens toward the speed.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is input throughput, not time to first token. Check the full setup before comparing.
codingagentictool-uselong-context
User reports Qwen3.8 Flash-Next (Swift 1.5) at 144.6 tok/s decode and 3,444 tok/s prefill on a Mac Studio M5 Ultra 96GB, at a median context of 147.5K tokens.
Setup is Splash with IQ3_S GGUF weights and a 262,144-token context window, driven by the DeepSeek Harness agent framework for agentic coding.
With two concurrent requests combined decode is 200.4 tok/s (100.2 per request) and prefill 3,006 tok/s; with three it is 218.0 tok/s combined (72.7 per request) and 3,253 tok/s prefill, a result the user calls preliminary. The user is happy with the numbers and finds the model less lazy than Sol at troubleshooting.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is shown only when the source reports it; generation speed cannot tell us time to first token. Check the full setup before comparing.
codingtool-useagenticlong-context
User reports Qwen3.8-Flash-Next at 49 t/s decode on an M5 24GB MacBook Air.
Setup is Splash 1.4.0 with a small fork, ISTA GSQ-RCO Q2_0 weights and a Flash-Next-DFlash2 draft model at 256K context. About 28% of expert slots (6,800 of 24,576, ~8.8 GB) stay resident and the rest are streamed from the SSD.
Cold prefill without prompt cache is 522 t/s on a 32,620-token prompt and 485 t/s on 63,201 tokens. Real agent use in pi averages ~45 t/s with no prompt-cache losses, and draft acceptance is ~.70 for code and ~.80 for tool calls.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is input throughput, not time to first token. Check the full setup before comparing.
coding
User benchmarks oMLX 0.7.2 serving Inco AI's Splash package for Qwen3.8-27B (4-bit target plus DFlash 2 draft) on a MacBook Pro M5 Max with 48 GB, using a Python code context and 128 generated tokens per test.
At a 4096-token prompt the single request reaches 93.8 t/s decode and 1207.0 t/s prefill; longer prompts give 189.4 t/s decode at 16382 tokens and 110.2 t/s at 65536 tokens.
Batched continuous batching reaches 413.7 t/s aggregate at 2x and 407.0 t/s at 4x, with peak memory between 19.1 GB and 22.2 GB.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is shown only when the source reports it; generation speed cannot tell us time to first token. Check the full setup before comparing.
User reports running Qwen3.6-35B-A3B (Splash build) on an M5 Max 128GB MacBook Pro in LM Studio at roughly 375-400 tok/s with a 262k context.
Setup is LM Studio with the Splash build at 262k context on the 128GB machine.
The speed is given only as a range, so no single figure is recorded. The post's main subject is a cloud agent running a training-and-grading program against the local model, not a benchmark of it.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is shown only when the source reports it; generation speed cannot tell us time to first token. Check the full setup before comparing.
math
User reports a Qwen3.6-35B-A3B Splash build in LM Studio on an M5 Max 128GB MacBook Pro at roughly 375-400 tok/s, used to generate and cold-solve 800 math problems.
A Qwopus 122B MLX build at about 38 tok/s acts as judge for disputed items; the cloud agent Muse orchestrates over Tailscale.
Of 800 problems, 731 verified clean, 62 had corrected answer keys, 7 were excluded, and 100 were held out; the solve-and-adjudication passes logged 4.1M+ completion tokens. The user notes the 122B judge went 1-for-2 on the hardest disputes.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is input throughput, not time to first token. Check the full setup before comparing.
coding
User benchmarks GLM-5.3-Flash-MLX-mixed-4_8bit on an M5 Ultra 256GB with oMLX, reporting 61.7 t/s generation and 1587.5 t/s prompt processing at 1024-token prompt.
Setup uses MLX mixed 4/8-bit weights with peak MLX memory of 174.17 GB; a 131k context prefill would need ~208.28 GB, exceeding the 205.80 GB prefill limit.
At longer prompts generation stays 58.1-59.6 t/s and prefill 2323.9-2373.0 t/s; continuous batching reaches 67.3 t/s at 2x and 99.3 t/s at 4x.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is shown only when the source reports it; generation speed cannot tell us time to first token. Check the full setup before comparing.
User reports NVIDIA Nemotron-Labs Dory 1.0 4B at 101 tok/s on an M5 Max 128GB with one loop, dropping to 69 tok/s at 2 loops and 39 tok/s at 4 loops.
Setup is an MLX port with the 8-bit 4.2 GB build, medians of repeated runs; peak memory is 7.7 GB at 32K context with one loop.
After a 32K prompt the same runs give 82, 54 and 31 tok/s, with prefill at 3,200, 1,980 and 1,070 tok/s. Batch generation reaches about 450 tok/s total across 16 requests at 2 loops, and a 16 GB M1 Pro measured about 28 tok/s at 1K and 19 tok/s at 32K in 4-bit at 2 loops. 8-bit WikiText-2 perplexity falls from 12.18 to 11.77 to 11.70 as loops increase.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is shown only when the source reports it; generation speed cannot tell us time to first token. Check the full setup before comparing.
long-context
User compares Strata against oMLX running Qwen3.8-Flash-Next on a 128GB M5 Max, with Strata decoding at 74 tok/s versus 57.5 tok/s for oMLX at 245K context.
Strata is a one-month-old engine built for this one model, running on Metal.
The comparison holds one request at a time only, which the user notes as the current limitation.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is shown only when the source reports it; generation speed cannot tell us time to first token. Check the full setup before comparing.
User reports Qwen3.8-27B at 140 tok/s on an M5 Max MacBook Pro with 128GB, the fastest run of their open source Apple Silicon engine kapitsa.
Setup is kapitsa with a 4bit model and kflash speculative decoding, where the 27B verifies a tree of drafter guesses in one pass rather than a single chain.
The user is asking Mac Studio owners to run the same model for comparison.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is input throughput, not time to first token. Check the full setup before comparing.
coding
User benchmarks Qwen3.8-Flash-Next at 141.0 t/s generation and 3906.4 t/s prompt processing on an M5 Ultra 256GB.
Setup is oMLX with a Q6_K_XL GGUF at a 1024-token prompt, single request, no speculation.
Decode ranges from 67.6 to 197.3 t/s across the 1024 to 200000-token prompt sweep. Continuous batching reaches 316.4 t/s aggregate at 4 concurrent requests. User says opencode runs fast and responsively but code quality still has room for improvement.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is shown only when the source reports it; generation speed cannot tell us time to first token. Check the full setup before comparing.
User reports GLM 5.3 Flash on an M5 Ultra 256GB with oMLX 0.7.1, gaining about 20-30 tok/s on long running tasks at single concurrency versus 0.7.0, which was around 60-80 tok/s.
Setup is oMLX 0.7.1 with an oQ4e quant on a single machine.
With Lightning MTP enabled the user gets anywhere from 80-100 tok/s.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is input throughput, not time to first token. Check the full setup before comparing.
User reports DeepSeek V4.1 Flash (10-17 checkpoint) running on a 256GB M5 Ultra (64-core GPU, 30-core CPU) at 20-25 tok/s generation and 500 tok/s prefill.
Setup is oMLX with an oQ4e MLX build, 65% MoE expert offload, CED prefill on, SSD N-gram offload on and a 16384 prefill chunk size; the 4-bit N-gram table was swapped for the original FP8 shards.
Single-request tables give 18.8-30.8 tok/s decode on an English novel and 21.2-25.9 tok/s on Python code, with peak memory up to 203.6 GB; context benchmarks show 532 tok/s prefill at 128k and 516 tok/s at 256k.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is shown only when the source reports it; generation speed cannot tell us time to first token. Check the full setup before comparing.
agentic
User reports Qwen3.5-9B running at about 25 tok/s without speculation and 33-37 tok/s with MTP speculative decoding on a fanless MacBook Air M5 16GB.
Setup is a custom MLX engine (QVex-3.5) with a self-made qvex-q4 4-bit imatrix quant, using Qwen's own MTP head as the draft model (about 490 MB).
The custom quant is 2.7x closer to bf16 than stock MLX 4-bit (KL 0.026 vs 0.069). A 3-bit build was about 13% faster but used 20-45% more energy per token, and MTP costs 10-25% more energy per token. With a 512-token thinking budget the model solved 24/24 tasks; the user calls this a sanity check rather than a benchmark, tested on one machine only.
Reported by the source; GPU count, offloading and concurrent requests can change these figures. Prompt-processing speed is shown only when the source reports it; generation speed cannot tell us time to first token. Check the full setup before comparing.
User compares six local runtimes on an Apple M5 Pro with 64 GB of unified memory, all running Qwen3.8-27B with a short lighthouse-keeper prompt of about 44 input tokens and 400 output tokens. TensorFold app beta.8 with engine 1.1.0 and an MLX 4-bit model plus DFlash2 drafter was fastest at a mean 36.0 tok/s (36.2 and 35.7 across two runs).
Other means were LM Studio 0.4.26+4 at 33.5 tok/s, MLX-Serve 26.10.2 at 30.1 tok/s, Ollama 0.40.6 at 27.0 tok/s, Magnitude 0.2.9 at 21.0 tok/s and oMLX 0.7.0 at 16.0 tok/s.
User notes the comparison is not apples-to-apples since model packaging, quantization, speculative decoding and runtime defaults differ, and that TensorFold's hardware qualification does not list the M5 Pro.
Frequently asked
Which M5 Mac is best for local LLMs?
On Qwen3.5 9B at 4-bit, the M5 model the most of these Macs have been measured on, the M5 Max 48GB is the fastest reported, at 86.5 tokens per second (one run), and the M5 Ultra 512GB holds the largest models with 512 GB of unified memory. Speed follows the chip tier's memory bandwidth, and which models fit follows the memory size.
How much unified memory do I need on an M5 Mac for local LLMs?
Enough to hold the model's weights at your quant plus its context, with headroom for macOS. Unified memory is shared with the system, so the usable pool is smaller than the number on the box. The VRAM calculator sizes any model against each configuration.
Why is an M5 Mac slower than an NVIDIA card with less memory?
Generation speed is limited by memory bandwidth, not by memory size. M5 configurations on llamaperf range from about 154 to 1229 GB/s, while a high-end discrete GPU reads its smaller pool much faster. A Mac wins on which models fit; a discrete card wins on tokens per second for models that fit both.