llamaperf

MLX benchmarks

Apple's machine-learning framework for Apple Silicon, with its own LLM runtime, mlx-lm.

79 community reports

MLX results by GPU

Hardware with reported MLX results, with each report's model, quant and speed, newest first. Runs on several cards, with speculative decoding, with batched requests or with part of the model in system RAM say so, since each describes a different setup.

MLX on M5 Max 48GB27 reports

All MLX results on the M5 Max 48GBFilter MLX reports on the M5 Max 48GB

MLX, GPU not identified12 reports

MLX is Apple's open-source array framework, designed around the unified memory of Apple Silicon. Its mlx-lm package loads, runs and serves LLMs on a Mac.

Community conversions in MLX's own 4-bit and 8-bit formats cover most popular models.

MLX is built for Apple hardware first. Fewer models are converted for it than for GGUF, so llama.cpp's Metal backend is the usual alternative on a Mac.

Compare GPUs running MLX

Every card is compared on one model, Qwen3 14B at 4-bit, the size and bit class that most cards here have plain runs of. A card with no run of that model shows none rather than a figure from a different model.

GPUVRAMReportsMedian speed, Qwen3 14B 4-bit
M5 Max 48GBapple48GB27Gen 62.6 t/sPP 1738.6 t/s · n=1
M3 Ultra 512GBapple512GB15no Qwen3 14B 4-bit run reported
M2 Max 64GBapple64GB14no Qwen3 14B 4-bit run reported
M5 Max 128GBapple128GB7no Qwen3 14B 4-bit run reported
M5 Ultra 256GBapple256GB7no Qwen3 14B 4-bit run reported
M4 16GBapple16GB4Gen 12.7 t/sPP 116.0 t/s · n=1
M3 Ultra 96GBapple96GB3no Qwen3 14B 4-bit run reported
M4 Pro 48GBapple48GB2no Qwen3 14B 4-bit run reported

MLX against other engines

Pairs of plain runs on the same card, of the same model size at the same bit class: one device, one request, no speculative decoding, the whole model in memory. Context length and build still differ between the two sides, and each side shows its own.

Model and GPUMLXOther engine
Gemma 3 12B 4-bitM5 Max 48GB66.9 t/sPrompt processing (prefill) 1834.9 tokens/s (1)one generation report, context not statedllama.cpp61.5 t/sPrompt processing (prefill) 1721.5 tokens/s (1)one generation report, context not stated
Gemma 3 4B 4-bitM5 Max 48GB176.2 t/sPrompt processing (prefill) 5550.3 tokens/s (1)one generation report, context not statedllama.cpp150.5 t/sPrompt processing (prefill) 5760.7 tokens/s (1)one generation report, context not stated
Qwen 2.5 Coder 14B 4-bitM5 Max 48GB60.8 t/sPrompt processing (prefill) 1719.3 tokens/s (1)one generation report, context not statedllama.cpp56.0 t/sPrompt processing (prefill) 1546.0 tokens/s (1)one generation report, context not stated
Qwen 2.5 Coder 32B 4-bitM5 Max 48GB28.4 t/sPrompt processing (prefill) 734.4 tokens/s (1)one generation report, context not statedllama.cpp26.3 t/sPrompt processing (prefill) 685.0 tokens/s (1)one generation report, context not stated
Qwen 2.5 Coder 7B 4-bitM5 Max 48GB121.8 t/sPrompt processing (prefill) 3362.9 tokens/s (1)one generation report, context not statedllama.cpp106.0 t/sPrompt processing (prefill) 2901.3 tokens/s (1)one generation report, context not stated
Qwen3 0.6B 4-bitM5 Max 48GB570.6 t/sPrompt processing (prefill) 22693.8 tokens/s (1)one generation report, context not statedllama.cpp457.1 t/sPrompt processing (prefill) 23288.5 tokens/s (1)one generation report, context not stated
Qwen3 1.7B 4-bitM5 Max 48GB366.0 t/sPrompt processing (prefill) 12362.2 tokens/s (1)one generation report, context not statedllama.cpp288.6 t/sPrompt processing (prefill) 11493.0 tokens/s (1)one generation report, context not stated
Qwen3 14B 4-bitM5 Max 48GB62.6 t/sPrompt processing (prefill) 1738.6 tokens/s (1)one generation report, context not statedllama.cpp57.4 t/sPrompt processing (prefill) 1584.3 tokens/s (1)one generation report, context not stated
Qwen3 32B 4-bitM5 Max 48GB28.4 t/sPrompt processing (prefill) 730.9 tokens/s (1)one generation report, context not statedllama.cpp26.4 t/sPrompt processing (prefill) 667.0 tokens/s (1)one generation report, context not stated
Qwen3 4B 4-bitM5 Max 48GB186.0 t/sPrompt processing (prefill) 5505.7 tokens/s (1)one generation report, context not statedllama.cpp159.7 t/sPrompt processing (prefill) 4972.7 tokens/s (1)one generation report, context not stated
Qwen3 8B 4-bitM5 Max 48GB110.6 t/sPrompt processing (prefill) 3150.6 tokens/s (1)one generation report, context not statedllama.cpp97.7 t/sPrompt processing (prefill) 2744.7 tokens/s (1)one generation report, context not stated
Qwen3.6 35B · 3B active 4-bitM5 Max 48GB151.1 t/sPrompt processing (prefill) 3333.4 tokens/s (1)one generation report, context not statedllama.cpp124.3 t/sPrompt processing (prefill) 3342.7 tokens/s (1)one generation report, context not stated

Top models on MLX

Frequently asked

Is MLX faster than other engines?

llamaperf has 12 matched pairs of MLX and other-engine runs on the same card, model size and bit class, but none is comparable enough to say which engine is faster: the sides have too few reports or were run at different context lengths. A pair counts toward a direction only when each side has at least 3 generation reports with a stated context, and the two sides' contexts overlap. The measured figures and their conditions are in the table on this page.

Can I run MLX on Windows or Linux?

MLX is built for Apple Silicon. It also has a CUDA backend for Linux, but the community's MLX model conversions and tools are made for Macs.

What quants does MLX use?

MLX has its own quantization format. Community 4-bit conversions are the most common, and 8-bit versions are widely available for higher quality.