fix(docker): build the ROCm image on ROCm 7.2.4
Merged
DA
3d ago+24+24+01234567890123456789-22-22-01234567890123456789
What
The :rocm Docker image builds on ROCm 7.2.4 instead of 6.4.1, and one DS4 indexer call moves inside its rocWMMA guard.
Why
- The image was the only build left on ROCm 6.4.1. The self-hosted AMD CI runner compiles with
/opt/rocm-7.2.4, the Lucebox boxes run 7.2.4, and the README lists ROCm 7.2 for both supported AMD GPUs (R9700 and Strix Halo). - Every main push since 10-07 failed the ROCm image build. The last green one was
48f49bb1. Two changes compile on 7.2 but not on 6.4.1:mmid.cu:109calls__syncwarp()(#774). ROCm 6 declares the warp-sync builtins only on opt-in; ROCm 7 declares them by default.ds4-indexer.cu:986, the tokenwise path (#827), launchedds4_indexer_score_decode_wmma_kerneloutside#if DS4_INDEXER_WMMA_AVAILABLE. ROCm 6.4 ships rocWMMA 1.x, so the kernel isn't compiled there.
- PR checks never saw it. The Docker workflow runs on PRs only when Docker files change, and the AMD runner already builds with 7.2.4.
- A ROCm 7.x host already needed 7.x userspace. The Dockerfile notes that a 6.4.x userspace segfaults at model load against a 7.x host driver.
Changes
Dockerfile.rocm,docker-bake.hcl:ROCM_VERSION6.4.1 → 7.2.4, on Ubuntu 24.04 (baserocm/dev-ubuntu-24.04:7.2.4). ROCm 7.2's CMake package files useblock(), which needs CMake 3.25; Ubuntu 22.04 ships 3.22, and the 22.04 image stopped at configure. 24.04 has a Python 3.12 of its own, soUV_PYTHON_PREFERENCE=only-managedkeeps uv's managed build under/opt/uv, as in the CUDA image (without it the finalchmodof/opt/uvfailed). The notes say 7.2.4 is the tested stack and that the engine no longer builds on 6.x.ds4-indexer.cu: the tokenwise call is inside the existing rocWMMA 2.x guard, so a source build without rocWMMA 2.x compiles again. Every score then takes the scalar kernel, one token each, as the rest of that build already does.hip_compat/cuda_runtime.h: a comment said the CI runner was on ROCm 6.4.x.
Tested
- Full main-config image:
LUCE_HIP_ARCHES="gfx1151;gfx1100;gfx1200;gfx1201" docker buildx bake rocm-localon a Strix Halo + R9700 box. Configure, all 424 build steps and the runtime stage pass; the image is 26.6 GB. - Image smoke test on that box (host ROCm 7.2 driver):
/opt/rocm/.info/versionin the image is 7.2.4;test_server_unit: 658 passed, 2 skipped;luce_server --list-devicessees the R9700 (gfx1201) and the Strix Halo iGPU (gfx1151);- Qwen3-0.6B (BF16), served on each GPU, answers a chat request: "Three prime numbers are 2, 3, and 5."
- CI: this PR touches
Dockerfile.rocm, so the Docker workflow builds the ROCm image (gfx1201) here, and the AMD GPU jobs build the indexer change.
Not tested
- A host still on a ROCm 6.x kernel driver running the 7.2.4 image.
- gfx1100 and gfx1200 cards: their code objects build, but there's no such card to run them on.
🤖 Generated with Claude Code