Repository navigation
Move HRX pins: hrx-system to AMD's e3e6a976 line, llama.cpp 8d9ce2c1a - #441
Conversation
… (owner, 2026-10-18) third_party/hrx-system 3319e536 -> ae206d5e (1bit-MONSTER/hrx-system 1bit/e3e6a976-pin): AMD's e3e6a9766ccb with our commits replayed on it (HRX_AQL_BLOCK_SIZE / HRX_COMMAND_BUFFER_MODE, the engine#409, #410 and #401 fixes) and our fix for ROCm/hrx-system#1535. AMD's newer Loom no longer reaches #1535 on our prompts, but its multi-unit live-out guard is still in unit_liveness_builder.c, so we keep removing it. The pin is a `-s ours` merge of 3319e536 (every shipped commit stays reachable, check_pins sees it ahead) whose tree is the tested commit fc2213a1c. third_party/llama.cpp 1a5dcba2 -> 8d9ce2c1a (1bit-MONSTER/llama.cpp 1bit/hrx-bump-e3e6a976): AMD-Ecosystem hrx-graph-develop-v2 43b0ec2c4 merged into our line (118 conflicts, all under ggml-hrx, ours kept), the kernel corpus predicate renamed `mul(` -> `multiple_of(` (195 predicates, 54 files; e3e6 parses only multiple_of), and a range bound on the ARGSORT rank our small_rows_f32.loom stores through (the new Loom store-origin check rejected it, 46 ARGSORT cases). Measured on strixhalo 2026-10-17 against the old pins (performance mode, ~/wt/hrx-bump-test/REPORT.md): test-backend-ops -b HRX0 1141/1141 x3; needle 7341 Qwen3-0.6B @4732 20/20, @4432 5/5, Qwen3-1.7B @4732 5/5; FA stress 20x48 identical; KLD 0.000000 and identical 80-token output on Qwen3-0.6B and ZAYA1-8B; pp512 +4.4% / +7.8%, tg128 +2.5% / +2.8% (0.6B / ZAYA1-8B, medians of 3 interleaved rounds). config/hrx-system-hold.config now names the new pin (moves stay manual) and config/hrx-long-prompt-validated-pin.config records it. registry/architectures.json: only the llama.cpp pin field changes (292 architectures before and after). docs/hrx.md and the bump-hrx.yml comment describe the new line. Not in this pin: hrx-system fork PR #6 (c9656af, generate_stubs.py canonical signatures; only ever on 1bit/main, never in a shipped pin); it regenerates stubs_generated.c, so it gets its own replay and checks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR Reviewer Guide 🔍(Review updated until commit 0b64a38)Here are some key observations to aid the review process:
|
Replays hrx-system fork #6 (c9656af, generate_stubs.py takes HIP entry point signatures from api.h so --check is trustworthy; regenerated stubs_generated.c) on top of ae206d5e as a clean cherry-pick: 1bit-MONSTER/hrx-system 1bit/e3e6a976-pin-6 = d3c731e1. #6 was only ever on the fork's 1bit/main, never in a shipped pin. The hold and the validated-pin record name d3c731e1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Persistent review updated to latest commit e8133e9 |
|
Persistent review updated to latest commit e8133e9 |
…in-6 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Persistent review updated to latest commit 0b64a38 |
|
Two checks on this pin, both from the bump test's open items (strixhalo What was run
Built with 1. MUL_MAT f32 k=2048
The case the bump test caught is in that set and passed on every run, on both pins: The single failure in the bump test was in a full-suite run, which a MUL_MAT-only run cannot cover, so I also ran the whole suite on the new pin:
So: not reproduced in 30 focused runs (20 new, 10 old, warm and cold JIT cache alike) nor in 3 full-suite runs on the new pin. The 1-in-7 event in the bump test was a MUL_MAT f32 2. Long-context needle beyond 4.7K (the #1535 shape)New pin's
Server log: 0 NaN lines. So the defect is masked on this pin beyond 4.7K as well, not only at the bump test's 4732. Box state after the runs
To re-runLogs and per-run summaries: 🤖 Generated with Claude Code |
…e it (#390) (#442) The llama.cpp side is already in the pin (#441, llama.cpp fork #102): ggml-hrx's scheduler knows the backend of every node, prints one line when GGML_HRX_REPORT is set, and aborts on the first node off HRX with its name, op, type and shape when GGML_HRX_STRICT is. The engine asked for neither, so a graph that partly ran on the CPU was invisible. - --placement-report: passes -lv 4 to the backend for that load (llama-server drops the library's INFO lines below verbosity 4, common/log.cpp) and prints serve's own line at load: "1bit serve: HRX placement: 34 of 512 nodes off HRX (GET_ROWS x 4, MUL_MAT x 30), 7 graph splits". The same numbers are the onebit_cpu_fallback_ops series serve already read. - --strict-device: sets GGML_HRX_STRICT=1 and refuses to start. A backend that refuses the graph is reported as that, not as "did not become ready", and a report that still names off-HRX nodes after a backend reached ready is a refusal with the same numbers. It needs --device hrx or auto; an auto run with no HRX backend says so instead of passing silently. - A GGML_HRX_REPORT / GGML_HRX_STRICT the user sets in the environment wins over serve's. - app/serve_metrics.h: read the report's own count ("N off HRX": for a clean graph the first number after the phrase was the split count, 1 instead of 0) and the graph's node and split counts, which the metric series and the new line both use. - tests/hrx_placement_test.cpp (ctest hrx_placement, listed in the CI build step): the observer's line in, the counts, the summary and the refusal out; no GPU and no backend. - docs/serve.md: "Off-HRX placement: --placement-report, --strict-device". Co-authored-by: bong-water-water-bong <bong-water-water-bong@1bit.gg> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…awn_worker, census, #433) (#446) * docs: the 2026-10-17/18 merges (HRX pins, DwarfStar, PM router and spawn_worker, census, #433) The docs still described the pre-2026-10-18 line. - README status: HRX pinned to AMD e3e6a976 + llama.cpp 8d9ce2c1a with the measured gate numbers; DwarfStar pinned to 5b013dc1bb75 (1BP v5) and its hardware check; the PM gains --pm-router laya and --pm-spawn-url; the census numbers of 2026-10-17. - docs/PORTING.md: the HRX pin (step 2), the Laya source/revision bump (step 4), the 2026-10-17 census (step 5). - docs/registry.md: the 2026-10-17 census table, against registry/census.json, and the current unmapped list. - docs/hrx.md: the engine#433 finding next to the other HRX0 known issues (no abort in 60 fresh loads; the 458-token prompt cannot come from this model template). - docs/dwarfstar.md: what the 2026-10-17 pin was checked on, and that serve cannot set ds4 expert cache size. - .github/workflows/bump-hrx.yml: the loom-jit trap is now described as the step that guards it, with #441 as the validated hand move and #422 still open. Facts from merged PRs #441, #429, #438, #439, #434, #436 and the hardware comments on #441 (TPIN) and #429 (TDS4). * docs/hrx.md: the LoomC-symbol guard, which is the loom-jit trap, and #441 as the validated hand move The workflow comment that described the trap cannot be pushed with this token (no workflow scope), so the fact lives where the pin process is documented: docs/hrx.md, next to the hold. --------- Co-authored-by: pi-zayap2 <bcloud@localhost>
The owner decided to move off the held HRX line (2026-10-18).
Pins
third_party/hrx-system3319e536 → d3c731e1 (1bit-MONSTER/hrx-system1bit/e3e6a976-pin-6:ae206d5eon1bit/e3e6a976-pin, plus our hrx-system Steps 1-2: embedded Lemonade, and HRX + Vulkan in one llama.cpp build #6 replayed on top). This is AMD'se3e6a9766ccbplus our commits replayed on top: HRX_AQL_BLOCK_SIZE / HRX_COMMAND_BUFFER_MODE, the HRX: hipModuleLoadData segfaults on a truncated code object where ROCm returns an error #409, HRX: libhip_intercept wraps only 331 of 540 HIP symbols (rest silently unobservable) #410 and HRX opens the NPU device (/dev/accel/accel0) in GPU-only processes #401 fixes, and our **[Loom]: Multi-unit live-out demand dropped across loop back-edges miscompiles long-context flash-attention on gfx1151** ROCm/hrx-system#1535 live-out fix (AMD's guard is still in their source). The pin is a-s oursmerge of 3319e536, so every shipped commit stays reachable and check_pins sees it as ahead. Its tree is byte-identical to the tested commitfc2213a1c.third_party/llama.cpp1a5dcba2 → 8d9ce2c1a (1bit-MONSTER/llama.cpp1bit/hrx-bump-e3e6a976). This merges AMD's hrx-graph-develop-v243b0ec2c4into our line, keeping our ggml-hrx. It also renames the corpus predicatemul(tomultiple_of(and adds a bound on the ARGSORT rank.Already measured on strixhalo 2026-10-17 against the old pins: test-backend-ops -b HRX0 1141/1141 x3; long-prompt needles 20/20, 5/5, 5/5; FA stress identical; KLD 0 and identical output on Qwen3-0.6B and ZAYA1-8B; pp512 +4.4% / +7.8%, tg128 +2.5% / +2.8%.
Final validation, on strixhalo at engine main d344381 with exactly these pins, against the old pins (performance mode):
generate_stubs.py --checkagainst the built libamdhip64.so: "up to date: 540 reference symbols, 214 generated forwarders, node set matches amdhip64.map", exit 0.test-backend-ops -b HRX01141/1141 x2; hw-gate ops 611/611.-o MUL_MAT347/347 x10 on both pins. The single case f32 m=1 n=1 k=2048 failed 1/201 on the new pins and 2/201 on the old. It is the same kernel on both (common.mul_mat.f32_f32_decode), so this is the known HRX: intermittent MUL_MAT f32 m=1 n=1 k=2048 error on common.mul_mat.f32_f32_decode (about 1 in 40 runs at fork tip e44c9d0) #370 flake, not a regression.tests/hrx_long_prompt.py5/5; FA stress 0/20 bad. No NaN lines anywhere.scripts/hw-gate.shpasses ops, needle, and kat on qwen3-0.6b, zaya1-8b and qwen3.8-27b. The four 0.6B kat warnings are identical on the old pins. Its KLD step reports FAIL only because the box has no recorded KLD base files, so it fails for any pin.1bit serve --device hrxgives 5/5 identical temp-0 outputs on Qwen3-0.6B and on ZAYA1-8B;tests/serve_e2e.shhrx and cpu both PASS.hrx-backend-testdoesn't build on either pin. That is HRX: hrx-backend-test cannot build at fork tip ad18320a (deleted dispatch-symmetric-i4.h still included) #422, being fixed on this line.1bit/hrx-vulkan-patchedhas been fast-forwarded to 8d9ce2c1a, and tagpatched-1a5dcba2keeps the old tip.The hold stays, now naming d3c731e1, so later AMD hrx-system moves stay manual. hrx-system fork #6 (generate_stubs.py canonical signatures) is replayed on top as a clean cherry-pick. It was never in a shipped pin. The validation also runs
generate_stubs.py --checkagainst the built libamdhip64.so.🤖 Generated with Claude Code