chore(rocm): ROCm 7.14 / TheRock packaging support for AMD builds (base bump + build compat)#10978
chore(rocm): ROCm 7.14 / TheRock packaging support for AMD builds (base bump + build compat)#10978walcz-de wants to merge 3 commits into
Conversation
…1 / Strix Halo) ROCm 7.14 adds native gfx1151 (Strix Halo / RDNA 3.5) runtime support. The prebuilt ROCm images pinned rocm/dev-ubuntu-24.04:7.2.1, which predates gfx1151 support, so the published -gpu-rocm-hipblas-* images do not run on that hardware even though gfx1151 is already in AMDGPU_TARGETS. Bump the pin to rocm/dev-ubuntu-24.04:7.14.0-full everywhere it is referenced: - .github/backend-matrix.yml (all hipblas backend build entries) - .github/workflows/base-images.yml (base-grpc-rocm-amd64 gRPC cache is rebuilt on 7.14 so it stays ABI-compatible with the new runtime base) - .github/workflows/image.yml + image-pr.yml (core hipblas image) - .agents/*.md examples + backend/Dockerfile.base-grpc-builder comment Verified on gfx1151 / Strix Halo: a full ROCm 7.14 stack (LocalAI + llama.cpp hipblas, vLLM, embeddings/reranker) runs natively, no HSA_OVERRIDE_GFX_VERSION needed. Other AMD architectures (gfx908/90a/942/1030/1100/1200/1201) build on the same base and are covered by CI; I do not have that hardware to test at runtime. Signed-off-by: stefanwalcz <stefan.walcz@walcz.de>
…gister lib paths)
ROCm 7.x moved to 'TheRock' packaging. Bumping the base to
rocm/dev-ubuntu-24.04:7.14.0-full surfaces two build breakages, fixed here in
ALL THREE spots that installed the legacy ROCm dev metapackages:
1) Legacy hipblas-dev / hipblaslt-dev / rocblas-dev metapackages were removed
(consolidated + arch-split: amdrocm-blas<ver>-gfx*, amdrocm-blas-dev, ...).
'apt-get install' of the old names fails. The -full base already ships the
BLAS dev libs+headers, so the install is dropped in:
- Dockerfile (requirements-drivers) -> core image
- .docker/install-base-deps.sh (section 6) -> C++ backend builder
- backend/Dockerfile.python (hipblas block) -> Python backends (vllm,
sglang, transformers, diffusers, kokoro, ...)
2) TheRock scatters the ROCm libs across /opt/rocm/lib,
/opt/rocm/lib/rocm_sysdeps/lib and /opt/rocm/llvm/lib with no ld.so.conf.d
entry, so the dynamic linker can't resolve them and the built backends fail
at RUNTIME ('... cannot open shared object file') — a failure CI never sees
because it only surfaces when a backend loads on an AMD GPU. Fixed by
registering all three lib dirs in /etc/ld.so.conf.d/rocm.conf before ldconfig
in all three blocks.
Validated end-to-end on gfx1151 / Strix Halo (build + GPU inference, llama-cpp).
Ref: https://rocm.docs.amd.com/en/latest/about/transition-guide-TheRock.html
Signed-off-by: stefanwalcz <stefan.walcz@walcz.de>
a21c8a5 to
cd4e5f4
Compare
|
I reviewed this and found one missed ROCm 7.14 build path: The content checks pass locally ( |
Apply the same ROCm 7.14 dependency + linker-path migration to backend/Dockerfile.golang: the removed legacy hipblas-dev / hipblaslt-dev / rocblas-dev metapackages are no longer installed (the rocm/dev-ubuntu-*:*-full base already ships them), and TheRock's scattered ROCm lib dirs are registered in /etc/ld.so.conf.d/rocm.conf before ldconfig so cgo-based Go backends resolve the ROCm runtime libraries at build/link and runtime. Identified by the LocalAI maintenance bot; re-authored under my identity per DCO. Co-authored-by: localai-org-maint-bot <306269227+localai-org-maint-bot@users.noreply.github.com> Signed-off-by: stefanwalcz <stefan.walcz@walcz.de>
8c08804 to
23b2a98
Compare
|
Thanks for the catch — That makes it four ROCm build paths migrated to TheRock: the core |
vllm's ROCm install pulls a prebuilt wheel from wheels.vllm.ai/rocm, but that wheel exists only for CDNA data-center arches (gfx942/gfx950) and is pinned to a rocm7.2.3 torch that can't enumerate consumer/RDNA GPUs (device_count == 0 on e.g. gfx1151). No prebuilt vllm wheel exists for these GPUs anywhere, so build it from source against AMD's ROCm 7.14 torch -- reproducing the recipe AMD's own rocm/vllm:*_rdna_* image uses. - torch[device-gfx<arch>] + rocm-sdk-devel (hipcc + the HIP CMake packages the runtime SDK lacks) from AMD's multi-arch index; ROCM_PATH / CMAKE_PREFIX_PATH resolved from the SDK's own `rocm-sdk path` CLI -- self-contained, no system /opt/rocm needed. - vLLM detects ROCm at runtime via `import amdsmi`; register the SDK's in-place amd_smi with a .pth. A pip copy breaks its relative libamd_smi.so lookup, and forcing the lib via LD_LIBRARY_PATH shadows torch's own ROCm runtime and zeroes device_count. - run.sh exposes the bundled amdclang as CC/CXX: Triton JIT-compiles kernels at first inference and the runtime image ships hipcc but not cc/gcc, so without it inference dies with "Failed to find C compiler". Mirrors the CPU toolchain block just above it. - arch from AMDGPU_TARGETS (added in the multi-arch-torch change this stacks on), defaulting to gfx1151. Validated on gfx1151: builds from a single `make`, loads natively via LocalAI (no external gRPC) and generates. Only gfx1151 was hardware-tested; other AMD arches use the same mechanism but are unverified. Depends on mudler#10978 (ROCm 7.14 base) and the multi-arch-torch change it stacks on. Signed-off-by: stefanwalcz <stefan.walcz@walcz.de> (cherry picked from commit 836fe95)
What
Brings LocalAI's ROCm / hipblas build up to ROCm 7.14 and makes it compatible with AMD's new "TheRock" packaging.
This is a platform-wide change for AMD, not a single-GPU one. The base image, package layout and library paths it fixes apply to every architecture in
AMDGPU_TARGETS(gfx908 / gfx90a / gfx942 / gfx1030 / gfx1100 / gfx1101 / gfx1102 / gfx1151 / gfx1200 / gfx1201) — the ROCm/hipblas images simply do not build (and then do not load) on ROCm 7.14 until these are fixed, regardless of the target card. gfx1151 / Strix Halo is only the AMD hardware I had available to runtime-validate on.rocm/dev-ubuntu-24.04:7.2.1→:7.14.0-fullacrossbackend-matrix.yml,base-images.yml,image.yml/image-pr.yml, the.agents/*docs and theDockerfile.base-grpc-buildercomment.Follow-up to #10883, companion to the docs PR #9229.
Why — ROCm 7.x switched to "TheRock" packaging
See AMD's TheRock transition guide. A naive base bump breaks the AMD build in three ways (all fixed here, all architecture-agnostic):
Legacy
-devmetapackages removed.apt-get install hipblas-dev hipblaslt-dev rocblas-devfails (Unable to locate package) — they are consolidated + arch-split (amdrocm-blas<ver>-gfx*,amdrocm-blas-dev, …). The-fullbase already ships them, so the install is dropped in both places that used the legacy names (Dockerfilerequirements-drivers +.docker/install-base-deps.sh). Theamdcapability marker +ldconfigare kept.ROCm libs are scattered and not on the linker path. TheRock places libs under
/opt/rocm/lib,/opt/rocm/lib/rocm_sysdeps/liband/opt/rocm/llvm/libwith nold.so.conf.dentry. The ldd-based GPU-lib packaging (scripts/build/package-gpu-libs.sh) then silently skipslibrocm_kpack,librocm_sysdeps_*, rocBLAS, hipBLASLt, etc., and the built backend fails to load at runtime on the GPU (... cannot open shared object file). CI does not catch this — it only surfaces when the backend loads on an AMD GPU. Fixed by registering the three ROCm lib dirs in/etc/ld.so.conf.d/rocm.confbeforeldconfig, in both blocks.The base bump itself.
base-images.ymlrebuilds thebase-grpc-rocm-amd64gRPC cache on 7.14 so it stays ABI-compatible with the new runtime base.Testing
The build changes are architecture-agnostic — they fix the ROCm/hipblas image for all AMD architectures. I runtime-validated on the AMD hardware I have, gfx1151 / Strix Halo (Ryzen AI Max+ 395 / Radeon 8060S): the core image and the llama-cpp backend build, all ROCm libraries bundle (verified
lddresolves everything), and inference runs on the GPU — model loaded, tokens generated, no missing-lib errors.Since I only have one AMD GPU to test on, a maintainer or CI with other AMD cards (CDNA gfx908/90a/942, RDNA gfx1030/1100/…) should confirm — especially fix #2, which is a runtime-only failure.
(Aside, out of scope:
GGML_HIP_ROCWMMA_FATTNis not enabled in the llama-cpp build flags — a potential RDNA3 flash-attention perf win.)🤖 Generated with Claude Code
https://claude.ai/code/session_01NK35FML8epTCLBGwCor9et