llamaperf

Local model performance on your hardware

Find which open-weight LLMs fit in your GPU or Mac and compare the speeds people report on setups like yours.

What runs on your hardware?

Pick your GPU or Mac, then read the speeds people reported on it, or estimate which models fit and how fast they run.

Free to use. No account needed. Memory estimates and community measurements are labelled separately.

Looking for a particular model?

Search for a model to see its reported speeds across GPUs and Macs.

Local model performance reports from the community

These are individual setups, not a controlled benchmark. Compare GPU count, quantization, context and offloading before comparing speeds. How to read a report →

GPU: M4 16GB
Compare setup details (1 active)

Exact recorded values. Context may be a configured limit; matching filters does not establish identical prompts, offloading or concurrency.

Apple hardware
generation:
12.7 tokens/s
prompt processing (prefill):
116.0 tokens/s
quant:
4-bit (MLX)
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.

Source-reported historical native MLX campaign by karlhendrik. Measurement section is dated 2026-09-29, 22:20–23:40 Tallinn; recovered 2026-10-13, not locally rerun. Pinned primary results: https://gist.github.com/karlhendrik/355bb6cbf98861b21177a6b7857e79f7/7ff331f5e10c68699eac04848ca3840708f41061#file-results-round2-md . Gist revision 7ff331f5e10c68699eac04848ca3840708f41061, last updated 2026-09-30T10:05:52Z. Exact invocation script: https://gist.github.com/karlhendrik/355bb6cbf98861b21177a6b7857e79f7/7ff331f5e10c68699eac04848ca3840708f41061#file-mlx_bench-sh . Hardware: ONE Apple Mac mini M4, host M4a, with 16 GB installed unified memory. The comparison section and script explicitly run MLX on one mini; the surrounding two-mini RPC cluster is a different experiment and must not become this report's GPU count. Source cluster configuration raises the GPU wired limit to 13,312 MB per mini, but no independent MLX effective-limit readback is published. CPU/GPU core counts, macOS version, power mode, clocks, thermal state, swap activity and background load are not recorded. Unified RAM is not dedicated VRAM. Model: mlx-community/Qwen3-14B-4bit, MLX safetensors, 4-bit. Exact source-linked artifact repository: https://huggingface.co/mlx-community/Qwen3-14B-4bit . Current metadata/config verification at https://huggingface.co/mlx-community/Qwen3-14B-4bit/blob/a4d9b2df59d2c150bef02fcbe0d91046b7ca33a4/config.json identifies Qwen3ForCausalLM and 4-bit/group-size 64 quantization; metadata revision observed at recovery is a4d9b2df59d2c150bef02fcbe0d91046b7ca33a4. This is an independently observed current revision, NOT proof of the snapshot tested on September 29. Tested HF revision, weight-file hashes and tokenizer revision are unknown. The model-card conversion-tool version is not the runtime version. The 14B label is the source's nominal model name; exact parameter/active-parameter totals are not supplied as measured metadata. Runtime: source states mlx-lm 0.29.1, using native mlx_lm generate on Apple Silicon. Exact command selects the HF ID above, --temp 0 and --max-tokens 128 for each of two short invocations. Short prose asks for an explanation of mixture-of-experts versus dense models and includes /no_think. A separate long invocation uses --max-tokens 32 and a deterministic seed 7 filler of 3,400 space-separated technical words, followed by a one-sentence summarization instruction. Long input is reported as 3,796 tokens; this is actual source-reported prompt count, not context capacity. No speculative draft-model flag or reusable prompt-cache file is supplied. The script uses serial fresh CLI processes, not HTTP, RPC or concurrent users. No explicit warmup/discard policy is recorded. Effective reasoning behavior was not separately validated; /no_think is an instruction, not proof of output semantics. All performance points: the two SHORT generation rates are 12.7 and 12.7 tokens/s. The headline selects the first reported value, 12.7, without inventing a mean or extra precision. The separate LONG prompt-processing rate is 116 tokens/s at 3,796 reported input tokens. The long request's generation rate is not published; short prompt-token count is not published. Source heading calls the short test 128 tokens and the command caps it at 128, but raw per-run token counters are absent, so actual generated counts are not independently established. Long output cap 32 is not an observed output count. These PP and TG fields come from DIFFERENT requests, not a3,796-input/128-output completion. Configured context/KV capacity is unknown and left blank. Native timing audit: official PyPI mlx-lm 0.29.1 source distribution https://pypi.org/project/mlx-lm/0.29.1/ , SHA256 b99180d8f33d33a077b814e550bfb2d8a59ae003d668fd1f4b3fff62a381d34b, mlx_lm/generate.py stream_generate/generate. The script greps its Prompt, Generation and Peak memory output. PP uses encoded prompt.size divided by elapsed time until the first generated token is yielded, then resets the timer; it is native CLI prompt-phase throughput with that first-token boundary, not HTTP TTFT or isolated kernel throughput. TG divides n+1 yielded-token iterations by elapsed time after that reset; the counter includes the first token even though its production preceded the TG timer, and can include terminal EOS. Detokenization/output-loop overhead can contribute. Preserve the native reported convention rather than silently correcting it. The package was only read, not installed or executed. Source reports peak memory 8.4GB. The native printer uses mx.get_peak_memory()/1e9, i.e. decimal GB from the MLX allocator, not installed RAM, model-file size, dedicated VRAM or whole-system RSS. The table does not identify which short/long invocation supplied that peak, and no per-run memory trace exists; retain it in Notes and leave structured measured-VRAM fields blank. Unrecorded: actual short input/output counters, actual long output, cache precision/dtype and effective cache capacity, Flash Attention selection, underlying MLX-library version, OS/build provenance, physical power, per-run durations, raw stdout, and answer correctness. No quality score or broad model recommendation follows from this timing test. Current model config does not prove run-time settings. No HTTP wall time or configured capacity has been relabeled native PP or actual input. Dedup: all 97 live approved M4-family rows and all-status exact gist search were read at recovery. Existing gist-linked report 1292 is the 35B RPC campaign. Existing Qwen3-8B M4-16GB report 1927 is another author's persistent-agent/ANE experiment (~10 tok/s), not this native CLI campaign. These two MLX model campaigns remain distinct from each other and from the source's GGUF arms. No author outreach, model download or local benchmark run was performed.

Oct 13, 2026
Apple hardware
generation:
23.2 tokens/s
prompt processing (prefill):
219.0 tokens/s
quant:
4-bit (MLX)
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.

Source-reported historical native MLX campaign by karlhendrik. Measurement section is dated 2026-09-29, 22:20–23:40 Tallinn; recovered 2026-10-13, not locally rerun. Pinned primary results: https://gist.github.com/karlhendrik/355bb6cbf98861b21177a6b7857e79f7/7ff331f5e10c68699eac04848ca3840708f41061#file-results-round2-md . Gist revision 7ff331f5e10c68699eac04848ca3840708f41061, last updated 2026-09-30T10:05:52Z. Exact invocation script: https://gist.github.com/karlhendrik/355bb6cbf98861b21177a6b7857e79f7/7ff331f5e10c68699eac04848ca3840708f41061#file-mlx_bench-sh . Hardware: ONE Apple Mac mini M4, host M4a, with 16 GB installed unified memory. The comparison section and script explicitly run MLX on one mini; the surrounding two-mini RPC cluster is a different experiment and must not become this report's GPU count. Source cluster configuration raises the GPU wired limit to 13,312 MB per mini, but no independent MLX effective-limit readback is published. CPU/GPU core counts, macOS version, power mode, clocks, thermal state, swap activity and background load are not recorded. Unified RAM is not dedicated VRAM. Model: mlx-community/Qwen3-8B-4bit, MLX safetensors, 4-bit. Exact source-linked artifact repository: https://huggingface.co/mlx-community/Qwen3-8B-4bit . Current metadata/config verification at https://huggingface.co/mlx-community/Qwen3-8B-4bit/blob/545dc4251c05440727734bcd94334791f6ab0192/config.json identifies Qwen3ForCausalLM and 4-bit/group-size 64 quantization; metadata revision observed at recovery is 545dc4251c05440727734bcd94334791f6ab0192. This is an independently observed current revision, NOT proof of the snapshot tested on September 29. Tested HF revision, weight-file hashes and tokenizer revision are unknown. The model-card conversion-tool version is not the runtime version. The 8B label is the source's nominal model name; exact parameter/active-parameter totals are not supplied as measured metadata. Runtime: source states mlx-lm 0.29.1, using native mlx_lm generate on Apple Silicon. Exact command selects the HF ID above, --temp 0 and --max-tokens 128 for each of two short invocations. Short prose asks for an explanation of mixture-of-experts versus dense models and includes /no_think. A separate long invocation uses --max-tokens 32 and a deterministic seed 7 filler of 3,400 space-separated technical words, followed by a one-sentence summarization instruction. Long input is reported as 3,796 tokens; this is actual source-reported prompt count, not context capacity. No speculative draft-model flag or reusable prompt-cache file is supplied. The script uses serial fresh CLI processes, not HTTP, RPC or concurrent users. No explicit warmup/discard policy is recorded. Effective reasoning behavior was not separately validated; /no_think is an instruction, not proof of output semantics. All performance points: the two SHORT generation rates are 23.2 and 23.3 tokens/s. The headline selects the first reported value, 23.2, without inventing a mean or extra precision. The separate LONG prompt-processing rate is 219 tokens/s at 3,796 reported input tokens. The long request's generation rate is not published; short prompt-token count is not published. Source heading calls the short test 128 tokens and the command caps it at 128, but raw per-run token counters are absent, so actual generated counts are not independently established. Long output cap 32 is not an observed output count. These PP and TG fields come from DIFFERENT requests, not a3,796-input/128-output completion. Configured context/KV capacity is unknown and left blank. Native timing audit: official PyPI mlx-lm 0.29.1 source distribution https://pypi.org/project/mlx-lm/0.29.1/ , SHA256 b99180d8f33d33a077b814e550bfb2d8a59ae003d668fd1f4b3fff62a381d34b, mlx_lm/generate.py stream_generate/generate. The script greps its Prompt, Generation and Peak memory output. PP uses encoded prompt.size divided by elapsed time until the first generated token is yielded, then resets the timer; it is native CLI prompt-phase throughput with that first-token boundary, not HTTP TTFT or isolated kernel throughput. TG divides n+1 yielded-token iterations by elapsed time after that reset; the counter includes the first token even though its production preceded the TG timer, and can include terminal EOS. Detokenization/output-loop overhead can contribute. Preserve the native reported convention rather than silently correcting it. The package was only read, not installed or executed. Source reports peak memory 4.7GB. The native printer uses mx.get_peak_memory()/1e9, i.e. decimal GB from the MLX allocator, not installed RAM, model-file size, dedicated VRAM or whole-system RSS. The table does not identify which short/long invocation supplied that peak, and no per-run memory trace exists; retain it in Notes and leave structured measured-VRAM fields blank. Unrecorded: actual short input/output counters, actual long output, cache precision/dtype and effective cache capacity, Flash Attention selection, underlying MLX-library version, OS/build provenance, physical power, per-run durations, raw stdout, and answer correctness. No quality score or broad model recommendation follows from this timing test. Current model config does not prove run-time settings. No HTTP wall time or configured capacity has been relabeled native PP or actual input. Dedup: all 97 live approved M4-family rows and all-status exact gist search were read at recovery. Existing gist-linked report 1292 is the 35B RPC campaign. Existing Qwen3-8B M4-16GB report 1927 is another author's persistent-agent/ANE experiment (~10 tok/s), not this native CLI campaign. These two MLX model campaigns remain distinct from each other and from the source's GGUF arms. No author outreach, model download or local benchmark run was performed.

Oct 13, 2026
Apple hardware
generation:
64.0 tokens/s
quant:
NVFP4 (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 Mellum2.1 at 64 tokens/s at 1K context on an M4 16GB Mac. Setup is MLX with an NVFP4 conversion, 6.84 GB on disk. The user converted JetBrains' Mellum2.1 to MLX NVFP4 and asks for feedback on real tasks.

Oct 12, 2026
Tone: positiveApple hardware
generation:
10.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.

agentictool-use

User reports Qwen3-8B at ~10 tok/s decode on a 16GB Mac (M4) using MLX with 4-bit quantization. Setup runs a persistent local agent with Qwen3-8B on the GPU, Qwen3-4B as 36 int8 layer shards on the Neural Engine, and Qwen2.5-0.5B for routing. The ANE toolchain is custom Rust with no Python. User notes 16GB is a hard ceiling and the mesh has only run on one machine so far.

Oct 11, 2026
Showing 1–4 of 4
Page 1 of 1

Community benchmarks snapshot

Records by GPU

AMD Strix Halo 128GB294NVIDIA RTX 3090190NVIDIA RTX 5090134NVIDIA DGX Spark77M5 Max 48GB65NVIDIA RTX Pro 6000 Blackwell62NVIDIA RTX 5060 Ti 16GB58NVIDIA RTX 3060 12GB54AMD Radeon AI PRO R9700 32GB50M4 Max 128GB49

Records by model

2211 total
Qwen3.81021
Qwen3.6238
DeepSeek V4 Flash147
Gemma 4144
Qwen3.597
Qwen353
other511

Records by engine

1645 total
llama.cpp875
vLLM189
MLX100
Strata70
Ollama62
other349

Use cases

coding 556agentic 357long-context 272tool-use 153vision 109summarization 53math 43creative-writing 37multilingual 23text-generation 9rp 8reasoning 3
coding556agentic357long-context272tool-use153vision109summarization53math43creative-writing37

Median generation t/s by GPU

On Qwen3.8 27B at 4-bit, plain single-GPU runs. Full ranking

RTX 509082RTX Pro 600067M5 Ultra 256GB50RX 7900 XTX48RTX 309036RTX 5090 Laptop 24GB34RTX 409032V100 32GB31Radeon AI PRO R9700 32GB30RX 7800 XT 16GB30

Prompt processing, same model

M5 Ultra 256GB1800RX 7900 XTX530RTX 3090561RTX 40901949V100 32GB941RTX 3080 20GB997Arc Pro B70512M1 Ultra 128GB153Arc Pro B60 24GB380M1 Max 32GB82

Reports by model size

Qwen3.8 27B566Qwen3.8 125B · 6B active371DeepSeek V4 Flash 284B · 13B active130Qwen3.6 35B · 3B active129Qwen3.6 27B72Gemma 4 26B · 4B active36GLM-5.3 320B · 18B active33DeepSeek V4.1 Flash 552B · 16B active28

Quants

Q4_K_M290UD-Q4_K_XL140NVFP4120Q8_0984-bit79Q4_K_XL71IQ4_XS70MXFP458IQ3_XXS52Q450