Repository navigation
Conversation
|
why opt in? sounds like no reason not to be default.. |
07b8995 to
3ec998b
Compare
3ec998b to
30e7a8e
Compare
30e7a8e to
db3331c
Compare
|
@fivetide Thanks — I agree that default-on is probably the right final policy within the admitted envelope. I initially kept it opt-in because the validation scope was narrow, but a follow-up audit found a few things I would like to fix before flipping the default:
Also, the measured kernel matrix starts at 8K, so I would like to pin the 4K crossover with a small boundary A/B before making it the product default. I’ll rebase onto current beta now that the gfx1201 split-KV work has landed, tighten these guards, add the compiler-free and opt-out tests, and then make the exact admitted gfx1100 route default-on with |
db3331c to
4f07ac0
Compare
|
@fivetide Thanks — I have now made the route default-on inside the exact measured gfx1100 envelope and rebased the PR onto current The follow-up is commit
The rebased head passes all-target compile checks for I also updated the PR body to distinguish the prior pinned performance evidence from the current-beta admission/packaging follow-up. |
Review notes (gfx1151 / Strix Halo, ROCm 7.2)Follow-up on Remaining:
I'll run a gfx1151 DFlash no-regression check (byte-identical output vs beta) once it's rebased. Agent-assisted review; head 4f07ac0. Evidence: static read of the delta since my 2026-10-05 comment. |
4f07ac0 to
b8eb3ab
Compare
|
@fivetide Thanks — the branch is now cleanly rebased onto current Both remaining review items are addressed:
I also reran the required hardware gate on the final rebased HEAD, not the older checkpoint. On a W7900 / exact gfx1100, the Redline harness exercised HipAuto, capture-safe direct HIP, recorded HIP, and PM4 across 12 consecutive B16 positions (8176..8352). Tokens, argmax, logits, hidden staging/ring, final hidden, active KV hashes, GDN intermediates, and recurrent state after forward/rollback were byte-identical across all arms. Five interleaved timing windows measured HipGraph at 44.550 ms median / 44.874 ms p95 and PM4 at 41.908 ms / 42.323 ms, so there is no replay-path performance regression (-5.93% median latency). The current-beta unit/build/map/env/lifecycle/diff/format-bomb checks listed in the updated PR body pass. The PR body now records the new base/head, semantic cleanup, final hardware evidence, and artifact/binary hashes. The rebased branch is ready for the gfx1151 byte-parity no-regression check you offered. |
Replace the long-context Q8 DFlash R4/R8 attention step with an opt-in FA2 split-KV S8 backend on exact gfx1100. Keep the live-context crossover fail-closed and retain the same fixed-grid route through HipGraph and Redline/PM4 with typed pointer effects, stable scratch, and product-identical lm-head handling. Current warpfront/beta@d5305333d W7900 fresh-process E2E: 42.6 to 48.3 tok/s (+13.38%) at unchanged tau=1.97 and 67 cycles. HipGraph off/on produced byte-identical transcripts. Redline four-arm parity passed 12/12 windows; PM4 was 6.00% faster than HipGraph in the five-window verify-body smoke. Validation: release product build, test_kernels 17/17, rdna-compute 438/438, hipfire-arch-qwen35 247/247, hipfire-generate 54/54, crate maps, env/lifecycle inventory, rustfmt, and diff checks. Local no-gpu-ci reached the unchanged beta Python select.py shadowing failure after its Rust/main checks; GitHub beta-runner baseline failures are disclosed in the PR.
Make the exact dense Q8 H24/KV4/HD256 long-context route default-on while retaining the parent VerifyAttn and route-specific opt-outs. Align eager, HipGraph, and Redline admission; package every split symbol in the compiler-free registry; and fail closed when kernels, fixed Q16 scratch, or the caller's S8 partial workspace are not ready.\n\nThe PM4 loader now includes the target flash-partials capacity in its fixed-B16 admission, so a batched fallback cannot be mislabeled as a retained split tape.
b8eb3ab to
52f2ef1
Compare
|
@fivetide I rebased the branch again because I also reran the gfx1100 four-arm manual Redline screen with the pinned qwen3.8 draft explicitly forced (the local global config otherwise overrode the harness argument with an older qwen3.6 draft). The loaded draft was SHA-256 HipAuto, capture-safe direct HIP, recorded HIP, and PM4 remained byte-exact across 12 B16 positions (8176..8352), including tokens/argmax, active KV and guards, hidden/logits, GDN intermediates, recurrent state, and rollback state. Capture had 711 typed launches, 18 AQL contracts, zero untyped launches; 17 replays completed with zero contract/prepare/replay/poison failures. Across five interleaved windows, HipGraph was 45.168 ms median / 45.277 ms p95 and PM4 was 42.714 ms / 43.006 ms (-5.43% median, -5.02% p95). Per Static/unit status on the final base: dispatch 311 passed / 1 ignored, qwen35 255 / 23, rdna-compute 525 / 17; release CLI+daemon build, env-docs, lifecycle, six crate maps, example check, and diff-check pass. The PR body is updated with the new base/head, exact fixture identities, current hashes, rerun numbers, and these two disclosed validation limitations. CI addendum: the two failing GitHub checks reproduce unchanged on |
Summary
Make the exact-gfx1100 FA2 split-KV S8 backend the default long-context Q8 DFlash verifier inside its measured envelope. The pinned product A/B improved from 42.6 to 48.3 tok/s (+13.38%) at unchanged tau and cycle count. The same fixed-grid route is retained through HipGraph and Redline/PM4 with live-context admission, compiler-free kernels, stable scratch, typed replay pointer effects, and fail-closed fallback.
This is the gfx1100 companion to the split-KV schedule evaluated in #760. It compares against—but does not claim authorship of—the existing R4/R8 multi-row verifier from #741. The implementation keeps hipfire's in-tree packed-Q8 KV path; it does not vendor or load CK source or a CK
.so.The branch is rebased onto
beta@175b71fb3. The two semantic commits are024f0b15c(kernel/retained route) and52f2ef1d3(default policy, review follow-up, and current-beta API adaptation). The performance A/B below was collected on the same split kernel/route before the rebase atbeta@d5305333d; the final current-beta four-arm Redline rerun is reported separately below.Default and admission policy
The route defaults on only on exact gfx1100. Either of these restores the established verifier path:
kernel.gfx1100_fa2_split_verify=false/HIPFIRE_GFX1100_FA2_SPLIT_VERIFY=0kernel.verify_attn=false/HIPFIRE_VERIFY_ATTN=0Admission is exact gfx1100, plain Q8 KV, dense Qwen H24/KV4/D256, sequential non-tree batches 4..32, and live logical context >4096.
HIPFIRE_FA_PERTOKEN_MIN_CTX=0disables the route; positive overrides below 4096 are clamped to the measured crossover. Preallocatedmax_seqdoes not influence admission.HipGraph/retained capture additionally requires the complete precompiled split module, fixed-address Q16 scratch, and enough
flash_partialscapacity for the S8 layout. The real PM4 loader checks the target's actual workspace at fixed B=16. Unsupported shapes or not-ready resources fail closed to the established batched path; they cannot be recorded under a split identity.Maintainer-review follow-up
kernel_registry.rsis a small semantic delta rather than a multi-thousand-line reflow, and the other affected files preserve current-beta formatting.hipfire-dispatch; the Qwen arch crate only adapts GPU/config state into the dispatch predicate. This reduces the port surface for the declarative-Steps work in refactor(qwen35): run Qwen3.5 layers as declarative Steps #795.VerifyAttnparent opt-out and added an exact-gfx1100 route-specific stable config/escape hatch.ChainVerifySplitfrom ordinaryChainVerify, so capture-only F16/LDS helpers are not widened below the crossover or on fallback routes.load_dflash_stateworkspace-capacity contract, so workspace admission is checked consistently in the example and product loader.Which surface(s) does this touch?
kernels/,crates/rdna-computecrates/hipfire-generate, speculative verify and Redline plumbinghipfire-arch-qwen35crates/hipfire-quantize/ quant formatsPerformance
Optimization A/B: established R4/R8 vs FA2 split-KV
W7900, exact gfx1100, HIP 7.15, Q8 VMM KV, graph off, six fresh processes in order
off,on,on,off,off,on, one unrecorded warmup per process:The unchanged tau/cycles isolate the improvement to verifier execution rather than draft acceptance.
Batch-16 kernel screen (10 warmups, 30 measurements):
S1 is bit-identical to direct FA2. S8 relative L2 is about 2.46e-4 to 2.58e-4 with cosine about 0.999999970. Direct/partial/merge compile at 254/255/18 VGPR with zero spill and zero private scratch.
HipGraph capture neutrality: split route off vs on
Both arms below already use the new split-KV route; this is not the optimization A/B above. It checks only whether retaining that route in HipGraph changes output or speed.
The B16 graph captured 706 launch blobs. Transcripts were byte-identical, MD5
7b8dc5b28daef60f803fe2a466c888b2, with identical request MD58a54e9aa236f678362f89864bf000125. Both coldserve_harness.pyruns ended inside the model's hidden thought channel and were flaggedRUNAWAY,EMPTY, so these rates are not a performance or answer-quality claim. This run establishes only graph-off/on route parity; the 42.6→48.3 fresh-process native bench above is the performance A/B.Final current-beta Redline/PM4 manual screen
On the final current-beta daemon, the four-arm manual oracle covered HipAuto, capture-safe direct HIP, recorded HIP, and PM4 at 12 consecutive B16 windows (positions 8176..8352):
This is explicitly a manual capture/shadow correctness and timing screen, not a complete product timed-arm route proof or certification. Full immutable earlier route record:
docs/perf-checkpoints/2026-10-05-gfx1100-fa2-splitkv-verifier-graph-pm4.md.Test plan
cargo build --release -p hipfire-cli -p hipfire-daemoncargo test -q -p hipfire-dispatch --lib— 311 passed, 1 ignoredcargo test -q -p hipfire-arch-qwen35 --lib— 255 passed, 23 ignoredcargo test -q -p rdna-compute --lib— 525 passed, 17 ignoredcargo check -p hipfire-arch-qwen35 --example cb_vmm_state_oraclehipfire-arch-qwen35,hipfire-config,hipfire-dispatch,hipfire-generate,hipfire-loader, andrdna-computegit diff --check./scripts/no-gpu-ci.sh— Rust checks/tests and examples proceed after the Gate 0 API fix; the Python tail is 553 passed / 21 failed becausescripts/hw-gate/select.pyshadows Python's stdlibselectwhile spawningreview.py. This reproduces outside the socket-restricted sandbox and is unrelated to this PR's path.scripts/ci-rustfmt-changed.sh— advisory only; current beta is not rustfmt-clean in these full files, and applying it would recreate the unrelated multi-thousand-line reflow this revision removes../scripts/speed-gate.sh— this route is not a locked speed-gate case; the claim uses the fresh-process A/B above.No gfx12 hardware rerun is included: this admission is exact gfx1100, and gfx1201 keeps its separate existing split-KV implementation. Static negative admission tests protect the cross-architecture boundary.
Final validation used target SHA-256
9f91556f7e0431a077d03756a7102d0154108757289e6e5fe9a2d204c0c9eeb7, pinned qwen3.8 draft SHA-256d0a74a232a0e2166d889f823e91e0fbf778d21dd9668d7de055cdecb065401bc, CLI SHA-2569d09edb8a60ee84756a8a6257077e03716c6736713ab740a0c06fc0e76ef42ea, and daemon SHA-2563725b575f31fb5185fe2ab602586fee7c1463f42b92e3a4e2391f7fbadb0503a.The local global config pointed at an older qwen3.6 draft, so the final hardware rerun explicitly set
HIPFIRE_DFLASH_DRAFTto the pinned qwen3.8 artifact above; the daemon log confirms that exact file/digest was loaded.Architecture-trait change?
No
Architecturetrait change.