llamaperf

Mac M4 LLM benchmarks

Every M4 configuration on llamaperf, M4, M4 Pro and M4 Max, with its unified memory, bandwidth and the generation and prompt-processing speeds people report. Memory decides which models fit; bandwidth shapes both speeds.

10 configurations · 181 reports

As of 28 Oct 2026, the models most run on M4 Macs, each on one configuration, with the median of plain runs (one machine, one request, no speculative decoding):

Configurations

ChipMemoryBandwidthGen / PP t/sReports
M4 Max128 GB546 GB/s22PP 23753
M4 Max64 GB546 GB/s24PP 12018
M4 Pro64 GB273 GB/s13PP 12633
M4 Max48 GB546 GB/s1
M4 Pro48 GB273 GB/s17
M4 Max36 GB410 GB/s2
M432 GB120 GB/s14
M424 GB120 GB/s6.5PP 618
M4 Pro24 GB273 GB/s9
M416 GB120 GB/s26

Generation and PP medians are plain single-machine runs of Qwen3.8 27B at 4-bit, so every row is the same model; a blank means no run of it on that configuration yet.

Models people run on M4 Macs

Latest reports

Showing the 20 newest of 181 reports. See all of them →

Apple hardware
generation:
159.7 tokens/s
quant:
4-bit (MLX)

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 Nemotron-3 Nano 30B-A3B at 159.7 t/s decode on an M4 Max with 128 GB, batch 1 and greedy, measured with mlx-lm 0.31.3 on mlx 0.32.2. The model was the mlx-community 4-bit build at 17.8 GB; the figure is mlx_lm generate's own Generation rate over 256 tokens, taken as the median of three processes. The post compares mlx-lm against llama.cpp b8680 on the same machine for hybrid Mamba-2 models, but only the MLX row for Nemotron-3 Nano is given here.

Oct 26, 2026

Qwen3.6 35B (3B active)

M4 16GB · llama.cpp · 16,384 ctx

Tone: positiveApple hardware
generation:
23.0 tokens/s
prompt processing (prefill):
29.6 tokens/s
quant:
UD-Q4_K_M (GGUF)

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.

codingagentic

User reports Qwen3.6-35B-A3B at 23.0 tok/s generation and 29.6 tok/s prompt reading on a single prompt, on a 16 GB Mac mini M4. Setup is stock llama.cpp b11715 with the Kraits plugin, Unsloth UD-Q4_K_M (22.1 GB) weights, 16K context, temperature 0 and thinking off. A 4-agent crew writing a TypeScript LRU cache ran at 16.0-23.8 tok/s writing and 37.8-47.3 tok/s reading at ~16K context, scoring 9/9; the ~8K run scored 8/8 and the ~1K run 6/8. The single prompt scored 8/8 in 43.7 s.

Oct 21, 2026
Apple hardware
generation:
63.0 tokens/s
quant:
4-bit

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.

coding

User benchmarks Kapitsa 0.2 with its KFlash speculative decoding at 63 tok/s on Qwen3.8 27B on a MacBook Pro M4 Pro 48GB. Setup is Kapitsa with 4-bit weights, decoding a 512-token coding answer at temperature 0.6, median of 5 runs. The post also cites Splash 1.4.0 (DFlash2) at about 50 tok/s and Kapitsa at about 65 tok/s in its title, and mentions an M1 Pro 16GB MacBook Pro and Qwen3.8 4B/35B runs that are not shown in the excerpt.

Oct 21, 2026
Tone: positiveApple hardware
generation:
154.0 tokens/s
quant:
4bit (MLX)

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 Qwen3.6 35B-A3B at 154 t/s on a 2024 MacBook Pro M4 Pro with 48GB, using the Kapitsa engine. Setup is Kapitsa, an open-source Metal engine for Apple Silicon, with 4-bit MLX weights and DFlash2 speculative decoding; part of the 27B's prefill runs on the Neural Engine. The same table gives Qwen3.8 27B at 63 t/s and Qwen3.5 4B at 179 t/s on the M4 Pro, and on an M5 Max 128GB Qwen3.6 35B reaches 281 t/s. The author says not to trust benchmarks and notes Kapitsa is not fastest on the M5 Max for Qwen3.8 27B (102 vs mlx-serve's 130) or Flash-Next.

Oct 19, 2026
Tone: positiveApple hardware
generation:
63.0 tokens/s
quant:
4bit (MLX)

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 Qwen3.8 27B at 63 tok/s on an M4 Pro 48GB MacBook Pro with the Kapitsa engine, ahead of mlx-serve at 54 and Ollama at 32. Setup is Kapitsa with 4-bit MLX weights and speculative decoding (DFlash2), with part of each layer's prefill on the Neural Engine. The post is an engine release with comparison tables across M4 Pro 48GB, M5 Max 128GB and M1 Pro 16GB; on the M5 Max, Qwen3.8 27B reaches 115 tok/s and Qwen3.6 35B-A3B 272 tok/s, while Flash-Next 180B-A7B at 105 tok/s trails mlx-serve and oMLX by 2-3%.

Oct 19, 2026
Tone: mixedApple hardware
generation:
8.1 tokens/s
quant:
Q2_0 (GGUF)

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-Flash-Next 125B at 8.1 t/s on an M4 Mac mini with 24GB unified memory. Setup is Strata with GSQ-RCO Q2_0 weights, Metal backend, 8K context configured and a 4GB expert weight cache, streaming expert weights from the SSD. The figure is the median of three 128-token generation runs with thinking disabled, temperature 0 and no MTP, on short prompts; the full 8K context was not tested. User calls the speed slow for everyday interactive work but usable for patient experiments, and notes frequent memory-pressure warnings with no swap use during the short tests.

Oct 19, 2026
Tone: positiveApple hardware
generation:
37-39 tokens/s
prompt processing (prefill):
856-895 tokens/s
quant:
3-bit

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.

codingagenticlong-context

User reports Qwen3.8 Flash-Next at 37-39 tok/s writing and 856-895 tok/s reading the prompt at 60k context, split across five devices: an RTX 2060 Super PC, an RX 9060 XT PC, an M4 Pro MacBook with 24 GB, and two iPhone 17 Pro Maxes (A19 Pro). Setup chains the devices over Ethernet and 10 Gb/s USB-C, with every weight held in VRAM, pinned RAM or unified memory and no disk streaming. Pipelined speculation from the model's own MTP draft head lands about 2.2 tokens per step. At 16k context the user measured 42 tok/s writing and 728-744 tok/s prefill; at 32k, 39-41 tok/s and 844-852 tok/s. The agent session averaged 35 tok/s with bursts past 40. A second layout with 8-bit KV on the Mac and phones writes 31-33 tok/s at 60k and read one prompt past 164k tokens. PC 2's 16 GB caps prefill at about 980 tok/s.

Oct 18, 2026
Apple hardware
generation:
297.4 tokens/s
prompt processing (prefill):
4993.0 tokens/s
quant:
Q4 (GGUF)

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 297.4 t/s generation and 4993 t/s prompt processing. Source evidence (verbatim): Source: https://arxiv.org/html/2607.00501v1 # Original M4 Pro 24GB Qwen3 0.6B four-bit llama.cpp baseline measurements Original Base Compute research paper, July 1, 2026, section 4 and Tables 1–2. Selected run is the authors' llama.cpp baseline, not BaseRT. Hardware: Apple M4 Pro 24GB unified memory, 16 GPU cores. Chassis, CPU core count and macOS version unreported; do not infer Mac mini. Model Qwen3-0.6B, GGUF weights, generic Q4 / 4-bit label only. Exact quantization recipe, tested artifact repository and revision unknown. Verified upstream model reference only: https://huggingface.co/Qwen/Qwen3-0.6B ; this safetensors repository is not the tested GGUF. Runtime llama.cpp Metal, source-labelled b9630 (June 2026), default settings. Full commit and command unreported. Generation 297.4 tokens/s over 128 autoregressive generated tokens (TG128). Prefill 4993 tokens/s at 512 prompt tokens (PP512). These are separate synthetic tests, not a combined 512-input/128-output request. Cache depth, KV precision, repetition count, warmup, concurrency and speculation unreported. Resident usage and weight-file size unreported. Standard deviations are omitted by the authors, who say they are generally below 3% for decode and 10% for prefill; these are not per-row error bars. Other runtime, prompt-length and quantization rows are distinct configurations, not averaged here.

Oct 17, 2026
Tone: positiveApple hardware
generation:
57.0 tokens/s
quant:
4bpw-sh (EXL3)

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-uselong-context

User publishes two EXL3 quants of Qwen3.8-Flash-Next for the sushi engine on Apple Silicon, reporting about 57 tok/s decode for the 4-bit pack and 63 tok/s for the 5-bit on an M4 Max with 128 GB. Routed experts come from ExLlamaV3 v1.6.0; dense layers, embeddings, vision tower and MTP head are copied from beamster's Sushi-4bpw. Prefill at 64K is about 690 tok/s. The 4-bit pack is 63.7 GiB and the 5-bit 77.8 GiB; KLD against BF16 is 0.94 for 4-bit and 0.79 for 5-bit. Needles in a 400K-token document scored 4/4 for both, and tool calling 28/28 for the 5-bit. The eval is 24 prompts on one machine.

Oct 17, 2026
Tone: mixedApple hardware
generation:
43.0 tokens/s

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 (abliterated) at ~43 tok/s on an M4 Max 128GB. Setup is mlx-serve 26.10.2 with MTP enabled; the 27B build is 16GB. The user also lists other abliterated models in their picker: Smart 35B at ~106 tok/s (24GB), Vision 27B at ~22 tok/s (15GB), Coder 80B at ~78 tok/s (49GB), DeepSeek-V4-Flash 284B at ~26 tok/s (75GB), and Flash-Next 125B at ~90 tok/s (77GB). They ask for suggestions on better packs and MTP or mlx-serve settings for this hardware.

Oct 17, 2026

Qwen3.5 35B (3B active)

M4 Max 128GB · Ollama · 65,536 ctx

Apple hardware
generation:
43.5 tokens/s
quant:
Q4_K_M (GGUF)

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 43.5 t/s generation. Source evidence (verbatim): Source: https://antekapetanovic.com/blog/qwen3.5-apple-silicon-benchmark/ # Ollama vs. llama.cpp vs. MLX with Qwen3.5 35B on Apple Silicon Apple M4 Max, 128GB unified memory, macOS 26.3. Model Qwen3.5 35B-A3B (MoE). Ollama Q4_K_M, llama.cpp Unsloth Dynamic Q4_K_XL, context 65536 for both, MLX 4-bit group quantization. Engine versions not stated. Generation only, mean of 10 runs, single request, no speculative decoding stated. Engine-reported generation tok/s, thinking off, deterministic params: mlx-py 130.2 +/- 0.8, llama.cpp 71.0 +/- 0.1, Ollama 43.5 +/- 0.4. Client wall-clock: mlx-py 114.9, mlx-http 107.6, llama.cpp 65.8, Ollama 40.5. Prompt processing was not reported.

Oct 16, 2026
Tone: positiveApple hardware
generation:
38.0 tokens/s
prompt processing (prefill):
274.0 tokens/s
quant:
UD-IQ2_M (GGUF)

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.

codingagentic

User reports Qwen3.6-35B-A3B at 38.0 tok/s on a Mac mini M4 16GB, running a four-agent CrewAI coding crew (analyst, architect, developer, tester) via Coachwhip v0.5.3. Setup is Coachwhip with UD-IQ2_M quant (11.5 GB) and all experts in GPU memory; temperature 0.7, top-p 0.8. The developer agent wrote 1,069 tokens at 38.0 tok/s and read 810 tokens at 274 tok/s; the tester wrote 1,811 tokens at 36.4 tok/s and read 2,071 at 281 tok/s. The crew scored 8/8 on tests written by gpt-5-mini, matching the OpenAI gpt-5-mini run (8/8) at 2 min 19 s versus 1 min 41 s. Two other runs scored 7/8, both missing fractional refill. Prompt reading was about 300 tok/s on a 1,500-token prompt, 242 at 7.5K, 227 at 9.3K, and 202 at 16.8K.

Oct 16, 2026

Qwen3.8 27B

M4 Max 36GB · Inco Splash · 256,000 ctx

Apple hardware
generation:
15.0 tokens/s
prompt processing (prefill):
100.0 tokens/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 Qwen3.8 27B at 15 t/s generation and about 100 t/s prefill on an M4 Max 36GB MacBook, running a 256K-token prompt. Setup is Inco Splash; no quant or KV cache format stated. User questions how the run fits in 36GB of RAM without significant swap.

Oct 16, 2026
Tone: mixedApple hardware
generation:
2.9 tokens/s
quant:
Q4_K_M (GGUF)

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-Next 80B-A3B at 2.9 tok/s on an M4 Pro 24GB MacBook Pro, running llama.cpp's WebGPU backend in a Chrome tab with MoE experts paged in from disk. Setup is llama.cpp (ggml-webgpu) with a Q4_K_M GGUF, 48.4 GB file, 4.89 GB resident on the GPU, 48 s initial load from disk. The 80B reads about 359 MB from disk per token; the author calls it a proof of concept. OLMoE 1B-7B Q4_K_M reached 22.4 tok/s and LFM2 8B-A1B Q4_K_M 17.1 tok/s in the same recording. Paged and unpaged replies were identical; against llama.cpp on Metal 4 to 8 of 9 replies matched. Chrome or Edge 137+ only, tested on Apple silicon only.

Oct 14, 2026
Tone: positiveApple hardware
generation:
60.0 tokens/s
quant:
Q8

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 JetBrains Mellum 2.1 12B A2.5B MoE running at around 60 t/s on an M4 16GB at full 130k context. Setup uses a Q8 quant; the user notes a 16 GB GPU can run it easily. The user also got 140 t/s on a 9070 XT and expects 8GB and 12GB cards to reach 30-40 t/s. They find it codes well but suggest a bigger model for detailed planning.

Oct 14, 2026
Apple hardware
generation:
198.4 tokens/s
quant:
4-bit (MLX)
mtp (multi-token prediction):
on

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.

coding

User reports 198.4 t/s generation. Source evidence (verbatim): Source: https://rapidmlx.com/compare/mlx-lm # Mac mini M4 Pro48GB Qwen3.5-9B speculative whole-file edit benchmark First-party engine-author measurements October4,2026. Mac mini AppleM4 Pro 48GB unified RAM, macOS26.5.1, ACpower, idle before starts; core counts unknown. Qwen3.5-9B4-bit, Rapid-MLX0.15.6 with MTP plus prompt-lookup versus mlx-lm0.32.0 default nonspeculative server, both MLX0.32.3. Whole-file rename task: 198.4 tok/s decode. Comparison baseline: 46.4 tok/s; median of3fresh-server runs, two discarded warmups, temperature0, thinkingoff. Exact prompt/output counts, contextcapacity, residentRAM and MTPcompanion artifact unknown. Decode=(completiontokens-1)/(last-firststreamedchunk), not end-to-end or prefill. Copy-heavy task benefits from prompt lookup; do not generalize peak. Testedquant repo verified: https://huggingface.co/mlx-community/Qwen3.5-9B-4bit . Sourceversions.json identifies shortened revision8b2b98c; fullSHA unknown and revisiontree read returned generic toolerror. Sources: https://rapidmlx.com/compare/mlx-lm ; https://rapidmlx.com/blog/assets/vs-mlx-2026-10/versions.json ; https://rapidmlx.com/blog/assets/vs-mlx-2026-10/raw/manifest.json . Source author builds tested engine; rawmanifest links individual runs. Selected run is Rapid-MLX with MTP plus prompt-lookup, generation 198.4 tok/s. Baseline mlx-lm measurement is a separate run. Prefill speed unknown.

Oct 14, 2026

gpt-oss 21B (3.6B active)

M4 Pro 64GB · llama.cpp b6280 / 0fd90db / Metal

Apple hardware
generation:
63.3 tokens/s
prompt processing (prefill):
700.8 tokens/s
quant:
MXFP4 (GGUF)
flash attention:
on
mtp (multi-token prediction):
off

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 gpt-oss 20B MXFP4 at 63.3 t/s generation and 700.8 t/s prompt processing on a Mac mini M4 Pro with 64 GB unified memory. Setup is llama.cpp build 6280 with MXFP4 GGUF, F16 K/V cache, flash attention, one Metal device, and -ngl 99. The 63.3 t/s is a separate TG128 depth-zero test, not generation after the four large prompts; prompt rates fall from 700.78 t/s at 2048 tokens to 419.74 t/s at 32768.

Oct 14, 2026

LLaMA family 7B / Q4_0 / Mac mini M4 Metal b1550 / PP512 TG128 / exact base and artifact unknown

M4 32GB · llama.cpp b1550 (8e672efe) / Metal

Apple hardware
generation:
24.1 tokens/s
prompt processing (prefill):
221.3 tokens/s
quant:
Q4_0 (GGUF)

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 LLaMA-family 7B at 24.1 t/s generation and 221.3 t/s prompt processing on a Mac mini M4 with 32 GB unified RAM. Setup is llama.cpp build 1550 with Q4_0 and F16 KV cache, Metal backend at ngl 99 on one GPU. The figures are llama-bench PP512 and TG128 synthetic tests, not a 512-token prompt followed by a 128-token answer; exact source rates are 221.29 and 24.11 t/s.

Oct 13, 2026

LLaMA family 7B / Q8_0 / Mac mini M4 Metal b1550 / PP512 TG128 / exact base and artifact unknown

M4 32GB · llama.cpp b1550 (8e672efe) / Metal

Apple hardware
generation:
13.5 tokens/s
prompt processing (prefill):
223.6 tokens/s
quant:
Q8_0 (GGUF)

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 LLaMA-family 7B mostly Q8_0 at 13.5 t/s generation and 223.6 t/s prompt processing on a Mac mini M4 with 32 GB unified RAM. Setup is llama.cpp build 1550 with Q8_0 and F16 KV cache, Metal backend at ngl 99, one GPU. The figures are llama-bench PP512 and TG128, independent synthetic prompt and generation tests rather than a 512-token prompt followed by a 128-token answer.

Oct 13, 2026

LLaMA family 7B / F16 / Mac mini M4 Metal b1550 / PP512 TG128 / exact base and artifact unknown

M4 32GB · llama.cpp b1550 (8e672efe) / Metal

Apple hardware
generation:
7.4 tokens/s
prompt processing (prefill):
230.2 tokens/s
quant:
F16 (GGUF)

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 a LLaMA-family 7B model at 7.4 t/s generation and 230.2 t/s prompt processing on a Mac mini M4 with 32 GB unified RAM. Setup is llama.cpp build 1550 with F16 quantization and F16 KV cache, Metal backend at ngl 99, one GPU. The figures are llama-bench PP512 and TG128 results, independent synthetic prompt and generation tests rather than a 512-token prompt followed by a 128-token answer; exact source rates are 230.18 ± 0.16 t/s and 7.43 ± 0.02 t/s.

Oct 13, 2026

Frequently asked

Which M4 Mac is best for local LLMs?

On Qwen3.8 27B at 4-bit, the M4 model the most of these Macs have been measured on, the M4 Max 64GB is the fastest reported, at 23.9 tokens per second (one run), and the M4 Max 128GB holds the largest models with 128 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 M4 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 M4 Mac slower than an NVIDIA card with less memory?

Generation speed is limited by memory bandwidth, not by memory size. M4 configurations on llamaperf range from about 120 to 546 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.