hipfire

Qwen3.6-35B-A3B · prefill on the R9700, 0.4.2.1 vs 0.4.3

Prefill tok/s on one Radeon AI PRO R9700 (gfx1201), measured 2026-10-24 in a single timing hold with the three arms interleaved. Each cell is the median of 9 samples: 3 fresh hipfire bench processes with --runs 3. “0.4.2” here is v0.4.2.1 (6b363a56a1ae), the latest 0.4.2 release.

prefill tok/s 0.4.2.1 mq4r 0.4.3 mq4r 0.4.3 mq4rs mq4rs vs 0.4.2.1 mq4r engine only (mq4r) quant only (0.4.3)
pp512 3,292 3,332 11,589 3.52× 1.01× 3.48×
pp1024 3,248 3,607 15,718 4.84× 1.11× 4.36×
pp4096 2,886 3,737 19,828 6.87× 1.29× 5.31×
pp8192 2,488 3,615 20,035 8.05× 1.45× 5.54×
pp16384 1,957 3,561 18,545 9.47× 1.82× 5.21×

Command: hipfire bench <model> --matrix --json --pp 512,1024,4096,8192,16384 --tg 1 --ctx 1 --runs 3 --warmups 1 --spec off, synthetic token ids. The new qwen3.6:35b-a3b-mq4rs quant is where most of the gain comes from (3.5× to 5.5× over the same 0.4.3 engine on the old mq4r file). The 0.4.3 engine alone is 1.0× to 1.8× on mq4r and removes the 0.4.2 long-context falloff (0.4.2.1 loses 41 % from pp512 to pp16384; 0.4.3 on mq4r does not fall off). Source: v0.4.3 release notes, “Prefill perf comparison”.

Read this before comparing columns

Each version ran its default config, and the defaults differ. The 0.4.2.1 → 0.4.3 mq4r column is therefore “what a user gets from upgrading without changing the model file”, not a single-variable engine A/B.

default0.4.2.1 mq4r0.4.3 mq4r0.4.3 mq4rs
KV (kv_mode=auto)q8 K and Vfp8fp8
prefill chunk512 rows8192 rows8192 rows
MoE prefill routeper-expert buffersper-expert bufferssymmetric IU4 MoE (40 layers admitted by capability)

The symmetric IU4 MoE prefill route is only admitted on the mq4rs file. Fast mq4rs prefill is gfx1201 only; on other GPUs the mq4rs file needs HIPFIRE_MOE_SYM_IU4=0 (about 5× slower prefill). mq4rs file: hipfire-models/qwen3.6-35b-a3b, 18.7 GB, sha256 8806a742d558ebe43256010096cd82cfac3a20be5218ad56a3f74267db001894; the mq4r arms used the registry-pinned file, sha256 4685c140c46b1a6f31a0fd9053bf09d5faf1d2529d715b84794249b66cde0428. WikiText-2 KLD, same harness: 0.129 for mq4rs against 0.206 for mq4r. Decode was not compared here (--tg 1).

Late prefill steps on mq4rs (pp16000)

The last lever steps of the cycle, on qwen3.6-35b-a3b-d53.mq4rs only and not part of the table above: pp16000 (two chunks, 8192 + 7808 rows), 3 fresh processes per arm, three separate same-session A/Bs.

stepbeforeafterchange
A/B 1 16,084.5 tok/s 16,694.8 tok/s +3.8 %
A/B 2 16,670.6 tok/s 18,021.6 tok/s +8.1 %
A/B 3 18,341.9 tok/s 18,587.9 tok/s +1.3 %

The +15.6 % total is the sum of the three, not a single A/B; the card runs a few percent slower on some days than others. The routes are exact-gfx1201 defaults, byte-identical to the code they replace: KLD is unchanged on mq4rs (the four-corpus KLD sequence is byte-equal at every step). That does not hold for the asymmetric mq4r file: its WikiText-2 prefill KLD moves 0.2082 → 0.2115 (Δ +0.0034, CI95 [+0.0009, +0.0058]), inside the quality bar. Source: v0.4.3 release notes, “Detail” and Known issues.

Qwen3.6-35B-A3B mq4rs · decode on the R9700, 0.4.3 → 0.4.3.1

The symmetric-expert A3B file used to decode on the HIP graph. In 0.4.3.1 it takes the automatic PM4 replay route on an exact gfx1201 card (one GPU, no drafter), the same default .mq4r already had. Output is bit-exact against the HIP route. Nothing to configure; replay.backend = "hip" turns it off.

decode tok/s · Radeon AI PRO R9700 (gfx1201) HIP route (0.4.3) PM4 replay (0.4.3.1) change
tg128, ctx 128 157 232 +48 %
tg128, ctx 8K 146.6 217.0 +48 %
1024-token reasoning generation 154 225.0 +46 %

Measured on a Radeon AI PRO R9700 with hipfire bench <model> --spec off --matrix --pp 128 --ctx 128,8192 --tg 128 --runs 3 --warmups 2, default config for both arms (the HIP arm set with replay.backend = "hip"), 3 fresh processes per arm. Greedy ids are identical between the two routes on prose, code, copy and 1024-token reasoning prompts, and the replay harness reports logits, KV and recurrent state bit-equal. This changes the decode route only; prefill is unaffected (mq4rs prefill stays about 20K tok/s at 4K–8K prompts, as in 0.4.3). It does not apply to other GPUs. Source: v0.4.3.1 release notes.

The 0.4.3.1 release notes' validation run reports tg128 at ctx 128 of 231.4 / 232.3 / 231.9 tok/s over 3 fresh processes, with the PM4 route bit-exact against the HIP route. --spec mtp now also loads on mq4rs, but the default stays AR and an MTP-loaded request does not use PM4 replay.

Qwen3.8-Flash (Flash-Next) · prefill and decode on the R9700

Change-level campaigns from the 0.4.3 release notes, not a cumulative release matrix: each row names its card, fixture and arms. Numbers from different sessions are not chained.

changehardware and fixtureresult
MQ6 INT8 prefill, now default on gfx1201 One R9700 · Flash-Next · pp16384 at the 4096-row chunk · 3 fresh processes per arm 4,720.5 → 4,899.3 tok/s (+3.8 %) against the previous F16 route · quality: paired KLD change within the +0.010 budget on both corpora; byte-identical to the INT8 HIP route
Compact forward scratch, now default on gfx1201 (4096-row chunk) One Radeon AI PRO R9700 · split base qwen3.8-flash-next-base.mq4-xts · hipfire bench --matrix pp16384, tg128 and --spec auto · 3 fresh processes per arm · full vs compact scratch, both at the 4096-row chunk Forward scratch 4,388 → 1,270 MiB; resident experts 6,948 → 8,234. pp16384 5,024 → 5,405 tok/s (+7.6 %); tg128 33.56 → 34.84 (+3.8 %); --spec auto prose 45.8 → 49.0 (+7.0 %), code 68.2 → 73.9 (+8.4 %) · quality: output byte-identical (KLD sequences, AR and MTP serve transcripts)
Default prefill chunk is now 16,384 rows on gfx1201: faster prefill, slower decode One Radeon AI PRO R9700 · gptq3 monolith · pp16384, AR tg128 (synthetic random token ids, understates real-text decode) and --spec auto (fiction_lighthouse prose, humaneval_0_has_close_elements code) · 3 fresh processes per arm · 16,384-row vs 4096-row chunk, both with compact scratch pp16384 5,405 → 6,431 tok/s (+19.0 %). Decode costs: AR tg128 34.88 → 33.11 (−5.1 %); --spec auto prose 49.1 → 44.3 (−9.8 %), code 73.7 → 66.1 (−10.3 %); resident experts 8,234 → 6,578. HIPFIRE_PREFILL_CHUNK_ROWS=4096 restores the old decode speed · quality: output byte-identical (KLD WT2 and code24, AR and MTP serve transcripts)
Four exact-kernel prefill waves W1–W4 (default-on) One Radeon AI PRO R9700 · pp16384 at the 16,384-row chunk with compact scratch · 3 fresh processes per arm · each wave an interleaved same-session A/B W1 5,506.8 → 5,926.1 (+7.6 %); W2 5,903.9 → 6,028.8 (+2.1 %); W3 6,037.2 → 6,385.5 (+5.8 %); W4 6,380.1 → 6,449.8 (+1.1 %). Measured in separate sessions, not chained into one total · quality: byte-identical kernels; shadow replay bit-exact

Source: v0.4.3 release notes, “Headline numbers” rows 1–4 and Highlights. The 16,384-row chunk is the default on gfx1201 under compact scratch; for short prompts with long generations set HIPFIRE_PREFILL_CHUNK_ROWS=4096. With a 4096-row chunk the pass is limited by the PCIe expert stream and the W1–W4 wins mostly hide. Opt-outs: HIPFIRE_MQ6_I8=0, HIPFIRE_QWEN4_COMPACT_SCRATCH=0.

Expert hot set (on by default on gfx1201)

hipfire pull qwen3.8:flash-next fetches a 213 KB decode-routing sidecar and the load keeps the most-used experts resident in VRAM (gfx1201 only). On real text it is worth +14 % to +26 % MTP decode (fiction prose +14.4 %, glimmer coding prompt +26.3 %) and +7 % to +40 % plain AR, with no prefill loss (pp16384 +0.5 %) and byte-identical output. The copy-heavy code edit under MTP is the exception at −3.1 %. Fixture: one Radeon AI PRO R9700, split base with and without the expert hot-set sidecar, 16,384-row default chunk, q4 PLE rows, 128 tokens, 3 fresh processes per arm. Source: v0.4.3 release notes, Highlights.

The release notes also publish this earlier on/off table, measured before the forward-scratch diet, the W1–W4 waves, the compact-scratch default and the 16,384-row chunk, and not re-measured on the final build. Treat it as a direction, not a current figure.

measured on one R9700, earlier buildchange
vs hot set off, prefill 8K and 16K+18 % to +19 %
vs hot set off, short-context decode−9.5 %
vs hot set off, pp512−6 %
vs v0.4.2.1, long prefill (2K / 8K / 16K)+15 % to +23 %
vs v0.4.2.1, decode (ctx 128 to 20K)−3 % to −11 % (worst at ctx 128)

HIPFIRE_QWEN4_EXPERT_HOTSET=0 restores whole-layer placement. A phase-aware budget is planned for 0.4.4. Source: v0.4.3 release notes, “Flash-Next on a single R9700”.

Strix Halo (gfx1151 + XDNA2) · Flash-Next 16K prefill

Client time to first token on a 16,355-token prompt, XDNA2 NPU trunk on, 3 fresh processes × 3 requests, all-9 median, engine commit 9d74311a53, measured 2026-10-23.

measurementtok/s
0.4.3 all-9 median (2026-10-23) 2,365.6
0.4.3 four steady requests (range) 2,403–2,407
process 1, requests 1–3 2,314.2 / 2,404.9 / 2,403.4
process 2, requests 1–3 2,316.0 / 2,406.8 / 2,404.5
process 3, requests 1–3 2,208.9 / 2,350.9 / 2,365.6
v0.4.2 shipped tip (2026-10-14, an earlier measurement on the same prompt length; see the 0.4.2 page) 2,386

The first request in each process runs slower than steady state; in this run the first requests were 2,314.2, 2,316.0 and 2,208.9 tok/s. The 0.4.2 and 0.4.3 figures are separate measurements, not a controlled A/B. The 0.4.3.1 release notes report that Strix Halo load, prefill and generate match v0.4.3. Source: v0.4.3 release notes, Headline numbers and Known issues; v0.4.3.1 release notes, Validation.

Strix Halo decode and speculation (contributor measurements)

These figures are the contributor's own (@fivetide) and were not re-measured on Strix Halo hardware for this release.

changeresultPR
27B DFlash with a Q8_0 lm_head decodes 1.8× faster (the 16-row lm_head is 6× faster) #908
Flash-Next 8-request AR throughput 53.7 → 75 tok/s aggregate (lane promotion, two-launch GDN lanes, PeaceMaker row kernels) #909
Flash-Next native-MTP decode +6 % from PeaceMaker multi-column verify kernels #930
Flash-Next DFlash2, block 8, greedy 42.5 → 52.0 tok/s (verifies only the draft's confident prefix) #930

Other measured changes in 0.4.3

changehardware and fixtureresult
Strix Halo GDN prefill NaN fix (repetitive prompts), final version Strix Halo · 16K Flash-Next prefill · GDN chunk kernel time first fix 372 → 611 ms (+238 ms of a 16K prefill); final version 364.6 ms, below v0.4.2
Strix Halo F32 GatedDeltaNet state by default Flash-Next · KLD against BF16 KLD improves by 0.0068 (code) and 0.0118 (WikiText-2 subset); cost within ±2 %. Text can differ from 0.4.2.1 on gfx1151
Flash-Next prefill on a narrow PCIe link (7900 XTX at x4, 7.09 GB/s) 7900 XTX (gfx1100) · mq2 host experts · one timing hold, build d8865a16b pp8192 265.1 → 931.9 tok/s (3.52×), at a cost of pp512 −14.4 % and decode −10.7 %
7900 XTX layer-major S1 prefill path, base at pp16384 7900 XTX (gfx1100) · two fresh processes, six samples per arm · a single-session figure, not a release-matrix value 1,738.9–1,750.2 tok/s (about 1.87× the earlier beta build)
Flash-Next load: expert-header page faults and CPU symmetry scan removed Flash-Next load path (symmetry scan: gfx1201 compact-scratch default) CPU symmetry scan 8 s warm / 229–310 s cold → 0.1 ms; load phase 177.9 s → under 0.25 s on the affected path
Default FA2 split-KV verifier on exact gfx1100 7900 XTX · contributor measurement (@HUSRCF, #894) +13.6 % DFlash

Source: v0.4.3 release notes, Highlights, § Strix Halo, § 7900 XTX and narrow PCIe links, Fixes. The 7900 XTX narrow-link rows have one hold of evidence.

New Flash-Next tiers: mq3-xts and mq2-xts

Smaller split-base Flash-Next files than the 125 GB mq4-xts. They load their per-token embedding rows from a shared PLE sidecar (q4 29.1 GB, q8 54.4 GB). These tiers lose some quality against the default mq4-xts; measured KLD per tier is on the model cards.

tagbase sizedownload, q4 / q8 PLEwhat it isGPUs
qwen3.8:flash-next-mq3-xts 59.1 GB ~88.2 / ~113.5 GB 3-bit experts on 16,839 of 24,576 routed experts; the rest is the MQ4 XTS bytes R9700, Strix Halo
qwen3.8:flash-next-mq2-xts 46.9 GB ~76.0 / ~101.3 GB 6,306 experts stay 4-bit; 18,270 are 2-bit (E8P) 7900 XTX, R9700
qwen3.8:flash-next-mq2-xts-4500 44.5 GB ~73.7 / ~98.9 GB 4,500 experts stay 4-bit; 20,076 are 2-bit (E8P) 7900 XTX, R9700

Example from the model card: mq2-xts (6,306 hot experts) decode on a 7900 XTX measures KLD 0.1966 on WikiText-2. KLD numbers are not comparable across tiers or against MQ4 without the card's scope notes. Strix Halo refuses the mq2 tiers cleanly in this release. Model cards: hipfire-models/qwen3.8-flash-next. Source: v0.4.3 release notes, “New Flash-Next model tiers”.

Reproduce it

# install hipfire (latest release), or pin one
$ curl -L https://raw.githubusercontent.com/warpfront/hipfire/master/scripts/install.sh | bash
$ curl -L https://raw.githubusercontent.com/warpfront/hipfire/master/scripts/install.sh | bash -s -- --tag v0.4.3.1

# A3B prefill and decode on a gfx1201 card (R9700)
$ hipfire pull qwen3.6:35b-a3b-mq4rs
$ hipfire bench qwen3.6:35b-a3b-mq4rs --matrix --json --pp 512,1024,4096,8192,16384 \
    --tg 1 --ctx 1 --runs 3 --warmups 1 --spec off
$ hipfire bench qwen3.6:35b-a3b-mq4rs --spec off --matrix --pp 128 --ctx 128,8192 \
    --tg 128 --runs 3 --warmups 2

Each version's default config applies. Releases: v0.4.3 (CHANGELOG), v0.4.3.1 (CHANGELOG). Protocol: BENCHMARKS.md.

Known limits

  • The A3B speed-up applies to files built with the symmetric expert recipe, which is qwen3.6:35b-a3b-mq4rs. Fast mq4rs prefill is gfx1201 only, its router and lm_head are 4-bit, and --spec mtp is opt-in there (the default stays AR).
  • On the asymmetric qwen3.6:35b-a3b-mq4r file, 0.4.3 prefill numerics change slightly and greedy output can differ from 0.4.2 at near-ties. Users on the old mq4r should pull mq4rs.
  • Flash-Next on the R9700 prefills faster and decodes 5–10 % slower by default (16,384-row chunk); the earlier hot-set on/off table predates the final defaults.
  • On Strix Halo, each process exit leaves about 80 GiB in the kernel TTM page pool, so a back-to-back reload can be refused until that memory frees; the fix is planned for 0.4.4. The first request in each process also runs slower than steady state.
  • Several Strix Halo and 7900 XTX results are the contributors' own measurements and were not re-measured on that hardware for this release.
  • Qwen3.8-27B --spec mtp failed to load on v0.4.3 and loads again in 0.4.3.1.
  • The PM4 replay decode speed-up does not apply to other GPUs, to MTP-loaded requests or to a drafter.

Source: v0.4.3 and v0.4.3.1 release notes, Known issues and Upgrade notes.