Measured · 18 October 2026 · 8 lengths twice per build
Qwen3.8-Flash-Next with sushi on the Mac Studio M1 Ultra
sushi 1.2.1 · sushi 1.2.4 · fork cead269c on Mac Studio M1 Ultra
Authors
Machine
Mac Studio M1 Ultra
- SoC
- Apple M1 Ultra, 20 CPU cores, 64 GPU cores
- Memory
- 64 GiB unified memory, up to 58 GiB for the GPU (
iogpu.wired_limit_mb) - OS
- macOS 26.2, on mains power
- Weights
beamster/Qwen3.8-Flash-Next-Sushi-2.6bpw
Three builds of sushi
Two releases and a fork
- 1.2.1
- release, SHA-256
787ceffca035 - 1.2.4
- release, SHA-256
4de05a815b52 - Fork
- 1.2.4 with 11 commits, at
cead269c(chapter 05) - Launch
- the same for all: MTP on, KV cache 8 bit, context 262,144
Protocol
Eight questions about a weather log
- Lengths
- 8 steps from 32,000 to 245,000 tokens, one document per step
- Order
- fork, 1.2.4, 1.2.1, 1.2.1, 1.2.4, fork
- Budget
- 3,072 output tokens, at most 2,048 of them thinking
- Measured
- reading, follow-ups, output and questions without an answer
435tokens/s
sushi 1.2.1prompt processing on the first question
9.4minutes
Reading the whole text once, on the first question
19.2seconds
Reading a follow-up the text is already processed
49.9tokens/s
Output when answering follow-up questions
Out of memory
sushi 1.2.47 of 16 questions without an answer, in both measurements
–
Reading the whole text the first question failed
–
Reading a follow-up runs with errors do not count
–
Output runs with errors do not count
709tokens/s
Fork cead269cprompt processing on the first question
5.8minutes
Reading the whole text once, on the first question
14.6seconds
Reading a follow-up the text is already processed
49.5tokens/s
Output when answering follow-up questions
Mean of both measurements of a build. On the first question about a text sushi reads all of it, on every follow-up only part of it. Chapter 02 shows the lengths in between.
01 · Setup
The same questions to three builds
Three builds of sushi ran on the Mac Studio M1 Ultra with the same weights, the same launch line and the same documents as in the report on Apple M1: release 1.2.1, release 1.2.4 and a fork of 1.2.4 with changes for the M1 Ultra (chapter 05). Each length from 32k to 245k had one document and eight questions; every run got a freshly started server without a disk cache.
Each build ran twice, in the order fork, 1.2.4, 1.2.1, 1.2.1, 1.2.4, fork. If the machine changes over the hours, on average this affects all three alike. The two measurements of a build differ by at most 1.7 % in reading speed, and up to 128k 1.2.1 reads within 0.5 % of its speed in the report on Apple M1.
The GPU had 58 GiB available, 2 GiB more than the default of 56 GiB. With this limit 1.2.1 answered every question at 229k and 245k in the report on Apple M1 as well.
02 · Speed
At 245k the fork reads 1.6 times as fast as 1.2.1
The fork reads 5 % more tokens per second than 1.2.1 at 32k, 23 % more at 128k and 63 % more at 245k. 1.2.4 reads more slowly than 1.2.1 up to 192k, by 29 % at 32k.
The measuring script measures the times on the stream: reading up to the first token, output after it. A run in which a question failed for lack of memory does not count for speed.
03 · Memory
Only the fork answers every question up to 245k
At 229k and 245k 1.2.4 left 21 of 32 questions unanswered across both measurements, 1.2.1 4 in the first measurement at 192k and 229k. The fork answered all 128 questions.
OutOfMemory and ends the answer without text; the next question starts afresh. With 1.2.4 this hit the same lengths in both measurements, with 1.2.1 only the first measurement.All three ran with the same limit of 58 GiB for the GPU. How much memory each build needs at which length is not measured; the series only shows where it was not enough.
04 · Answers
The three builds write different text
Between two measurements of the same build 78 % of the answers are byte-identical, between two builds 27 to 37 %.
With 1.2.1, 47 of 60 answers of both measurements match, with the fork 50 of 64; both measurements of every build always answer the first question about a text the same way. 1.2.1 and the fork, by contrast, give only 16 of 60 identical answers. So the builds do not compute bit for bit the same; the fork changes how intermediate values are rounded (chapter 05).
The fork got 36 and 37 of 64 answers right, 1.2.1 32 and 33, 1.2.4 33 and 32. With one document per length this shows no difference in understanding; the report on Apple M1 measures that with three versions per length.
05 · The fork
Eleven commits on sushi 1.2.4
The fork is public in the branch m1-ultra of holistech/sushi; the comparison with v1.2.4 shows every change at once. What is measured here is the whole fork. How much a single change contributes, this series does not show.
eef8792eCommand buffers: the GPU collects up to 1,000 operations and 1,000 MB before it submits a buffer; on the M1 Max and M1 Ultra.ef4dcb9cAttention while writing: a wider grid for the split attention so that both halves of the Ultra get work.7b57ecf9Measurement switches for breaking down kernel costs; without a set variable they do nothing.cf2e9a36Experts while reading: the matrix multiplication computes only the blocks of eight rows that are in use.9d20a479Command buffers per phase: 250 MB while reading, 1,000 MB while writing; this needs a small patch to MLX.1b5efd2cWeights while reading: from 1,024 rows, unpack first, then multiply.aaa3762bThe same route in f16 instead of bf16.4b34d2e1Sparse attention while reading: up to 4,096 keys via a mask instead of a selection.ef794693Sparse attention beyond that: a dedicated kernel that reads the keys row by row in tiles of eight.dfdcb613Per-layer embeddings (PLE): one parallel pass through the table mapped in from the SSD.cead269cAttention while reading: the kernel stores the keys row by row in the threadgroup's fast memory.
06 · Every figure
Results per length
Mean of both measurements of a build without runs with an unanswered question: reading on the first question in tokens per second, follow-up in seconds, output in tokens per second. The “unanswered” columns count the questions without an answer across both measurements. Every chart in this report is computed from these values.
| Length | Reading 1.2.1 | Reading 1.2.4 | Reading Fork | Follow-up 1.2.1 | Follow-up 1.2.4 | Follow-up Fork |
|---|---|---|---|---|---|---|
| 32k | 622 | 440 | 654 | 12.6 | 12.6 | 9.5 |
| 64k | 610 | 538 | 681 | 11.8 | 11.8 | 9.2 |
| 96k | 605 | 534 | 719 | 11.4 | 11.5 | 8.5 |
| 128k | 600 | 547 | 736 | 10.5 | 10.5 | 7.9 |
| 160k | 587 | 545 | 752 | 9.8 | 9.9 | 7.5 |
| 192k | 557 | 536 | 754 | 8.8 | 9.1 | 6.6 |
| 229k | 458 | – | 720 | 19.7 | – | 14.7 |
| 245k | 435 | – | 709 | 19.2 | – | 14.6 |
| Length | Output 1.2.1 | Output 1.2.4 | Output Fork | unanswered 1.2.1 | unanswered 1.2.4 | unanswered Fork |
|---|---|---|---|---|---|---|
| 32k | 52.5 | 55.5 | 60.4 | 0 | 0 | 0 |
| 64k | 45.6 | 51.2 | 58.9 | 0 | 0 | 0 |
| 96k | 48.9 | 49.1 | 51.4 | 0 | 0 | 0 |
| 128k | 45.6 | 47.4 | 50.5 | 0 | 0 | 0 |
| 160k | 47.6 | 53.1 | 52.8 | 0 | 0 | 0 |
| 192k | 50.2 | 53.9 | 56.0 | 2 | 0 | 0 |
| 229k | 47.5 | – | 58.2 | 2 | 14 | 0 |
| 245k | 49.9 | – | 49.5 | 0 | 7 | 0 |
07 · Limits
What this measurement does not show
One machine. Only the Mac Studio M1 Ultra is measured. How the fork runs on other chips is not measured.
One document per length. That is enough for speed, as the two measurements per build show. It is not enough for understanding: differences in the number of correct answers are not a finding here.
More GPU memory than the default. Every run had 58 GiB for the GPU. Nothing is measured with the default of 56 GiB.
Against the releases, not against current development. The fork builds on 1.2.4. It does not contain what has changed in sushi since 1.2.4.
No causes. Why 1.2.4 reads more slowly than 1.2.1 and runs out of memory at 229k and 245k is not investigated.
One kind of document, one session. How the builds fare with source code or in an agent is not measured here.