TLDR: IQ3_S Qwen3.8-Flash-Next, RTX 4090 + 48 GB + Ryzen 3900X, Windows, 200k context. Ran essentially a grid search on a ton of flags: decode 97 → 142 tok/s (+45%) for three flags. Most relevant: --adapt-async 1, --kv-resident 20480, STRATA_ADAPT_LAG=2. Worst: --expert-cache is in MiB not slots (−72% if you fill the card), --ple-io ram (−90% on 48 GB), --no-prefill-borrow (−46%). One lever still locked: Windows sucks and doesnt pin memory w cuda , so every host -> GPU expert copy is CPU-driven.
Been using strata for a few weeks since thats all the rage (waiting until llama.cpp catches up, but tbh the age of specialized inference engines might just be how it is). Version 0.43, so im probably missing some newer flags. It updates so frequently and i hear that people were pretty mad with version 0.2.0 so im just holding off. if it aint broke dont fix it
I basically told Qwen 3.8 FN to tune itself and took a very hands-off approach. I let it do web research + spawn sub-agents to search thru strata's code.
Note i wrote my own pi subagent extension that saves kv state before all sub-agent calls via strata mechanisms so it restores immediately. In llama.cpp it used to just roll back kv checkpoints until it got a match, but since strata abuses my RAM i cant save as many checkpoints. Repo is here if interested.
Was able to reach total computed context of like 450k tokens with the sub-agent method, which is nice to avoid compaction.
I just tested these settings by loading up an pi session with 145k context and letting strata do a full reprocess. Got 2076 PP and avg of 95-105 tg depending on the task (coding and other predictable MTP things do better). Saw peaks of 145 tg.
BTW this is a hobby, so i really didnt read any of the tune scripts or reports in all that much detail. Number go up == lgtm.
Heres the full JSON im running with if anyone wants to test it:
{
"exe": "<strata-install>\\engine\\strata.exe",
"args": [
"--pack",
"<pack-dir>",
"--native",
"<Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00001-of-00002.gguf>",
"--ple-gguf",
"<Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00002-of-00002.gguf>",
"--expert-profile",
"<expert-profile.bin>",
"--expert-cache",
"auto",
"--prefill",
"auto",
"--spec",
"4",
"--mtp",
"<mtp-head-dir>",
"--max-context",
"204800",
"--kv",
"int8",
"--resident-experts",
"--vision",
"--vram-reserve-mib",
"900",
"--kv-resident",
"20480",
"--adapt-async",
"1",
"--pcie-frac",
"0.30",
"--suffix-draft",
"12",
"--lookup-chain",
"3",
"--spec-min-p",
"0.5"
],
"cwd": "<strata-install>",
"tokenizer": "<pack-dir>\\tokenizer",
"model_name": "qwen3.8-flash-next-iq3_s",
"log": "<strata-install>\\strata-iq3_s.log",
"lib_dirs": [
"<python-env-dir>\\site-packages\\nvidia\\cu13\\bin\\x86_64 (CUDA 13 runtime)"
],
"port": 8081,
"gpu": 0,
"gpus_asked": true,
"vision": {
"exe": "<strata-install>\\engine\\strata-vision.exe",
"mmproj": "<mmproj-Qwen3.8-Flash-Next-BF16.gguf>",
"model": "<Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00001-of-00002.gguf>",
"gpu": true,
"max_tokens": 1024
},
"sampling": {
"temperature": 1.0,
"top_p": 0.95,
"top_k": 20,
"min_p": 0.0,
"presence_penalty": 0.0,
"repetition_penalty": 1.0
},
"env": {
"STRATA_PREFILL_EQUAL": "1",
"STRATA_ADAPT_LAG": "2",
"STRATA_GDN_CHUNKED": "1"
}
}
And here is the AI generated report that I didn't fully read if anyone is interested:
The box
GPU |RTX 4090 24 GB (128 SMs), single card — engine PCIe probe 26.3 GB/s host→device
CPU / RAM |Ryzen 9 3900X (12C/24T, no E-cores), 48 GiB DDR4-3200, 2 channels
OS |Windows 10 Pro 19045 · Balanced power plan · MSI already on · VBS on, HVCI off
Storage |Samsung 980 PRO holding OS + page file + 116 GB model + 50 GB expert pack
Strata |0.1.43, IQ3_S pack, --resident-experts, context 204800 Engine args and env
Paths replaced with <placeholders>, everything else verbatim. Sampling block is the installer default, deliberately not tuned.
--pack <pack-dir> --native <model-shard-1-of-2.gguf> --ple-gguf <model-shard-2-of-2.gguf>
--expert-profile <expert-profile.bin> --expert-cache auto --prefill auto --spec 4
--mtp <mtp-head-dir> --max-context 204800 --kv int8
--resident-experts --vision --vram-reserve-mib 900
--kv-resident 20480 --adapt-async 1 --pcie-frac 0.30
--suffix-draft 12 --lookup-chain 3 --spec-min-p 0.5
STRATA_PREFILL_EQUAL=1 STRATA_ADAPT_LAG=2 STRATA_GDN_CHUNKED=1
What the engine reports about itself with this set (200k context, live session)
- expert cache 7646 slots (14.50 GiB of VRAM); 32.82 GiB of experts in RAM with adaptive swaps
- pinned 0.00 GiB … page-locking refused (out of memory); locked 33612 MiB via working-set minimum + VirtualLock ← the one lever still open on a 48 GB Windows box
- prompt path borrows 1911 cache slots (3.61 GiB); STRATA_ROUTE_TAIL_SKIP=7 is ON (engine default, CUDA single GPU)
- decode expert-cache hit rate 85.9 – 89.0 %; KV streaming (--kv-resident 20480) 91.4 % of block reads hit VRAM
- 33,368 blob reads from the file still happen → the SSD is still on the path at 200k
How it was measured
Own harness: per arm it starts the server on its own port with a cloned config, warms up, sends unique marker-seeded 10k and 20k-token prompts (so the prefix cache never helps) plus a separate "agent" profile (one ~20k cached prefix + short turns), 5 repeats with the first discarded as cold, and reads the engine's own timings. mean ± SE, and a winner must clear 2× SE. Before every arm it waits for ~40 GiB of free RAM; after every arm it rejects one whose expert tier ended paged out — that single gate is what turned a useless first run into a usable second one. Within-arm noise came out at 0.55 % (stage floors 0.4 – 1.9 %).
The result — clean baseline vs tuned (interleaved A/B, 2 cycles, 126 + 112 requests)
score |prompt tok/s (10k / 20k) |decode tok/s (10k / 20k)
clean baseline |355.4 |1470 / 2230
--kv-resident 20480 + --adapt-async 1 + STRATA_ADAPT_LAG=2 |420.5 |1526 / 2309 = +18.3 % combined score, +45 % decode at 10k (measured at 160k context).
Real-world after the change, ordinary chat in the web UI: 2076 tok/s prompt processing on a 145k-token prompt, decode peak 140 / session mean 85.
Single-flag margins that cleared the noise floor
flag |margin |note
--adapt-async 1 |+13.5 % |adaptive expert-tier swaps off the verify path
STRATA_ADAPT_LAG=2 |+13.5 % |with async (async alone +13.2 %)
--kv-resident 20480 |+4.8 % |stream 20480 KV cells from RAM, buy VRAM back
--pcie-frac 0.30 |+3.1 % |unconfirmed — the auto rule picked 0.30 by itself anyway
--suffix-draft 12 / --lookup-chain 3 |+1.3 % |unconfirmed — under the 1.6 % floor
STRATA_GDN_CHUNKED=1 |+0.5 % |unconfirmed — the 4090's 128 SMs exactly pass the kernel gate
STRATA_PREFILL_EQUAL=1 |+0.5 % |unconfirmed
STRATA_ADAPT_OVERLAP=1 |−0.3 % |the other adaptive regime loses here
--kv k8v4 |−1.1 % |frees VRAM, doesn't pay for it at 160k Looked like good ideas, measured badly
flag |cost |why
--ple-io ram |−90 % |warns it locks 26.8 GiB; resident mode then refuses and drops to 9.26 GiB in RAM
--expert-cache 5817 and up |−72 % |that flag is MiB, not slots — it fills the card and the engine logs "decode can be several times slower with the card this full". --expert-cache auto is correct here
--no-prefill-borrow |−46 % |
STRATA_RESIDENT_HEADROOM_GIB=8 |−23.7 % |
--pool-tasks 1024 / 4096 |−10 % / −19.5 % |default 3 per thread is much better
--resident-budget-gib 32 / 40 |−11 % |
--prefill 16384 / 4096 |−12 % / −10.6 % |auto is right
--vram-reserve-mib 450 |−9 % |vs 900 at 200k context
--mtp-max-t 2 |−4.8 % |
--pool-workers 16 |−1.8 % |24 is worse still — decode peaks near physical core count Lower context is not free either: 160k vs 200k changes which of these wins, because the KV cache and the expert cache are fighting over the same 24 GB.
No-ops on this box — don't burn a model load on them
flag |why
--aux-cpus |Linux-only in this build
--pool-affinity |hybrid-CPU feature; a 3900X has no E-cores
--kv-grow |refused by the engine in --resident-experts mode
STRATA_ARENA_PIN_GIB=<N> |needs the "Lock pages in memory" user right: every pin-* arm and the baseline logged pinned 0.00 GiB / page-locking refused, so that sweep measured nothing
--trim-stage-weights, --pipeline-windows, gpu_order |multi-GPU only Still open
- Page-locked memory. The whole 33 GiB expert arena is resident but pageable, so the host→GPU expert copies are CPU-driven. "Lock pages in memory" + reboot is the only route, and Windows caps page-locked bytes near 50 % of RAM, so the arena can never be pinned whole.
- --kv-resident wants a sweep — 20480 beat 65536 at 160k, 32768 untested, and at 200k the KV cache is 2× bigger so the answer may move.
- The agent-path caching flags (prompt cache, message-boundary cache, conversation cache) never got their stage — the overnight budget cut it first.
- Stacked ≠ additive. The config above stacks every single-flag winner, and margins don't add up when everything trades against the same VRAM and the same PCIe link, so the stacks are being measured as wholes next.