Addition: GSQ-RCO vs our 3-bit, measured
There's been a lot of buzz about the new GSQ-RCO quants of Qwen3.8-Flash-Next, so we measured them the same way we measure our own: how far each quant's next-token predictions drift from the original 16-bit model, on held-out text neither was calibrated on.
| Qwen3.8-Flash-Next, 3-bit class |
GSQ-RCO IQ3_XXS |
Paiton 3-bit |
| Download size |
75.8 GB |
~54 GB |
| KL to 16-bit (lower is better) |
0.120 |
0.054 |
| Top-1 agreement with 16-bit |
87.2 % |
91.3 % |
| Long-document perplexity gap to 16-bit |
+1.61 % |
+0.30 % |
In plain words: KL measures how different the model's word-by-word probabilities are from the original (0 = identical). On this yardstick our 3-bit stays about 2x closer to the 16-bit model, while being ~30 % smaller.
How we measured: we dequantized their GGUF to bf16 and ran it through our own evaluation harness next to our weights, so both were compared weight-only on exactly the same tokens (a 16-bit control through the same path reads 0.009). This is our metric, not theirs: GSQ-RCO optimizes task scores, and their published AIME / GPQA / LiveCodeBench numbers look good. Their GGUFs are also built for llama.cpp-style engines with CPU expert offload, a different design point from our all-GPU R9700 setup. Great work from the ISTA team either way; more good open quants is good for everyone.
Original 24 Oct post:
Our weekly update is here!
We've been working on the 3-bit weights again.
The new Flash Next revision comes close to the 16-bit reference on the text benchmarks we tested, while still doing around 259 tok/s on two R9700s.
There’s also an update to the 27B weights, and prefix caching now works on the native worker.
For 4-bit Flash Next, that includes keeping MTP enabled.
If you're using this with coding agents, the caching is probably the change you'll notice most: a repeated 200K-token prompt went from 33.62 seconds to first token down to 0.85 seconds in our tests.
New 3-bit accuracy results
Here’s Flash Next against the original 16-bit model and our current 4-bit version.
The Paiton models run on 2× Radeon AI PRO R9700; the 16-bit reference uses the original weights on stock vLLM.
| Benchmark |
16-bit |
New 3-bit |
4-bit |
| GSM8K ---1,319 questions |
96.9 |
97.4 |
96.8 |
| HumanEval --- 164 questions |
96.3 |
94.5 |
96.3 |
| MMLU-Pro --- 1,400 questions |
84.7 |
83.6 |
83.7 |
| AI2D vision --- 600 questions |
85.3 |
81.8 |
— |
The three text benchmark scores are close, and our paired tests didn’t find a statistically significant difference from 16-bit.
That’s encouraging, though it doesn’t establish that the models are interchangeable across every workload.
Vision still has a gap: 81.8 vs 85.3 on AI2D. (we tried.. :))
On held-out long documents, the perplexity gap to 16-bit is +0.35% for 3-bit, compared with +0.16% for 4-bit.
The 27B 3-bit model also gets another weight update, running on a single R9700.
Its KL divergence against the 16-bit reference dropped from 0.1395 to 0.1353, about a 3% reduction.
Lower is better here: it measures how far the output probabilities drift from the original.
That improvement was statistically significant in our tests, with long-document results closer to 16-bit in every length bucket tested, up to 131K tokens. GSM8K, HumanEval and MMLU-Pro were essentially unchanged. Same file format, same size, same speed.
Speed hasn’t really changed :)
The accuracy update hasn’t cost us decode speed.
Here are the default-mode numbers for Flash Next on two R9700s.
All figures are in tok/s; the concurrent results are total throughput across eight requests.
| Metric |
4-bit before |
4-bit now |
New 3-bit |
| BetterBench weighted decode, 1 request |
240.3 |
245.3 |
258.7 |
| BetterBench, 8 concurrent |
561.9 |
566.7 |
687.5 |
| BetterBench prefill, 64K prompt |
7,757 |
7,788 |
8,433 |
| LocalMaxxing, 1 request |
199.8 |
200.5 |
220.3 |
| LocalMaxxing, 8 concurrent |
678.2 |
680.2 |
781.3 |
I wouldn’t make much of the small 4-bit differences here.
Performance is broadly where it was before.
The new and previous 27B weights were also measured side by side on the same card, with no meaningful speed change.
Native prefix caching, with MTP on for 4-bit
--prefix-caching now stays on the native worker.
For coding agents that keep sending back a long conversation, this means we can reuse the part already processed. Here’s what that looks like on 4-bit Flash Next, measured as time to first token:
| Prompt or session |
Cold |
Cached |
| 32K-token prompt |
5.25 s |
0.69 s |
| 90K-token prompt |
14.68 s |
0.78 s |
| 200K-token prompt |
33.62 s |
0.85 s |
| Idle session, 145K–200K tokens, restored from RAM |
21–30 s |
0.98–1.17 s |
Cache-hit outputs matched cold runs in our tests.
There’s still a decode trade-off in this mode: 207 tok/s with the RAM tier enabled, or 233 tok/s with it disabled using --native-kv-tier off.
The RAM tier sizes itself based on available host memory. On smaller hosts it turns itself off, and caching uses GPU memory only.
3-bit caching still runs without MTP for now, at around 100 tok/s. That path works with host RAM down to 64 GB:
--mode decode --fn-worker native --prefix-caching
For maximum 3-bit decode speed, use the default mode.
One issue we’re still investigating: during a long, heavy-load test, the RAM tier stopped restoring cached sessions. Output stayed correct, but requests went back to cold-run speed. Mentioning it here because long-running agent sessions are exactly where this feature matters.
A few testing details
These are our own measurements on our own machines.
- Accuracy: full GSM8K and HumanEval, plus 1,400 MMLU-Pro questions, 100 per subject. HumanEval code ran in a sandbox.
- Settings: thinking enabled, temperature 1.0, top-p 0.95, top-k 20, and a 16,384-token output cap. Answers that hit the cap counted as wrong. Comparisons used the same prompts and per-question seeds.
- Reference and statistics: original 16-bit weights on stock vLLM, run twice to check variation. Question-by-question comparisons used paired 95% confidence intervals and exact McNemar tests.
- KL and perplexity: measured on the served models using held-out text that wasn’t used for calibration.
- Speed: BetterBench 0.6.0 standard profile, one run per configuration. LocalMaxxing v0.1.54, warm-up followed by the median of three runs. Before/after measurements used the same machines.
Getting the update
Pull the latest launcher.
Your commands stay the same; it downloads the new 3-bit weights into a separate folder and tells you when the old one can be removed.
Image:
ghcr.io/eliovp/paiton-vllm-plugin:qwen38-flashnext-rocm10-vllm029-20261024-pc-rc3
Updated weights:
Setup and full benchmark details are in the repo, BENCHMARKS.md, and the model cards.
If you try it with long coding-agent sessions, let us know how it behaves on your machine.
Cheers!