RTX 5090 vs M3 Ultra
Signed, community-submitted decode tok/s, prefill, and TTFT for RTX 5090 vs M3 Ultra — every number links to the run it came from.
The M3 Ultra's measured strength is capacity; the RTX 5090's is decode speed on models that fit in 32GB. On capacity, the 96GB M3 Ultra ran Llama-3.3-70B 4-bit at 16.8 tok/s with MLX (r_sx3a4y9n-m4), a model that doesn't fit in the RTX 5090's 32GB of VRAM. That capacity point holds whatever the runtime. The RTX 5090 decoded gpt-oss-20b at 318.4 tok/s with llama.cpp (quant not recorded, r_b9ul-vxh9sc); separately, the M3 Ultra decoded gpt-oss-20b at 152.7 tok/s with MLX and an MXFP4 conversion (r_3ijun8ltjnb). Those two speeds aren't directly comparable: the runtime and the 4-bit format differ, so this isn't a matched-runtime comparison. We haven't yet measured llama.cpp on the Mac.
How to read these results
15 models were measured on both RTX 5090 and M3 Ultra, but not like-for-like — the runtime, quant or model size differs between the two sides, so none of those rows is a head-to-head comparison. They are listed separately below with the reason for each. A matched run (same model, size, quant and runtime) on both sides would turn this into a direct comparison.
512 GB is the historical maximum announced in 2025. Apple's model-specific support page checked September 7, 2026 lists 96 GB configurable to 256 GB. Check the actual machine: a family ceiling is not installed memory, current availability or a measured configuration. 2025 launch specification · Model-specific specification
View M3 Ultra page →Not a like-for-like pair
These have data on both sides, but the model size, quant or runtime differs, so they are not a head-to-head and are left out of the comparison above.
| Model | RTX 5090 decode | M3 Ultra decode | Why it isn't matched | Runs |
|---|---|---|---|---|
| mlx-community/stable-code-instruct-3b-4bit | 341.9tok/s llama.cpp · quant unreported | 192.5tok/s mlx · quant unreported | quant unreported; runtime llama.cpp vs mlx | r_q9f15lz6831 · r_y2_5y8oo97d |
| mlx-community/gpt-oss-20b-MXFP4-Q4 | 324.2tok/s llama.cpp · Q4_K_M | 152.7tok/s mlx · quant unreported | quant Q4_K_M vs Q4; runtime llama.cpp vs mlx | r_dwp5fgdapmw · r_3ijun8ltjnb |
| mlx-community/Qwen3-Coder-30B-A3B-Instruct-4bit | 304.9tok/s llama.cpp · Q4_K_M | 112.2tok/s mlx · quant unreported | quant Q4_K_M vs 4BIT; runtime llama.cpp vs mlx | r_vsype4pm1ko · r_fpsca03u2o_ |
| mlx-community/Qwen2.5-Coder-7B-Instruct-4bit | 255.3tok/s llama.cpp · quant unreported | 138.6tok/s mlx · quant unreported | quant unreported; runtime llama.cpp vs mlx | r_2b9o6y_49mi · r_uoehjq0nvc0 |
| mlx-community-Qwen2.5-7B-Instruct-4bit | 246.7tok/s llama.cpp · quant unreported | 139.6tok/s mlx · 4bit · 7B | size unreported vs 7B; quant unreported; runtime llama.cpp vs mlx | r_3yn-4321hp- · r_5r6rhiynenc |
| mlx-community/Llama-3.1-8B-Instruct-4bit | 232.2tok/s llama.cpp · quant unreported | 130.2tok/s mlx · quant unreported | quant unreported; runtime llama.cpp vs mlx | r_kfrkg-vn376 · r_v2pbc0rq2l4 |
| mlx-community/Yi-Coder-9B-Chat-4bit | 199.3tok/s llama.cpp · quant unreported | 103.5tok/s mlx · quant unreported | quant unreported; runtime llama.cpp vs mlx | r_u4iojm6-ekg · r_3hvui9a1yuc |
| mlx-community/gemma-2-9b-it-4bit | 152.7tok/s llama.cpp · quant unreported | 89.45tok/s mlx · quant unreported | quant unreported; runtime llama.cpp vs mlx | r__b_bzmmab_8 · r_iz137eqvuzy |
| mlx-community/phi-4-4bit | 140.9tok/s llama.cpp · quant unreported | 74.37tok/s mlx · quant unreported | quant unreported; runtime llama.cpp vs mlx | r_e-k4aea8ipr · r_sqzp-0rdez- |
| mlx-community/Qwen2.5-Coder-14B-Instruct-4bit | 140.0tok/s llama.cpp · quant unreported | 70.51tok/s mlx · quant unreported | quant unreported; runtime llama.cpp vs mlx | r_opuj21f13-_ · r_l36cijqxq4t |
| mlx-community-Qwen2.5-14B-Instruct-4bit | 133.3tok/s llama.cpp · quant unreported | 70.85tok/s mlx · 4bit · 14B | size unreported vs 14B; quant unreported; runtime llama.cpp vs mlx | r_tj9bu7gvnvh · r_v4bq1sviz4o |
| mlx-community/Codestral-22B-v0.1-4bit | 93.72tok/s llama.cpp · quant unreported | 47.49tok/s mlx · quant unreported | quant unreported; runtime llama.cpp vs mlx | r_4q040m4scic · r_79dvtag5fd_ |
| mlx-community-Qwen2.5-32B-Instruct-4bit | 71.90tok/s llama.cpp · quant unreported | 34.60tok/s mlx · 4bit · 32B | size unreported vs 32B; quant unreported; runtime llama.cpp vs mlx | r_twfs86tf_xf · r_njgxtgyym1e |
| mlx-community/Qwen2.5-Coder-32B-Instruct-4bit | 71.91tok/s llama.cpp · quant unreported | 34.48tok/s mlx · quant unreported | quant unreported; runtime llama.cpp vs mlx | r_nkbs6d3-d21 · r_721b4bls_oq |
| mlx-community/Qwen3-32B-4bit | 69.83tok/s llama.cpp · Q4_K_M | 34.41tok/s mlx · quant unreported | quant Q4_K_M vs 4BIT; runtime llama.cpp vs mlx | r_vhbqyt1f_xr · r_anmmc80-aoq |
See also: RTX 5090 benchmarks · M3 Ultra benchmarks · All hardware · All models · Methodology
Request the missing runs
No measured run yet for these pairs. Vote for the one you want; the most-requested runs go first. See all requests.
We never sell or share your email. Privacy