
DSpine on an M5 Ultra: Qwen3.8-27B from 43 to 134 tok/s
I benchmarked DSpine speculative decoding on a Mac Studio M5 Ultra. Qwen3.8-27B goes from 43 to 134 tok/s on code with a 1.7 GB draft. Full idle numbers.
Benchmarks
Nine model builds and four runtimes through the same tests: speed, long context, quality and real agent tasks. The winner for my agent: Qwen3.8 Flash Next at 2.75 bits on sushi.

Same three requests for each model: a 600-word answer in French (3 runs, median shown), a 42K-token code dump with one fact hidden in the middle, and 8 tool-calling cases. Every model found the hidden fact.
The 27B run came from the server's prompt cache, so its reading speed isn't a real measurement and is left out. Tool calls: all four passed 8 of 8 in these runs. Download every number on this page (JSON).
Four prompt sizes from 1K to 128K tokens, each made unique so no cache helps, 2 runs per size. The 2.75-bit build with MTP barely slows down: it loses 3% of its writing speed between 1K and 128K. The 4-bit build reads prompts fastest but needs a lot more memory.
| 1K | 16K | 64K | 128K | |
|---|---|---|---|---|
| Flash Next 2.75 bpw, MTP · sushi | 98.5 | 100.7 | 91.8 | 95.4 |
| Flash Next 2.75 bpw, DFlash · sushi | 95.3 | 88.7 | 86.9 | 83.7 |
| Flash Next 4 bpw, MTP · sushi | 103.1 | 103.2 | 99.6 | 90.9 |
| Flash Next 3.3 bpw, MTP · mlx-serve | 99.2 | 93.3 | 82.5 | 78.8 |
| DeepSeek V4.1 Flash 1.75 bpw · sushi | 38.8 | 39.2 | 39.2 | 38.7 |
| 1K | 16K | 64K | 128K | |
|---|---|---|---|---|
| Flash Next 2.75 bpw, MTP · sushi | 1,652 | 2,372 | 2,297 | 2,252 |
| Flash Next 2.75 bpw, DFlash · sushi | 1,649 | 2,312 | 2,264 | 2,192 |
| Flash Next 4 bpw, MTP · sushi | 1,610 | 3,401 | 3,237 | 3,150 |
| Flash Next 3.3 bpw, MTP · mlx-serve | 563 | 1,831 | 2,128 | 2,046 |
| DeepSeek V4.1 Flash 1.75 bpw · sushi | 216 | 668 | 663 | 646 |
Writing code is faster than prose on every build (100–145 tokens/s), because code is easier for the MTP head to guess. DeepSeek V4.1 Flash streams its experts from the SSD, which is why it stays near 40.
Tool calls and auto-checked answers were repeated 4 times. Code runs against hidden tests, maths answers are matched against a key, and the long-context test hides 5 notes in a 199K-token prompt, one of them a later correction of another.
| Build | Tool calls | Checked answers | Code, hidden tests | Maths | Recall at 199K | French grammar | French fixes |
|---|---|---|---|---|---|---|---|
| Flash Next 2.75 bpwsushi | 29/32 | 16/16 | 54/54 | 48/48 | 12/12 | 28/30 | 8/8 |
| Flash Next 4 bpwsushi | 30/32 | 16/16 | 54/54 | 48/48 | 12/12 | 27/30 | 8/8 |
| Flash Next 3.3 bpwmlx-serve | 32/32 | 16/16 | 54/54 | 47/48 | 12/12 | 26/30 | 8/8 |
| DeepSeek V4.1 Flash 1.75 bpwsushi | 27/32 | 14/16 | – | – | – | – | – |
| 27B fine-tune "Turbo 735"llama.cpp, 4 bit | – | – | 36/36 | 31/32 | – | 28/30 | 5/8 |
| 27B fine-tune "Jumbo 747"llama.cpp, 4 bit | – | – | 35/36 | 32/32 | – | 27/30 | 4/8 |
Bold means a perfect score. The 3.3-bit build on mlx-serve was the only one with 32/32 tool calls, so on tools my pick is not the best. The two community 27B fine-tunes ran a shorter code and maths set (2 samples instead of 3): strong there, but they fixed only half of the French sentences.
Benchmarks are one thing. These are two jobs I handed to Hermes Agent with the local model in charge, from one prompt, with no help.
A watch shop in plain HTML, CSS and JavaScript: catalogue, filters, cart, checkout, responsive, accessible. Up to 150 steps, one hour. Graded on a 100-point rubric.
| STQ 2.75 bpw sushi | iQ 3.3 bpw mlx-serve | |
|---|---|---|
| Total, out of 100 | 96 | 97 |
| Features, /40 | 40 | 40 |
| Mobile, /25 | 25 | 24 |
| Accessibility, /15 | 15 | 15 |
| Design, /20 | 16 | 18 |
| Time to build | 11.6 min | 20.4 min |
Both scored 100 on Lighthouse mobile accessibility, best practices and SEO. The 2.75-bit build finished in about half the time.
A 6-page insurance form, 6 values to enter, and a handwritten signature to cut out of a screenshot with a real transparent background and place in 3 boxes. 2 runs per build.
8 of 8 passed the automatic check. The scorer only checks values, image placement and transparency, not how good the signature looks.
Most of what my agent writes is in French, so I graded 12 everyday writing tasks with the two finalists shuffled under neutral labels. Result: 98 for the 2.75-bit build against 97.5 for the 3.3-bit build, out of 120. The 2.75-bit build won 7 tasks, lost 3 and tied 2. A tie, honestly.
| Task | 2.75 bpw · sushi | 3.3 bpw · mlx-serve |
|---|---|---|
| Chat message about a backup | 9 | 8.5 |
| Formal letter to an administration | 7 | 7 |
| Explain something to a beginner | 7 | 9 |
| Summarise server logs | 9 | 8 |
| Formal rewrite | 9 | 8 |
| Technical translation | 9 | 9 |
| Apology to a customer | 8 | 7.5 |
| Daily briefing | 7 | 8.5 |
| Social media post | 8 | 9 |
| Steps for an elderly person | 8.5 | 7.5 |
| Reply to a complaint | 7.5 | 7 |
| Short opinion piece | 9 | 8.5 |
Scores out of 10, the winner of each task in bold. One grader, one sample per task.
Same model, same tests, only the sampling temperature changed. 0.6 matched or beat 1.0 everywhere, so it's my default now.
| Test | T = 0.6 | T = 1.0 |
|---|---|---|
| Tool calls, 4 runs | 29/32 | 28/32 |
| Harder code tasks | 18/18 | 16/18 |
| Maths | 48/48 | 48/48 |
Not measured by me yet: these are estimates from each model's published config, at 4-bit with an 8K context.
| Model | Parameters | Memory, 4 bit | Smallest Mac | Downloads, 30 days |
|---|---|---|---|---|
| Qwen3.8 27B | 27.8B | 19 GB | 32 GB | 7.5M |
| Gemma 4 31B | 31.3B | 22 GB | 32 GB | 7.1M |
| gpt-oss 20B | 20.9B | 14 GB | 24 GB | 5.8M |
| Gemma 4 26B-A4B | 25.8B | 17 GB | 24 GB | 5.5M |
| Qwen3.6 35B-A3B | 36.0B | 23 GB | 32 GB | 4.2M |
| Qwen3.8 Flash Next | 180B | 111 GB | 192 GB | 3.5M |
| gpt-oss 120B | 117B | 73 GB | 128 GB | 2.4M |
| GLM-5.3 | 753B | 462 GB | Over 256 GB | 2.0M |
Data from Hugging Face, 9 Nov 2026. All models

I benchmarked DSpine speculative decoding on a Mac Studio M5 Ultra. Qwen3.8-27B goes from 43 to 134 tok/s on code with a 1.7 GB draft. Full idle numbers.
Photos via Wikimedia Commons:Yasu (CC BY-SA 3.0).