Repository navigation
Description
Reproduction status: Measured locally
What was measured
Whether the 0.2.7 residency-biased routing (STRATA_ROUTE_PRIOR, on by itself only for cards of 13 GiB or less) pays on a 16 GB card, and what it costs in quality. Also 0.1.50 vs 0.1.52 at the same settings (the release notes ask for RTX 40 data).
Hardware: RTX 4090 Laptop GPU 16 GB (sm_89, PCIe 4.0 x16, driver 616.56, WDDM; desktop on the iGPU, 0 MiB used before load), i9-13900HX (8P+16E, no AVX-512), 64 GB DDR5 (48 GB + 16 GB, running at 4800 MT/s), NVMe, Windows 11 build 26300, Legion Performance mode, on AC.
Software: source checkout at v0.2.6 + the prebuilt Windows CUDA 13 engines 0.1.50 and 0.1.52 (v0.2.7 release, checksums verified). ISTA-DASLab Qwen3.8-Flash-Next IQ2_XS and IQ3_XXS; SC117 abliterated IQ3_S (RAM budget 28 GiB). Setup's configs: --max-context 262144 (IQ3_S 131072), --kv int8 --kv-resident 32768, --spec 4 --spec-min-p 0.5, MTP with the en draft vocabulary, --vram-reserve-mib 1280, 15 pool workers, text only (no --vision) unless noted. Windows large pages were refused (error 1314) in every run.
Speed method: one server per arm, started fresh, port 8080. Fresh word-list prompts made from docs/*.md (unique prefix, no cache reuse), temperature 0, thinking off, 512 new tokens; numbers are the engine's own generated in ... (tok/s) line. Each arm = one run of 2K, 2K, 32K, 128K (IQ3_S: 120K). Not interleaved pairs. Identical arms repeated later differed by up to ~18% at 2K and ~7% at 128K, so read single differences below ~10% as noise.
Quality method: tools/quant_quality.py run (teacher-forced, data/quant_quality/v1, 4,995 positions) with --env STRATA_ROUTE_PRIOR=X and --gpu-experts set to the cache size the real server gets (IQ2_XS 6100, IQ3_XXS 4700). Reference: IQ3_XXS with the prior off and --gpu-experts 1500 (no Q8_0 on this PC). So the KL below includes the GPU/CPU rounding difference, and the reference is a quant, not Q8_0.
Decode tok/s (2K / 2K / 32K / 128K)
| Arm | Engine | Prior | 2K | 2K | 32K | 128K | Decode hit % (32K) |
|---|---|---|---|---|---|---|---|
| IQ2_XS | 0.1.50 | off | 80.6 | 89.4 | 77.5 | 68.0 | 88.4 |
| IQ2_XS (repeat, end of run) | 0.1.50 | off | 84.2 | 92.1 | 89.6 | 75.4 | 88.7 |
| IQ2_XS | 0.1.52 | off | 73.0 | 84.9 | 74.3 | 76.2 | 88.7 |
| IQ2_XS (repeat) | 0.1.52 | off | 87.7 | 98.0 | 86.2 | 78.5 | 88.9 |
| IQ2_XS | 0.1.52 | 0.5 | 113.0 | 115.3 | 105.1 | 95.2 | 95.5 |
| IQ2_XS | 0.1.52 | 1.0 | 117.9 | 125.5 | 108.7 | 103.5 | 98.3 |
| IQ2_XS | 0.1.52 | 1.25 | 119.9 | 124.4 | 118.8 | 105.3 | 98.8 |
| IQ2_XS (4 arms, same setting) | 0.1.52 | 1.5 | 115-149 | 120-148 | 108-129 | 100-110 | 99.3-99.4 |
| IQ3_XXS | 0.1.50 | off | 60.0 | 76.1 | 67.7 | 68.4 | 82.6 |
| IQ3_XXS | 0.1.52 | 1.0 | 94.7 | 110.8 | 101.3 | 87.9 | 96.1 |
| IQ3_XXS | 0.1.52 | 1.5 | 112.6 | 111.4 | 115.0 | 101.5 | 98.3 |
IQ3_XXS with --vision (GPU encoder) |
0.1.52 | 1.0 | 96.4 | 103.5 | 92.8 | 80.3 | 95.3 |
| SC117 IQ3_S, 28 GiB RAM budget | 0.1.50 | off | 41.3 | 44.6 | 43.0 | 32.2 (120K) | 79.6 |
| SC117 IQ3_S, 28 GiB RAM budget | 0.1.52 | 1.0 | 57.0 | 69.6 | 66.7 | 50.9 (120K) | - |
| SC117 IQ3_S, 28 GiB RAM budget | 0.1.52 | 1.5 | 84.6 | 92.0 | 83.3 | 77.3 (120K) | 97.1 |
| SC117 IQ3_S, all experts in RAM (2.55 GiB short warning) | 0.1.52 | 1.5 | 89.6 | 99.4 | 95.6 | 85.7 (120K) | 97.2 |
Prompt reading was the same with and without the prior (~2,400-2,750 tok/s at 128K; IQ3_S with the RAM budget ~1,050-1,340, all in RAM 2,417).
At ~255K tokens (one 255,150-token prompt, 512 new tokens, then a 128-token follow-up on the same chat):
| Model | Engine / prior | Prompt tok/s | Decode tok/s | Follow-up decode | Hit % |
|---|---|---|---|---|---|
| IQ2_XS | 0.1.50 / off | 2,440 | 66.5 | 67.6 | 89.9 |
| IQ2_XS | 0.1.52 / 0.5 | 2,475 | 82.1 | 69.9 | 95.7 |
| IQ3_XXS | 0.1.50 / off | 2,421 | 55.5 | 49.2 | 86.6 |
| IQ3_XXS | 0.1.52 / 1.0 | 2,487 | 79.9 | 73.2 | 96.5 |
Tried and no consistent gain here: 23 or 7 (+--pool-affinity p-cores) pool workers, --kv-resident 16384. Raising the engine to high priority / no EcoQoS failed (OpenProcess access denied) so it was not tested.
Quality (teacher-forced, vs IQ3_XXS prior off)
| Run | Top-1 | Mean KL | KL p99 | PPL (ref 4.145) |
|---|---|---|---|---|
| IQ2_XS prior off | 82.22% | 0.248 | 3.07 | 4.532 |
| IQ2_XS prior 0.5 | 82.48% | 0.263 | 3.23 | 4.602 |
| IQ2_XS prior 1.0 | 80.70% | 0.301 | 3.52 | 4.780 |
| IQ2_XS prior 1.5 | 77.42% | 0.368 | 3.61 | 4.959 |
| IQ3_XXS prior 1.0 | 86.07% | 0.164 | 2.28 | 4.434 |
| IQ3_XXS prior 1.5 | 82.14% | 0.270 | 3.15 | 4.649 |
IQ2_XS prior 0.5 against IQ2_XS prior off directly: top-1 91.15%, KL 0.074.
Reading
- On this 16 GB card the prior lifts the decode hit rate from ~88% to 95-99%. Decode at 2K-128K against the prior-off runs: IQ2_XS +28-33% at 0.5 and +40-52% at 1.5; IQ3_XXS +29-51% at 1.0. At 255K: IQ2_XS +23% (0.5), IQ3_XXS +44% (1.0).
- 1.5 costs clearly more here than the 12 GB check suggests: IQ2_XS PPL 4.53 -> 4.96, IQ3_XXS at 1.5 lands at plain IQ2_XS quality. 1.0 on IQ3_XXS stays better than plain IQ2_XS (KL 0.164 vs 0.248) while being faster than plain IQ2_XS at every length.
- So a lower default for 13-16 GiB cards (for example 0.5-1.0) might be worth a look on your side; one PC and one run per arm is not enough to set it.
- 0.1.50 vs 0.1.52 with the prior off (sm_89 MMVQ-IL tables on by default in 0.1.52): no difference above the noise here (two runs each).
Limits
One PC, single runs per arm (not interleaved pairs), temperature 0 summaries of docs text; no agent task suite or needle test for the prior; KL reference is IQ3_XXS, not Q8_0; RAM is a mixed 48+16 GB pair at 4800 MT/s.
Raw data (per-request JSON from the benchmark, the quant_quality compare output and per-run engine arguments, the run plan, sanitized configs and nvidia-smi/RAM diagnostics) is kept and can be shared on request.
Activity
udqe commentedon Oct 28, 2026
Niko1221 commentedon Oct 29, 2026
Thank you for measuring this and writing it up. We are building a Strata website with a page for community benchmarks, and results like these will be added there when it launches, so we are closing this here. If your numbers change with a new version, you are welcome to post them again.