Skip to main content

Metrics

Benchmarked 3 Sept 2026

We compare uzu, MLX, and llama.cpp locally on the same Apple device.

How we measure

Output speed

uzu is the fastest in 12 of 12 models on this device.

tok/sHigher is better
uzu 0.5.25

For uzu, we use Mirai-M, Mirai-L as 4-bit and 8-bit references. For llama.cpp we select the closest quantized checkpoints based on KL divergence as measured by our KL eval tool. For mlx we always use mlx-community checkpoints.

Input speed

uzu is the fastest in 11 of 12 models on this device.

tok/sHigher is better
uzu 0.5.25

For uzu, we use Mirai-M, Mirai-L as 4-bit and 8-bit references. For llama.cpp we select the closest quantized checkpoints based on KL divergence as measured by our KL eval tool. For mlx we always use mlx-community checkpoints.

Resident memory

uzu leads in 12 of 12 models on this device.

GiBLower is better
uzu 0.5.25

For uzu, we use Mirai-M, Mirai-L as 4-bit and 8-bit references. For llama.cpp we select the closest quantized checkpoints based on KL divergence as measured by our KL eval tool. For mlx we always use mlx-community checkpoints.

Quantization quality

Language-model checkpoint size (GB)KL divergence (log scale)MiraiUnsloth / Llama.cppMLXMTPLXGoodMLX 4bitMLX 8bitMTPLX-Optimized-Speed-V2MTPLX-Optimized-QualityQ3_K_SQ3_K_MUD-Q3_K_XLIQ4_XSQ4_0Q4_K_SIQ4_NLUD-Q6_K_XLUD-Q8_K_XL

How we measure

Each configuration is run three times using the same prompt, which is approximately 1,357 input tokens long (the exact number may vary depending on the tokenizer and chat template). The maximum output length is set to 4,096 tokens. Before each iteration, the runner waits until both CPU and GPU temperatures are below 60°C.

uzu is run via its CLI. MLX is run through mlx-lm. llama.cpp is run through llama-cpp-python for autoregressive runs and through the llama.cpp server for speculative decoding runs. All engines use the same sampling parameters where supported, otherwise, they use their respective client defaults.