Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1276 commits
Select commit Hold shift + click to select a range
2830c5c
feat(ds4): add selectable f16 compressor cache
Kaden-Schutt Aug 8, 2026
f6d9984
fix(ds4): use gfx12 native half spelling
Kaden-Schutt Aug 8, 2026
0dcde1a
docs(ds4): correct the tau cost model -- MoE verify does not amortise…
Kaden-Schutt Aug 8, 2026
d2a50f9
fix(harness): resolve cache mode from registry
Kaden-Schutt Aug 8, 2026
2d3ff4b
fix(dspark): emit HIPFIRE_DSPARK_PROFILE from Drop so it is actually …
Kaden-Schutt Aug 8, 2026
b071cff
docs(ds4): correct section 6 -- draft cost is 10.5%, not 1.11%, and f…
Kaden-Schutt Aug 8, 2026
97511ad
fix(ds4): report selected compressor cache dtype
Kaden-Schutt Aug 8, 2026
0cb9341
fix(ds4): bind capacity reports to each rank
Kaden-Schutt Aug 8, 2026
3f87fba
docs(ds4): promote 38.97192 tok/s to the k6 golden and supersede the …
Kaden-Schutt Aug 8, 2026
6e4a2dd
fix(ds4): preserve f32 long-context batch
Kaden-Schutt Aug 8, 2026
1019a0e
docs(ds4): certify selectable f16 compressor cache
Kaden-Schutt Aug 8, 2026
c7e77f4
docs(ds4): record k6 output determinism and the block-trajectory depe…
Kaden-Schutt Aug 8, 2026
aefeba3
bench(ds4): add pp526 structured-code prompt for long-context decode …
Kaden-Schutt Aug 8, 2026
50048f8
diag(ds4): HIPFIRE_DS4_EXPERT_OVERLAP=1 measures routed-expert reuse …
Kaden-Schutt Aug 8, 2026
6e21d41
docs(ds4): measure routed-expert duplication across verify positions …
Kaden-Schutt Aug 8, 2026
23053fb
perf(ds4): expert-grouped routed gate/up behind HIPFIRE_DS4_MOE_GROUP…
Kaden-Schutt Aug 8, 2026
0b51895
revert(ds4): expert-grouped routed gate/up loses 1.8%, cache already …
Kaden-Schutt Aug 8, 2026
118c4b7
docs(ds4): record the expert-grouping negative result
Kaden-Schutt Aug 8, 2026
fa48646
docs(ds4): record rejected fwht8 cache trial
Kaden-Schutt Aug 8, 2026
b053ad9
fix(serve): emit Qwen reasoning content
HUSRCF Aug 8, 2026
5ccef2d
Revert "docs(ds4): record rejected fwht8 cache trial"
Kaden-Schutt Aug 8, 2026
33c797a
docs(ds4): record the long-context DSpark tau collapse as an open pro…
Kaden-Schutt Aug 8, 2026
ac411ab
Merge ds4-gfx1201-opt: selectable F16 compressor cache
Kaden-Schutt Aug 8, 2026
e667e4e
docs(ds4): correct the golden to --kv f32 and record the F16 cache po…
Kaden-Schutt Aug 8, 2026
349b284
feat(ds4): port the F16 compressor cache to gfx1151 and redirect sub-…
Kaden-Schutt Aug 8, 2026
1e16d7f
fix(ds4): widen the nine F16-path wrapper guards to gfx1151
Kaden-Schutt Aug 8, 2026
7403cb5
refactor(ds4): drop the .gfx1201 suffix from the now dual-arch F16 ke…
Kaden-Schutt Aug 8, 2026
f292fde
docs(ds4): record the gfx1151 F16 port result -- free, byte-identical
Kaden-Schutt Aug 8, 2026
e3f2f0c
refactor(ds4): replace the F16 arch-list bandaid with a capability gate
Kaden-Schutt Aug 8, 2026
2eb7df1
Merge pull request #572 from HUSRCF/fix/qwen-reasoning-streaming-570
nwoolmer Aug 8, 2026
1f0d943
fix(ds4): select the proper F16 WMMA capability
Kaden-Schutt Aug 8, 2026
89a9d49
docs(ds4): record gfx1151 F16 long-context parity
Kaden-Schutt Aug 8, 2026
1dbe1fc
fix(ds4): emit single-device prefill throughput
Kaden-Schutt Aug 8, 2026
6fc868d
bench(memory): compare GTT and VRAM reads
Kaden-Schutt Aug 8, 2026
88c591a
bench(memory): add guarded shared mapping oracle
Kaden-Schutt Aug 8, 2026
4c96ca4
fix(mtp): open stream contract before seed events
Kaden-Schutt Aug 8, 2026
8e0bf47
Merge remote-tracking branch 'origin/beta' into beta
Kaden-Schutt Aug 8, 2026
3b63502
fix(serve): route native MTP reasoning events
Kaden-Schutt Aug 8, 2026
156971f
fix(serve): enforce native MTP tool grammar
Kaden-Schutt Aug 9, 2026
e38c0f9
Merge branch 'beta' into a3b-lowbit-work
Kaden-Schutt Aug 9, 2026
12d9b13
feat(spec): add shared ngram-mod MTP takeover
Kaden-Schutt Aug 9, 2026
a2a7c9a
bench: record ngram-mod architecture baselines
Kaden-Schutt Aug 9, 2026
fc32dd3
bench: add sealed ngram MTP ABBA runner
Kaden-Schutt Aug 9, 2026
593ef76
bench: record gfx1100 MTP versus ngram ABBA baseline
Kaden-Schutt Aug 9, 2026
229157f
bench(mtp): record per-window host timings
Kaden-Schutt Aug 9, 2026
ab89dcc
style(mtp): format timing telemetry
Kaden-Schutt Aug 9, 2026
7287725
bench: record gfx1100 MTP window timings
Kaden-Schutt Aug 9, 2026
1b78d17
feat: add independent continuous batching for Qwen
Kaden-Schutt Aug 9, 2026
accce5c
bench: add sealed LocalMax corpus tooling
Kaden-Schutt Aug 9, 2026
a525bea
bench: support capability-specific Redline coherence
Kaden-Schutt Aug 9, 2026
44eb828
bench: add fresh-process Redline campaign runner
Kaden-Schutt Aug 9, 2026
5f4ceba
fix: restore coherent LFM2 serving lifecycle
Kaden-Schutt Aug 9, 2026
32d27a8
fix gfx10 Redline replay certification
Kaden-Schutt Aug 9, 2026
d8b0150
serve LFM2.5 with continuous batching
Kaden-Schutt Aug 9, 2026
5f11453
fix LFM batch KV slot indexing
Kaden-Schutt Aug 9, 2026
1bec7dc
support continuous batches up to 64 lanes
Kaden-Schutt Aug 9, 2026
b973024
support continuous batches up to 128 lanes
Kaden-Schutt Aug 9, 2026
334547b
redact credentials from LMX batch reports
Kaden-Schutt Aug 9, 2026
439233d
support continuous batches up to 256
Kaden-Schutt Aug 9, 2026
30109bb
batch LFM prompt prefill across initial wave
Kaden-Schutt Aug 9, 2026
48802a0
coalesce initial LFM batch wave
Kaden-Schutt Aug 9, 2026
a2628c5
feat(qwen35): restore expert-parallel batch core
Kaden-Schutt Aug 9, 2026
6f082f6
feat(lfm2): add retained replay parity oracle
Kaden-Schutt Aug 9, 2026
1884dfb
fix(lfm2): retain decode kernargs for replay
Kaden-Schutt Aug 9, 2026
6d8a963
fix(redline): acquire after MQ rotation
Kaden-Schutt Aug 9, 2026
6edaa8b
feat(lfm2): automate retained replay lifecycle
Kaden-Schutt Aug 9, 2026
e3c7b4c
feat(qwen35): add safe EP batch foundations
Kaden-Schutt Aug 9, 2026
95a182f
feat(bench): package LocalMax corpora deterministically
Kaden-Schutt Aug 9, 2026
32077c7
test(runtime): cover peer scratch projections
Kaden-Schutt Aug 9, 2026
5bc08ad
feat(cli): admit Qwen TP4 batching
Kaden-Schutt Aug 9, 2026
fab437a
fix(qwen35): seal TP4 EP batch correctness
Kaden-Schutt Aug 9, 2026
886a960
feat(serve): wire Qwen TP4 expert batching
Kaden-Schutt Aug 9, 2026
26cf8e1
feat(bench): support TP4 batch evidence
Kaden-Schutt Aug 9, 2026
c1eab1f
fix(redline): preflight retained LFM replay twice
Kaden-Schutt Aug 9, 2026
bd74b71
fix(tp): encode one band start per rank
Kaden-Schutt Aug 9, 2026
a0ea212
fix(ep): enable peers after batch allocation
Kaden-Schutt Aug 9, 2026
c3015a8
diagnose(ep): trace TP4 batch stalls
Kaden-Schutt Aug 9, 2026
b3fd7bb
diagnose(ep): trace batch admission control
Kaden-Schutt Aug 9, 2026
a097c09
fix(ep): admit Qwen batch semantic route
Kaden-Schutt Aug 9, 2026
ff53b9b
cleanup(ep): remove temporary batch tracing
Kaden-Schutt Aug 9, 2026
37c160c
feat(redline): add gfx1010 PM4 fence diagnostic override
Kaden-Schutt Aug 9, 2026
b0bcc3f
fix(ep): stage tick inputs on first band
Kaden-Schutt Aug 9, 2026
60a40ff
fix(kernels): barrier before LDS reuse in qwen35_fa_prep
alpineQ Aug 10, 2026
fb46d00
fix(cli): validate bench --kv-mode against the canonical schema
Kaden-Schutt Aug 10, 2026
300463c
docs: re-assert GitNexus removal across the live instruction surface
Kaden-Schutt Aug 10, 2026
b4cc2ba
docs(agents): correct the perf-checkpoints policy to match reality
Kaden-Schutt Aug 11, 2026
061c94b
Merge a3b-lowbit-work into beta: A3B low-bit quant family, LFM2-MoE b…
Kaden-Schutt Aug 11, 2026
b808031
fix(client): drop the non-looping loop in drain_committed_done_with_rx
Kaden-Schutt Aug 11, 2026
b0a4317
docs: correct the attribution in b8080311f — never_loop pre-dated our…
Kaden-Schutt Aug 11, 2026
98d721d
test(deepseek4): gate ROCm-dependent probe test behind #[ignore]
Kaden-Schutt Aug 11, 2026
ce46eb8
test(client): avoid generated dummy executable race
HUSRCF Aug 1, 2026
6c1e6d4
test(client): route remaining fake-daemon spawns through ETXTBSY retry
Kaden-Schutt Aug 11, 2026
d78f3cc
test(grammar): cover the free-text/tool-call boundary this PR fixes
Kaden-Schutt Aug 11, 2026
6dff353
Merge PR #559: fix ETXTBSY race in hipfire-client fake-daemon tests
Kaden-Schutt Aug 11, 2026
92cdd8d
Merge PR #575
Kaden-Schutt Aug 11, 2026
1749cbf
Merge PR #567
Kaden-Schutt Aug 11, 2026
1960d4a
Merge PR #566
Kaden-Schutt Aug 11, 2026
f6fca1d
Merge PR #564
Kaden-Schutt Aug 11, 2026
ac68ffe
Merge PR #561
Kaden-Schutt Aug 11, 2026
19986cf
gemma4: port the additive core of #439 onto beta
Kaden-Schutt Aug 11, 2026
5768fd3
gemma4: redo the #439 integration surface against beta
Kaden-Schutt Aug 11, 2026
70037e7
gemma4: generate path, loader bundles, docs — and un-clobber shared code
Kaden-Schutt Aug 11, 2026
be6e3f0
gemma4: default the captured decode path OFF — it produces garbage
Kaden-Schutt Aug 11, 2026
b855917
quantize: restore the gemma4 AWQ invariant guard dropped in the port
Kaden-Schutt Aug 11, 2026
a72279c
gemma4: wire EAGLE spec-decode, then gate it off — it diverges from AR
Kaden-Schutt Aug 11, 2026
4c4b547
kernels: batched GEMM for MQ6G256 — MQ6 was decode-only engine-wide
Kaden-Schutt Aug 11, 2026
d18f215
Merge PR #439: gemma4 rebased onto beta — 12B dense generates; batche…
Kaden-Schutt Aug 11, 2026
b65f815
docs: withdraw the DFlash origination claim — the method is prior art
Kaden-Schutt Aug 11, 2026
1d5eb6b
glimmer: arch crate scaffold + quantizer support for Muse Glimmer (ar…
Kaden-Schutt Aug 11, 2026
587776f
glimmer: loader carrier + daemon generate arm for arch 14
Kaden-Schutt Aug 11, 2026
ac5976a
glimmer: env-gated ablation knobs for bring-up bisection
Kaden-Schutt Aug 11, 2026
bb77ee8
glimmer: centered RMSNorm — the checkpoint stores (w), not the scale
Kaden-Schutt Aug 11, 2026
1feb581
glimmer: stop on <|eom|> / <|eot|>, not just <|end_of_text|>
Kaden-Schutt Aug 11, 2026
1247ac4
glimmer: RoPE convention ablation knob (half-split vs interleaved)
Kaden-Schutt Aug 11, 2026
7612321
glimmer: add missing embed_norm, and stop centering the final norm
Kaden-Schutt Aug 11, 2026
d880395
docs: Muse Glimmer 30B bring-up decode baseline + committed prompt fi…
Kaden-Schutt Aug 11, 2026
e4e036d
glimmer: share one FWHT rotation across co-input projections; wire ar…
Kaden-Schutt Aug 11, 2026
d869134
glimmer: wire the DFlash speculative loop with real drafts
Kaden-Schutt Aug 11, 2026
b9d7e36
glimmer: fix DFlash positions mismatch; fail hard on requested-but-br…
Kaden-Schutt Aug 11, 2026
dcffb3f
glimmer: hoist drafter pos_buf out of the per-layer loop
Kaden-Schutt Aug 11, 2026
88c7396
glimmer: fix drafter batched norms (OOB); real spec loop measurable
Kaden-Schutt Aug 11, 2026
4380616
glimmer: record DFlash as measured-and-not-enabled, with the zero rea…
Kaden-Schutt Aug 11, 2026
4e74390
glimmer: spec stage-norm diagnostic
Kaden-Schutt Aug 11, 2026
2c26ee1
glimmer: fill the DFlash noise embedding (was all zeros)
Kaden-Schutt Aug 11, 2026
48b6e5f
glimmer: implement real drafter block attention; fix two-norm block s…
Kaden-Schutt Aug 11, 2026
2d09006
glimmer: make DFlash tap layers overridable to A/B the indexing conve…
Kaden-Schutt Aug 11, 2026
0990e3d
glimmer: drafter conditions via concatenated context K/V, per upstrea…
Kaden-Schutt Aug 11, 2026
9232158
glimmer: HIPFIRE_GLIMMER_CTX_CAP to measure the tau-vs-cost curve
Kaden-Schutt Aug 11, 2026
8dff892
quantize: hold Muse Glimmer's untied lm_head at Q8 by default
Kaden-Schutt Aug 11, 2026
68b65d2
glimmer: batched DFlash verify -- one forward over the block
Kaden-Schutt Aug 11, 2026
df345f5
glimmer: share one lm_head routine between draft and verify; document…
Kaden-Schutt Aug 11, 2026
47760ab
docs: Muse Glimmer DFlash checkpoint — 1.24x over AR, byte-identical
Kaden-Schutt Aug 11, 2026
7988de0
glimmer: persistent batched-logits buffer (kill per-call hipMalloc)
Kaden-Schutt Aug 11, 2026
6e40776
glimmer: persistent batched-logits buffer; record 3-arch DFlash results
Kaden-Schutt Aug 11, 2026
3978bbd
glimmer: fuse rmsnorm+FWHT rotate in batched verify
Kaden-Schutt Aug 11, 2026
fe89a4f
docs: correct the gfx1100 DFlash reading -- all three arches win
Kaden-Schutt Aug 11, 2026
7b66114
glimmer: batch the drafter projections too
Kaden-Schutt Aug 11, 2026
09839a7
docs: DFlash final numbers — 2.05x/1.67x/2.06x on the compliant artifact
Kaden-Schutt Aug 11, 2026
2c1d627
bench: graded prefill prompt fixtures for Glimmer
Kaden-Schutt Aug 11, 2026
0b03c06
glimmer: chunked batched prefill
Kaden-Schutt Aug 11, 2026
9942844
glimmer: fix over-window prefill — honest per-row SWA fallback
Kaden-Schutt Aug 11, 2026
1f89fb9
glimmer: batched prefill — windowed flash, dispatch routing, fused qkvza
Kaden-Schutt Aug 11, 2026
adb7b99
bench: Glimmer prefill projection shape sweep
Kaden-Schutt Aug 12, 2026
808d441
glimmer: Muse-owned residual GEMM sibling, +7.8%/+6.7% prefill
Kaden-Schutt Aug 12, 2026
20faa9b
glimmer: allow flash on the 13 full-attention layers (default off, ne…
Kaden-Schutt Aug 12, 2026
1380292
glimmer: prune Muse kernel to the one dispatched width; radiowave sweep
Kaden-Schutt Aug 12, 2026
7b77951
glimmer: o_proj on the residual family by default (+1.2%/+0.8%)
Kaden-Schutt Aug 12, 2026
5073ee9
glimmer: fix decode max_seq ceiling; wire bench --matrix for arch 14
Kaden-Schutt Aug 12, 2026
7d3a480
glimmer: flash decode above 1280 ctx — decay -30.3% to -16.0%
Kaden-Schutt Aug 12, 2026
930b6c5
glimmer: KV through the VMM arena — 131k context now loads on 16 GB
Kaden-Schutt Aug 12, 2026
a4e7a96
glimmer: flash on full layers by default — prefill above 16k now works
Kaden-Schutt Aug 12, 2026
ea0c63d
glimmer: WMMA attention on the full layers — +38% prefill at 16k
Kaden-Schutt Aug 12, 2026
fd84e9a
glimmer: Muse windowed Q8 WMMA prefill kernel — 1.89x at 16k, beats Qwen
Kaden-Schutt Aug 12, 2026
e2928d7
glimmer: accept MQ4 DFlash drafters — +19% DFlash, drafter 2.59 -> 1.…
Kaden-Schutt Aug 12, 2026
bb202fb
glimmer: run in dflash_spec_demo — canonical fixture, tau matches daemon
Kaden-Schutt Aug 12, 2026
f1714f4
glimmer: fix chat template parse + add LCP prefix cache (-46%/-48% pr…
Kaden-Schutt Aug 12, 2026
8211875
glimmer: wire Harmony thinking; fix prefix-cache reuse past the prefi…
Kaden-Schutt Aug 12, 2026
f04e465
glimmer: WIP checkpoint — per-channel chat templating + tool calling
Kaden-Schutt Aug 12, 2026
677f652
glimmer: pin the Onyx template rewrite against the real carried template
Kaden-Schutt Aug 12, 2026
55be5c0
glimmer: wire the per-channel cache, tool channel, and mirror reconci…
Kaden-Schutt Aug 12, 2026
d50d5be
glimmer: make the harmony cache oracle's verdict unambiguous
Kaden-Schutt Aug 12, 2026
324922d
glimmer: open the stream contract and run the two-phase terminal hand…
Kaden-Schutt Aug 12, 2026
4dfd23b
glimmer: make the per-channel replay actually fire, and wire the mode…
Kaden-Schutt Aug 12, 2026
a315657
cli: stop _raw-wrapping non-object tool arguments for every other arc…
Kaden-Schutt Aug 12, 2026
58a156e
glimmer: stop leaking prefill/verify scratch VRAM on every error path
Kaden-Schutt Aug 12, 2026
575e84c
registry: carry Muse Glimmer's model-card sampling contract
Kaden-Schutt Aug 12, 2026
3e1e296
glimmer: latch the stream contract before every refusal so a bad prom…
Kaden-Schutt Aug 12, 2026
fcbd87a
prompt_frame: drop the redundant raw-content guard that discarded fou…
Kaden-Schutt Aug 12, 2026
8506895
glimmer: honor request reasoning_effort as the model card's reasoning…
Kaden-Schutt Aug 12, 2026
edd5b46
glimmer: sample on the GPU and stop dropping top_k
Kaden-Schutt Aug 12, 2026
2132a4d
glimmer: stop tool requests hanging forever, and route arch 14 as too…
Kaden-Schutt Aug 12, 2026
ba24fb0
glimmer: advertise semantic contract v2 so tool calls reach the client
Kaden-Schutt Aug 12, 2026
f4d69ab
compute: release the old buffer when a scratch slot grows
Kaden-Schutt Aug 12, 2026
122b55f
dflash_generic: stop discarding top_p/top_k on the sampled chain verify
Kaden-Schutt Aug 12, 2026
c36c5ce
compute: never release a scratch buffer a captured hipGraph still poi…
Kaden-Schutt Aug 12, 2026
9268ee9
glimmer: query-tiled WMMA for verify attention, and window the slidin…
Kaden-Schutt Aug 12, 2026
61495d5
glimmer: incremental drafter context (absolute-position keyed), mirro…
Kaden-Schutt Aug 12, 2026
089e94b
glimmer: default the drafter context cap to 256 [UNVALIDATED - may be…
Kaden-Schutt Aug 12, 2026
1ff5c64
kernels: RDNA3 sibling of the Muse sliding-window WMMA prefill kernel
Kaden-Schutt Aug 12, 2026
01ca882
kernels: arch-isolate the Muse SWA kernel so gfx1100 and gfx1151 tune…
Kaden-Schutt Aug 12, 2026
ebd6c3d
perf(glimmer): fuse gfx1100 qkvg decode
Kaden-Schutt Aug 12, 2026
2bdb13c
perf(glimmer): fuse gfx1100 gate up decode
Kaden-Schutt Aug 12, 2026
0614af9
perf(sampling): accelerate exact top-k 64
Kaden-Schutt Aug 12, 2026
32009a1
build(kernels): precompile exact GPU samplers
Kaden-Schutt Aug 12, 2026
f566d1c
perf(glimmer): fuse silu multiply and MQ rotation
Kaden-Schutt Aug 13, 2026
2e408c2
perf(glimmer): fuse decode sandwich norms
Kaden-Schutt Aug 13, 2026
1eb0e4c
perf(glimmer): fuse decode QK norm and RoPE
Kaden-Schutt Aug 13, 2026
143ff6d
perf(glimmer): batch prompt embedding lookup
Kaden-Schutt Aug 13, 2026
9c49021
perf(glimmer): keep DFlash argmax on device
Kaden-Schutt Aug 13, 2026
e1f346c
perf(glimmer): keep DFlash captures device resident
Kaden-Schutt Aug 13, 2026
004451c
fix(glimmer): gate device capture experiments explicitly
Kaden-Schutt Aug 13, 2026
3eb0dcb
feat(glimmer): add masked windowed batch attention
Kaden-Schutt Aug 13, 2026
e367dee
feat(glimmer): add isolated continuous batch core
Kaden-Schutt Aug 13, 2026
9345db2
fix(glimmer): invalidate batch conversion caches
Kaden-Schutt Aug 13, 2026
ed4ff11
perf(glimmer): add gfx1201 decode projection fusions
Kaden-Schutt Aug 13, 2026
96b3c32
Revert "perf(glimmer): add gfx1201 decode projection fusions"
Kaden-Schutt Aug 13, 2026
a74bf03
perf(glimmer): enable adaptive B in DFlash demo
Kaden-Schutt Aug 13, 2026
608b6c8
bench(glimmer): compare exact verifier attention methods
Kaden-Schutt Aug 13, 2026
914774d
feat(glimmer): retire unprofitable draft requests
Kaden-Schutt Aug 13, 2026
ff77899
fix(glimmer): remove unsafe batch harness and repair trace gate
Kaden-Schutt Aug 13, 2026
fcc0f73
fix(glimmer): close load rollback and tool-history gaps
Kaden-Schutt Aug 13, 2026
206cae9
scratch: checkpoint gfx1100 Muse kernel experiments
Kaden-Schutt Aug 14, 2026
b5148ab
scratch: add gfx1100 fragment-major Muse probe
Kaden-Schutt Aug 14, 2026
8df2050
Revert "scratch: add gfx1100 fragment-major Muse probe"
Kaden-Schutt Aug 14, 2026
52eaba3
scratch: add gfx1100 magic dequant probe
Kaden-Schutt Aug 14, 2026
4678d57
Revert "scratch: add gfx1100 magic dequant probe"
Kaden-Schutt Aug 14, 2026
3e33b4a
scratch: probe gfx1100 f16 paired accumulators
Kaden-Schutt Aug 14, 2026
fc50b0e
Revert "scratch: probe gfx1100 f16 paired accumulators"
Kaden-Schutt Aug 14, 2026
90b9acb
perf(gfx1100): promote Glimmer RM2 prefill
Kaden-Schutt Aug 14, 2026
8c5af42
fix(glimmer): restore drafter projection shapes
Kaden-Schutt Aug 14, 2026
f946083
fix(vision): correct preprocessing pixel budgets; add per-stage dump …
Kaden-Schutt Jul 27, 2026
1a51345
feat(mrope): pure 3D position builder with HF parity fixture
Kaden-Schutt Jul 27, 2026
d964591
feat(mrope): 3D mrope rope kernels (decode + batched)
Kaden-Schutt Jul 27, 2026
bc1b3fe
feat(mrope): route VL requests through 3D mrope positions
Kaden-Schutt Jul 27, 2026
c5f80d6
fix(mrope): guard cross-turn base and log the missing-image-pad bail
Kaden-Schutt Jul 27, 2026
e32b4e2
fix(vl): restore source-precision OvisOCR2 output
Kaden-Schutt Jul 30, 2026
3849171
fix(vl): drop the CPU n-gram ban from infer_vl
Kaden-Schutt Aug 14, 2026
d46fcc3
bench(vision): rocBLAS vs gemm_f16 at qwen35-vl tower shapes
Kaden-Schutt Aug 14, 2026
fdeefc9
perf(qwen35-vl): route vision linear through gemm_f16_wmma_mb8
Kaden-Schutt Aug 14, 2026
91aaa68
perf(gemv): vectorize gemv_bf16_xf32 inner loop
Kaden-Schutt Aug 14, 2026
389d6dc
feat(install): resolve split ROCm toolchains; add --hipcc and --stric…
Kaden-Schutt Aug 14, 2026
ba78ecb
feat(registry): register Glimmer trunk + DFlash drafter, defer Glimme…
Kaden-Schutt Aug 14, 2026
54c8d81
feat(glimmer): sampled DFlash via chain-sample, gated on dflash_fast_…
Kaden-Schutt Aug 14, 2026
d3a8d3e
fix(glimmer): restore the argmax kernel call the logits sink dropped
Kaden-Schutt Aug 14, 2026
adf5239
feat(glimmer): lossless rejection sampling replaces naive chain-sample
Kaden-Schutt Aug 14, 2026
f7cb15c
perf(glimmer): raise the drafter sliding window default 256 -> 512
Kaden-Schutt Aug 14, 2026
44ecb20
feat(registry): muse-glimmer / muse-glimmer:fast, no size suffix
Kaden-Schutt Aug 14, 2026
3bec024
fix(glimmer): store the downloaded draft probabilities
Kaden-Schutt Aug 14, 2026
1dab63e
Revert the rejection-sampling experiment, restore working chain-sample
Kaden-Schutt Aug 14, 2026
1f0196e
docs(glimmer): record the drafter logit calibration finding
Kaden-Schutt Aug 14, 2026
66db8bb
docs(qwen): Qwen 3.8 27B day-zero readiness analysis
Kaden-Schutt Aug 14, 2026
0ca6832
fix(quantize): map Glimmer's self_attn.gate_proj to blk.N.attn_gate
Kaden-Schutt Aug 14, 2026
4b84a17
docs(glimmer): first AWQ build — artifacts coherent, quality unmeasur…
Kaden-Schutt Aug 14, 2026
beebce2
chore(git): ignore .omp/ agent harness state
Kaden-Schutt Aug 14, 2026
3cdd31e
feat(eval): Glimmer (arch 14) KLD reference builder + evaluator
Kaden-Schutt Aug 14, 2026
f9e0a83
chore(registry): consolidate models under hipfire-models, drop the hi…
Kaden-Schutt Aug 14, 2026
84fb96b
feat(registry): make MQ2R the deepseek4 default
Kaden-Schutt Aug 14, 2026
0e59b8b
feat(registry): add ds4 short aliases, plus the missing mq2lloyd shor…
Kaden-Schutt Aug 14, 2026
7c37a99
docs(qwen): Qwen 3.8 27B day-1 execution plan
Kaden-Schutt Aug 14, 2026
c20ca26
fix(reasoning): accept xhigh effort — Qwen3.8's default was silently …
Kaden-Schutt Aug 14, 2026
3c8e614
fix(qwen3.8): propagate reasoning effort through templates
Kaden-Schutt Aug 14, 2026
aca070c
fix(runtime): retain max-think batch contract
Kaden-Schutt Aug 14, 2026
92c860e
docs(perf): record Qwen3.8 parity proof
Kaden-Schutt Aug 14, 2026
13eb8d7
feat(registry): publish Qwen3.8 and native VMM defaults
Kaden-Schutt Aug 14, 2026
b122639
fix(runtime): raise request context clamp to 1M
Kaden-Schutt Aug 14, 2026
72d9850
fix(registry): correct qwen3.8:27b artifact identity, add :27b-fast
Kaden-Schutt Aug 15, 2026
75d8b3b
docs(arch-ids): add rows for arch 13/14, clarify 22 ownership
Kaden-Schutt Aug 15, 2026
dacce74
fix(serve): flush SSE frames per token instead of per 8 KiB
Kaden-Schutt Aug 15, 2026
8ff6aa4
docs(readme): report DeepSeek V4 on the current MQ2R SKU
Kaden-Schutt Aug 15, 2026
402cdd2
docs: record Qwen 3.8 27B and Muse Glimmer in the v0.3.0 notes
Kaden-Schutt Aug 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
142 changes: 142 additions & 0 deletions .agent-memory/notes/ds4-g4-batched-e8-gemv-window-collapse.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
---
title: "G4: batched E8 GEMVs collapse the ds4 spec-verify window; bytes/token corrected to 6.04 GB"
date: 2026-07-26
tags: [deepseek4, gfx1151, spec-decode, wmma, gemv, roofline, mq2r]
---

## The pathology: WMMA token tiles at speculative-verify widths

The ds4 batched forward sends dense projections through WMMA GEMMs that tile the
TOKEN axis at 16. `e8_prefill_batch_tiles` returns 1 for any `batch_size <= 16`,
so the `_b2`/`_b4` tile multipliers NEVER engage at spec-decode widths. Below
B=16 the tile is mostly padding and launches only M/16 waves. Isolated, the
grouped WMMA is FLAT at 345-357 us from B=1 to B=16 — the tile signature.

Fixed in TWO places (commits b8efa47a7, 7f954ad98), both default-off behind
`HIPFIRE_DEEPSEEK4_E8_BATCHED_GEMV=<max B>`:

- `gemv_mfp4g32_e8_soa_batched` — plain dense (`gemv_auto_batched_wmma`)
- `gemv_mfp4g32_e8_soa_grouped_batched` — O-LoRA A (`wo_per_group_batched_e8_fallback`)

Both keep the decode GEMV's M-wave occupancy and single weight-row read.

**Bit-exactness is against whichever decode kernel the path replaces, and the
accumulation orders DIFFER**: the plain decode GEMV strides FOUR accumulators
across four groups (tail into acc0, `((acc0+acc1)+acc2)+acc3`); the grouped one
strides TWO across a pair (`acc0+acc1`). Mirroring the wrong one costs
bit-exactness — first attempt diverged 2037/4096, max_rel 4.6e-5. Both now pass
at 0 ULP. This matters because verify logits decide token acceptance.

Also: the WMMA path calls `ensure_fp16_x`, so before this, verify ran **f16**
activations while AR decode ran **f32** — the two models disagreed by
construction. The batched GEMVs take f32 directly.

## Measured (MQ2R P3, pos 2048, AR reference in the same process)

```
B WMMA plain +grouped
1 120.82 ms 57.97 ms 47.61 ms
2 131.57 69.78 59.47
4 154.94 101.22 91.65
6 180.43 139.50 135.47
8 203.87 171.24 169.12
16 crossover: WMMA wins (tile finally full) — hence the explicit batch ceiling

window(B): 107.7 + 12.0*B -> 36.0 + 16.9*B -> 22.9 + 18.3*B (constant -79%)
AR decode reference: 35.60 ms/token (reproduced 35.57 on a prior run, 0.08%)
```

Spec-decode break-even (`window(B)/tau < 35.60`): was IMPOSSIBLE at B<=4 (required
tau exceeded B itself). Now B=2 needs tau 1.671 / p>=0.671 vs DSpark's measured
p=0.660 — **99.4% of break-even on the verify side**. Remaining B=1 overhead vs
AR decode: 12.01 ms (was 22.37); batched attention
(`deepseek4_attn_swa_topk_batched_wmma` + `topk_kv_gather_batched`, +4.82 ms) is
now the largest single term — the third instance of the same tile pathology.

## Method that worked: differenced rocprof arms

Profile arm A (AR decode xN) and arm B (batched B=1 xN) with an **identical**
`--prefix` prefill, so the prefill's kernel time is the same in both and cancels
in the per-kernel diff. Predicted -10.38 ms for the grouped substitution;
measured -10.36 (0.2% error). `deepseek4_prefill_bench` gained `--tokens 0`
(window mode), `--prefix P`, `--ar-ref N`, `--e8-batched`, and now frees
`PrefillBatchScratch` between batch sizes (the leak OOM'd the sweep at B=6).
The flag is cached in an AtomicUsize, not a OnceLock, so one process A/Bs both
arms against one loaded 80 GB trunk.

## Bytes/token CORRECTED: 6.04 GB (was quoted 4.68 — understated 29%)

From the HFQ tensor table (`dump_hfq_dtypes`), accounting closes to 0.09% of the
82.191 GB file:

```
qt=19 MQ2G256Lloyd 33,024 tensors (256 exp x 43 L x 3) 277.0e9 elems @2.25bpw = 77.90 GB
qt=35 MFP4G32E8SOA 554 6.742e9 @4.25bpw = 3.58 GB
qt=3 Q8_0 1 129280x4096 — embed and lm_head are TIED = 0.56 GB
qt=1 F16 641 35.8e6 = 0.07 GB

per token = all-but-experts + 6/256 of experts = 0.07+0.56+1.826+3.58 = 6.04 GB
```

**Dense tier is 59% of bytes/token; routed experts only 30%.** Top-k tuning
touches the smaller half. Corrected, top-6 -> top-4 removes 10.1% of bytes ->
predicted +11.2%; measured +12% (see [[ds4-topk4-bandwidth-scaling]] if written).

At 27.70 tok/s that is 167 GB/s vs the 207 GB/s measured on the dense E8 GEMV at
high wave count = **81% of practical roofline**. BUT during GPU-busy time
(~30 ms of the 35.57 ms token) we move 6.04 GB = **201 GB/s — at the ceiling**.
Per family: dense 192, experts 214, rest 227 GB/s. The ~19% headroom is the
**~5.5 ms/token that is not running kernels at all**, not kernel inefficiency —
and that gap is exactly what nine lever classes failed to convert earlier in this
campaign. Real, measurable, has resisted everything tried.

## Drafter cost is now the dominant term (verify is nearly solved)

The break-even figures above are VERIFY-ONLY. Draft cost:

```
DSpark sidecar 5,996,338,910 B = 6.0 GB -> ~31.6 ms/pass (89% of an AR token!)
MTP head 1,998,047,355 B = 2.0 GB -> ~10.5 ms/pass
```

That is almost certainly the real content of the "-96% perf" DSpark observation —
never a tuning problem, the drafter is nearly as expensive as the token it skips.
Open question worth checking: the trunk's `qt=3` is ONE tensor (embed/lm_head
tied). If the MTP sidecar carries its own copy, ~1.06 GB of its 2.0 GB is
redundant with resident weights; sharing them drops the drafter to ~0.94 GB /
~4.9 ms, at which point B=2 needs p~0.651 and DSpark's 0.660 clears outright.

**NPU (aie2p) does NOT help this.** Strix Halo's NPU shares the same unified
LPDDR5X and the same ~256 GB/s. A drafter costs what it costs because it streams
GB of weights; the NPU adds compute, not bandwidth. Note the objection CHANGED
from the earlier G8 finding — there the blocker was >300 us round-trip against a
1.428 ms kernel; a 10-30 ms drafter amortizes that fine. Bandwidth is the
blocker now, not latency.

## Traps

- **`k8` in MoE kernel symbol names is LEGACY, not a bound.** Source file is
`gemv_mq2g256_lloyd_moe_gate_up_indexed.hip`; exported symbol is
`..._gate_up_k8_indexed`. `k_top` is `blockIdx.y`, a runtime grid dimension,
passed `cfg.num_experts_per_tok` (=6). Nothing is pinned at 8. Confirmed
empirically: 6->4 moved throughput by the byte-predicted amount, which a
hardcoded 8 could not do. Rename these symbols.
- rocBLAS/hipBLAS are **structurally unusable** here: they consume dense
fp16/int8, our weights are MQ2G256Lloyd (2.25 bpw codebook) and MFP4G32E8SOA
(E8 lattice). Using them requires dequant to fp16 = ~1.8x MORE bytes on the
biggest tier, on a bandwidth-bound path. Fusing dequant into the GEMV is
incompatible with the BLAS interface, not an optimization on top of it. See
also the gfx12 rocBLAS 5.6x-slower finding. rocWMMA = header wrapper over
intrinsics already called directly (maintenance only). rocPRIM/hipCUB is a
real but small lever for MoE routing (~2 ms addressable, <1 ms recoverable).
- `/sys/firmware/acpi/platform_profile` does NOT exist on hipx; the amdgpu
equivalent is `power_dpm_force_performance_level` (currently `auto`), which is
what `rocm-smi --setperflevel` writes. Untested on gfx1151; note the measured
gfx1201 finding that `high` UNDER-clocks. Aimed at sclk, but the binding
constraint here is memory/fabric clock.
- rsync + `setsid nohup script.sh` silently no-ops if the script is not
`chmod +x` — the log lands 0 bytes and nothing runs. Cost two launches.
- `pkill -f <name>` over ssh can self-kill the ssh command; `pkill -x` truncates
at 15 chars. Check binary mtime vs source mtime instead of trusting a fast
cargo "Finished" — mold relinks a big example in <1 s, which looks like a
no-op build but is not.
29 changes: 29 additions & 0 deletions .agent-memory/notes/gfx1201-gate-up-buffer-rt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
title: gfx1201 indexed MoE gate-up buffer RT clears spills with scalar bases and staged lifetimes
date: 2026-07-11
tags: [gfx1201,moe,gate-up,buffer-load,redline,performance]
---

The active A3B decode kernel is
`gemv_hfq4g256_moe_gate_up_indexed.hip`, not the similarly named inactive
`_k8_indexed.hip` R40/LDS source. The active control is 96 VGPR / 20 SGPR /
zero scratch.

Two row-local SRDs spilled 12 B/lane and the first expert-wide SRD spilled
16 B/lane. Descriptor count was therefore not the root cause. Giving every
load a distinct scalar `soffset` was worse (28 B). The winning lowering uses
one expert-wide SRD, two shared scalar row/group bases, lane displacement in
`voffset`, and consumes all four gate headers before loading the up headers.
It compiles at 95 VGPR / 16 SGPR / zero scratch. Default/global gfx1201 and
gfx1100 controls remain byte-identical; `HIPFIRE_GFX12_WEIGHT_LOAD_POLICY=global`
is the rollback.

On hiptrx R9700 at automatic clocks, the corrected real-grid benchmark
(fixed to allocate `K_TOP * MI` outputs) produced identical global/buffer FNV64
`80003edb5bbe030b`. Its cold 256-expert arm improved from 18.8 to 18.3 us
(about 2.7%); the hot eight-expert arm was neutral. Retained-PM4 FWHT3 8K
process medians averaged 175.755 global versus 176.234 buffer (+0.272%); Q8
tg128 was neutral (+0.045%). The sampled eight-turn AR session was behaviorally
identical with zero attractors and improved average decode from 166.95 to
168.18 tok/s (+0.734%), including 153.9 to 155.0 at 17.6K context. MTP/spec
decode was disabled and untouched throughout.
17 changes: 17 additions & 0 deletions .agent-memory/notes/redline-context-bucketed-tapes-neutral.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
title: Context-bucketed retained FA grids are neutral or regressive on gfx1201
date: 2026-07-11
tags: [redline,pm4,aql,flash-attention,context,gfx1201,negative-result]
---

On hiptrx R9700 at automatic clocks, a literal retained-grid experiment patched
FWHT3 flash-attention dispatch geometry from the 32K physical capacity to the
exact live `ceil(seq_len/128)` tile count between completed replays. Kernargs,
partial strides, reduction limits, queue, and PM4 IB shape remained fixed.

The path was bit-identical in the sampled eight-turn serve harness, but the
bookended 8K product result was 176.116 full-grid versus 176.108 tok/s live-grid
(−0.005%). At 2K, removing 240/256 tile rows per FA layer measured 185.161
versus 183.825 tok/s (−0.72%) despite a faster candidate HipGraph anchor. Empty
tile early exits are effectively free on this workload. The mutable AQL/PM4
geometry code was reverted; do not reopen without a different mechanism.
18 changes: 18 additions & 0 deletions .agent-memory/notes/redline-suballocation-wait-census.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: A3B retained PM4 has no suballocation-only wait candidates
date: 2026-07-12
tags: [redline,pm4,hazards,suballocation,a3b,gfx1201,negative-result]
---

The 833-launch FWHT3 A3B tape on hiptrx reports 832/832 pointer-covered
boundaries, 130 resource-independent edges, and zero `suballocation_candidates`.
The census preserves each pointer start inside its HIP allocation and asks
whether any allocation-wide conflict would disappear under exact-start
identity. None do: all 702 retained inter-dispatch waits include a real
read/write or write/write dependency at the same device pointer.

Do not build a kernel-specific byte-extent catalog for this tape; it cannot
remove a current wait. Keep allocation-wide scheduling fail-closed and retain
the exact-start map only as a diagnostic for future sequences. The 15-position
PM4 gate remained exact with 833 launches, 27 kernels, and sequence hash
`6f56f88512659cba`.
Loading
Loading