A 27-billion-parameter dense model pushed across three inference stacks and two classes of hardware — Apple M5 Max with speculative decoding, Apple M5 Max with 4-bit quantization, and an NVIDIA DGX Spark with NVFP4. Every run is cold: no prefix cache, fresh prompt, 128 generated tokens.
Each engine runs Qwen 3.6 27B Dense through a distinct serving strategy — speculative drafting, low-bit quantization, and a GPU-tuned server. The hardware, the quant, and the runtime all move the numbers.
Averages are computed over the 1k–128k context range so all three engines share the same baseline.
MTPLX leads generation throughput at every context size — from 70.8 tok/s at 1k down to 26.5 tok/s at 128k. Against vLLM that is a 1.1–2.5× lead, and it holds even at 128k where memory pressure is highest. Multi-token-prediction (MTP) is doing the work: it accepts roughly 8 of every 10 drafted tokens.
vLLM posts the highest prompt-processing speed at every context, peaking at 1,077 tok/s on 4k. More importantly it retains throughput as context grows: at 128k it still prefill-rates 638 tok/s, where the Apple engines fall to ~340–370. That is why its time-to-first-token at 128k is roughly half.
The oQ4 build on the same M5 Max is the most consistent Apple engine: generation holds ~40 tok/s flat from 0.5k to 8k before fading. It beats MTPLX on raw prefill between 16k and 128k, but without speculative decoding it can't match MTPLX on generation, and it can't match vLLM on prefill.
MTPLX scales from 15.6 GB at 0.5k to 44.4 GB at 128k — a 128k-context, 27B model serving on a laptop with 80+ GB to spare. Time-per-output-token climbs from 12 ms to 38 ms over the same range, a clean fingerprint of KV-cache pressure.
Context grows logarithmically from 0.5k to 128k tokens. Each line is one engine; the colored glow marks the leader. Hover any point for exact values.
Concurrent requests (batch 1 → 16) on oMLX and vLLM. Both are servers built to multiplex — throughput per stream rises as the batch fills.
Multi-token-prediction drafts 3 candidate tokens per step and verifies them in one forward pass. High acceptance means most drafted tokens are kept — turning each step into several real tokens of output.
Switch metrics. The best value in each row is marked — highest for throughput, lowest for time-to-first-token.