Repository navigation
build(nix): add a ROCm 10.1.0 evaluation build - #741
Merged
Merged
Conversation
fedeizzo
force-pushed
the
fedeizzo/rocm-10.1
branch
from
October 23, 2026 19:16
551f9e2 to
a275ef2
Compare
fedeizzo
force-pushed
the
fedeizzo/rocm-10.1
branch
from
October 23, 2026 19:17
a275ef2 to
e998567
Compare
fedeizzo
marked this pull request as ready for review
October 23, 2026 19:17
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
A side-by-side ROCm 10.1.0 build of Gufo, so the toolchain can be measured and qualified without moving the 7.2.3 pin. The default package, release output, checks and development shell are unchanged; the default ROCr derivation is identical to
main.This supersedes the packaging in #228 (a vendored ROCm 10.0 module tree). That PR's investigation notes and negative results still apply; its
prefill_quant_gemm.hipSLP hunk is a no-op on currentmain(#459 removed those spills).Changes
build(nix)nixpkgs-rocm10, pinned to the head of rocmPackages: 7.2.3 -> 10.1.0 NixOS/nixpkgs#573885 (925eadb6, ROCm 7.2.3 → 10.1.0, HIP Clang 24). The whole package set comes from that commit, so glibc, stdenv and the ROCm compiler stay consistent.packages.rocm10usesrocmPackages.gfx1151, which builds the kernel libraries for gfx1151 only.devShells.rocm10leaves out the ROCm torch reference tools, which would mean rebuilding torch.rocr-fixed-cwsr-rocm10.patchrebases the queue-memory patch onto ROCr 1.21:queues.chunk follows the move toctx->hsakmt_is_svm_api_supported.MemoryRegion::Locknow clearsNonPagedfor caller-registered memory. ROCr 10.1 passes the region flags toRegisterMemory/MakeMemoryResident, and libhsakmt rejectsNonPagedthere. Without this, every model load fails withmapped registration: invalid argument.fix(diagnose):gufo diagnosereported the hard-coded7.2.3regardless of the toolchain. It now reports therocm-coreversion Gufo was built against, when CMake finds it. On the Nix 7.2.3 package the output is unchanged. Builds without Nix now show the installed ROCm, and because the machine fingerprint includes that version, its ID changes when that ROCm is not 7.2.3.build(cmake):/opt/rocmwas appended toCMAKE_PREFIX_PATH, which CMake searches before the environment's prefixes. In a development shell on a host with its own/opt/rocm,find_package(hip)therefore resolved the host's HIP: the rocm10 shell mixed ROCm 7.2.3 headers into a clang 24 build and failed. The default shell had the same problem, unnoticed because this host's/opt/rocmis also 7.2.3./opt/rocmis now a system prefix, searched after the shell's ROCm. A system with only/opt/rocmstill finds it.nix buildis unaffected, since its sandbox has no/opt/rocm.Effect on the ROCm 7.2.3 build
main(8vh4vz32…-rocm-runtime-7.2.3.drv). The patch is selected by ROCr version, so 7.2.3 keeps the original patch.gufo diagnose, which still reports 7.2.3 on the Nix package.nix build,.#releaseandchecks.prnever evaluate the new input. Commands that evaluate every output (nix flake check,nix flake show) fetch the fork's nixpkgs source, but build nothing from it.build/rocm7innix developnow resolves HIP from Nix's clr 7.2.3 instead of the host's/opt/rocm/hip, and builds.Evidence so far
Strix Halo gfx1151, kernel 7.2.9, same source revision for both arms.
ROCm 10.1 build time: about 35 minutes for 71 derivations on 32 cores. There is no binary cache.
Queue-memory patch: with
HSAKMT_DEBUG_LEVEL=6, the patched ROCr 10.1 never printsAllocating GTT for CWSR; unpatched 10.1 prints it for every queue.The patch also matters for speed. Qwen3.8-27B UD-Q4_K_XL, one repetition each:
Qwen3.8 Flash-Next UD-Q4_K_XL, 7.2.3 vs 10.1. Two alternating runs per arm, 3 repetitions each, no codegen changes, tokens/s:
Three unrelated embedding servers stayed loaded on the GPU during these runs; I did not verify that they were idle. No quality check has been run yet.
Risks before switching the default
From NixOS/nixpkgs#573885
rocmPackages_10set. The pinned commit may be rewritten, or the fork branch removed;flake.lockkeeps the hash, but we would need to mirror the commit.clrfix is not done.llvmPackages_23base, because nixpkgs has nollvmPackages_24.In Gufo
-ffast-math, see ROCm 10 evaluation for gfx1151, and a clang 23 prefill fix #228), and 27B Q4--validate-prefillshifts slightly. Different output is expected; equal quality is not yet shown.real-true16onprefill_fp16.hip; no SLP onprefill_gemm.hipandsmall_batch_wave64.hip; aWmmaCausalAttention<32,16,false>spill fix). Q4 decode stays about 3% slower. None of those changes are in this PR.Qualification plan
Each stage compares the same revision on 7.2.3 and 10.1. A stage gates the next.
tools/ci/check-kernel-resources.py --compareacross the two toolchains, to list every kernel whose spills or VGPRs change.ctest --preset gpu-fastinnix develop .#rocm10: the Flash-Next, Qwen and DS4 operator oracles.--validate-prefillon Flash-Next, 27B Q4/Q8 and DS4.ds4.targetandds4.dspark.tests/functional/run.pyon Flash-Next across all four profiles: long-context, cache, tools, sampling, structured output and concurrency suites, plus api_agent.pyreplay with inspected tool results. Correctness is strict; timings use the per-request 5%/3 ms gate./proc/sys/vm/compact_memoryduring long Flash-Next generations, with no stalls, evictions or amdgpu/KFD errors indmesg.over_ram_qwen.pyanddevice_loss.py.dmesg.BENCHMARKS.mdset: Flash-Next, 27B Q4/Q8, DS4, and image/audio if 10.1 becomes the only toolchain.THIRD_PARTY_NOTICES.md) move to 10.1.The pin moves only after stages 1–5 pass and stage 6 has a source; the
rocm10output is then removed.