fix(docker): build the ROCm image on ROCm 7.2.4

Merged
DA
3d ago
+24-22

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:109 calls __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), launched ds4_indexer_score_decode_wmma_kernel outside #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_VERSION 6.4.1 → 7.2.4, on Ubuntu 24.04 (base rocm/dev-ubuntu-24.04:7.2.4). ROCm 7.2's CMake package files use block(), 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, so UV_PYTHON_PREFERENCE=only-managed keeps uv's managed build under /opt/uv, as in the CUDA image (without it the final chmod of /opt/uv failed). 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-local on 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/version in the image is 7.2.4;
    • test_server_unit: 658 passed, 2 skipped;
    • luce_server --list-devices sees 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