Two workstations facing each other across a shared desk of instruments
One model family, two owned deployments. The comparison is a field report, not a lab result—and it says so.

§1What is matched, and what is not

This is a comparison of two real deployments I already published in full—deep dive 35 for the RTX 5090 and deep dive 37 for the M4 Max. It is not a controlled benchmark, and pretending otherwise would be the exact sin those two notes were written against. So the alignment table comes first:

DimensionRTX 5090M4 MaxComparable?
Target modelQwen 3.8 27B · stockQwen 3.8 27B · community 4-bit derivativesFamily yes · weights no
Weight precisionNVFP4 (4-bit)MLX affine 4-bitRoughly
DrafterDFlash 2 (SGLang lane)DFlash 2 (MLX lane)Same family
RuntimevLLM / SGLangoMLXNo
KV cacheFP8Runtime defaultNo
Bench context32,768 configured131,072 configured · ~2,150-token promptNo
Concurrency11Yes
Decode metricMatched-run throughputcompletion ÷ (wall − TTFT), 3-run meansApproximately

Two rows deserve emphasis. The Mac’s weights are community derivatives, and dive 37 measured that the finetuning itself costs drafter acceptance—so the Mac numbers carry a handicap the 5090’s stock checkpoint does not. And even the acceptance metrics differ by runtime: SGLang reports mean accepted length (2.95 tokens per cycle at best), oMLX reports an acceptance rate (66–82%). They describe the same mechanism and cannot be laid in one column honestly.

§2Decode: a 5× gap that speculation shrinks to 3

LaneRTX 5090 tok/sM4 Max tok/sGap
No speculation (baseline)84.516.75.1×
Native MTP100.8 (+19%)22.9 (+24%)4.4×
DFlash 2 · greedy / card lane139.7 (+65%)35.5 (+113%)3.9×
Best drafted lane each139.747.2 (+183%, thinking on)3.0×

Three readings:

§3Prefill: where the machines actually live apart

Decode gaps make the headlines; prefill decides what the machine is for. The 5090’s tuned prefill runs at 9,081 tok/s. The Mac’s logged prefill phase on the same model family works out to roughly 196 tok/s—about 46× slower. That single number redraws the whole map:

THE PHASE RULE

Quote one number for “how much faster is the GPU” and you are already wrong. It is ~46× reading, ~5× writing, ~3× writing with a drafter, and ~1× re-reading what is cached.

§4Memory: opposite constraints, opposite failure modes

That asymmetry is the honest answer to “which should I buy.” The question is not which machine is faster; it is which constraint your work keeps hitting: window size, or reading speed.

§5What runs where, in practice

Job shapeMachineWhy
Long inputs: repos, document sets, agent transcriptsRTX 5090Prefill is the bottleneck and it is 46× ahead
Sustained agent duty behind an endpointRTX 5090Always-on, tunneled, tested at depth in dive 38
Private second opinions on short materialM4 MaxShort prompts hide the prefill gap; decode is usable at 35–47 tok/s
Offline, travel, and outage fallbackM4 MaxThe whole stack lives on the laptop
Stable-context chat that grows by appendingEitherBoth prefix caches refund ~90% of the read
Very large windows held in memory for cheap re-readsM4 Max128 GB holds what the 32 GB card must page around

Honest limitations, so this table is not over-read: every number is concurrency 1; the weight builds differ (§1); power, thermals, noise, and cost-per-token remain unmeasured on both sides—still owed from the lab plan; and each machine’s figures are its own runtime’s best tuned configuration, so this compares two well-tuned deployments, not two chips.

The exact receipts

FIELD COMPARISON · SOURCES · 26 AUG 2026

Machine A
RTX 5090 32 GB · Qwen 3.8 27B NVFP4 · vLLM / SGLang · measured in deep dive 35
Machine B
M4 Max 128 GB · Qwen 3.8 27B 4-bit derivatives · oMLX · measured in deep dive 37
Shared
Same target family · same DFlash 2 drafter family · concurrency 1 · 4-bit weights
Headline gaps
Prefill ~46× · baseline decode 5.1× · best drafted lanes 3.0× · warm cache ~1×
Not compared
Thinking-lane rates (misleading per dive 35) · acceptance metrics (different definitions) · power and noise (unmeasured)
Decision
Keep both — route by phase, not by loyalty

The compact rule

  • There is no single “Mac vs GPU” multiplier—phases have multipliers: ~46× prefill, ~5× decode, ~3× drafted, ~1× cached.
  • Native MTP gains are model-bound (+19–24% on both machines); external-drafter gains are hardware-bound (1.65× vs up to 2.8×).
  • Speculation is the slow machine’s best friend: each accepted draft refunds a more expensive token.
  • The GPU’s constraint is memory; the Mac’s constraint is reading speed. Buy against the constraint your work actually hits.
  • Prefix caching is the great equalizer—90% TTFT refunds on both—so architecture your prompts for reuse.
  • Never lay two runtimes’ metrics in one column without checking their definitions first.

Primary sources