You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Description
Adds a ROCm 7.2.4 SuperBench Docker image targeting AMD MI300X (gfx942) and MI355X (gfx950).
This replaces the outdated draft #814. It is rebuilt on top of rocm6.4.x.dockerfile as merged
in #837 and does not depend on the ROCm 7.0 PR (#854), which has been dropped in favor of this one.
ROCm 7.2 is the newest ROCm userspace supported on the 6.4.x amdgpu driver used by the current
fleet (per AMD's compatibility matrix), so it can be validated on existing MI300X/MI355X SKUs
without a driver upgrade.
Add dockerfile/rocm7.2.x.dockerfile, a new ROCm 7.2.4 image (Ubuntu 24.04, Python 3.12,
PyTorch 2.9.1). Base image: rocm/pytorch:rocm7.2.4_ubuntu24.04_py3.12_pytorch_release_2.9.1.
RCCL, rocBLAS and hipBLASLt sources are pinned to the rocm-7.2.4 tag that matches the base
image, so rebuilds are reproducible and the hipblaslt-bench headers match the installed libhipblaslt.so.
AMDGPU_TARGETS defaults to "gfx942 gfx950" and can be changed with --build-arg. The
value is cleaned up and passed to the micro-benchmark builds, rccl-tests, hipblaslt-bench
and TransformerEngine. If it is empty, CMAKE_HIP_ARCHITECTURES is left out of the
hipblaslt-bench build so CMake falls back to auto-detection.
Only hipblaslt-bench is built, against the hipBLASLt already in the base image. The
upstream 7.2 build pulls in AMD-internal "origami" headers and a new tensilelite-host
library even for client-only builds, so it is replaced by a small CMake file, dockerfile/etc/hipblaslt-bench-standalone.cmake. LAPACK/CBLAS come from hipBLASLt's
deps project. The hipBLASLt source and build folders are deleted afterwards.
TransformerEngine is pinned to v2.10_rocm. AMD tests that release on ROCm 7.2, and it
ships AOTriton 0.11.2b for gfx942 and gfx950. CK fused attention stays off, as in 6.4.
AOTriton is on only when every target is gfx942 or gfx950. onnxscript==0.7.2 and onnx==1.23.0 are installed up front, pinned to the versions validated with this
TE/torch combination.
CMake 3.25.3 is built when the base image's CMake is older. rocBLAS 7.2 needs at least
3.24.4, and the ROCm 7.2 hipblaslt-config.cmake uses block(), which needs 3.25 or later.
third_party/Makefile: add #include <cassert> to hipBusBandwidth.cpp when it is
missing. The ROCm 7 clang rejects assert() without it. The step does nothing if the
include is already there.
Add rocm7.2 to .github/workflows/build-image.yml with NUM_MAKE_JOBS=8. 7.2 skips the
memory-heavy Tensile library build that required 6.4's limit of 2.
Minor Revision
Carried over from Dockerfile - Add ROCm6.4 dockerfile #837: DOCA-Host 3.2.3 user-space OFED, Docker 29.6.2 client only, flex, removal of the real OpenMPI clone directory, apt-get clean, rm -rf .git, and an apt-get update before the third_party ROCm build.
Intel MLC v3.13 with SHA-256 verification, matching the other Dockerfiles on main.
gfortran added to the apt list, because LAPACK in hipBLASLt's deps needs it.
Build parallelism (OpenMPI, RCCL, hipblaslt-bench, TransformerEngine MAX_JOBS) follows NUM_MAKE_JOBS instead of $(nproc). CMAKE_POLICY_VERSION_MINIMUM=3.5 is set for
CMake 4.x, and the deps project's reserved install target is renamed.
Add tests/test_rocm72_dockerfile.py, a test that needs no Docker or GPU. It covers how AMDGPU_TARGETS is passed on (including the empty case), use of the standalone CMake file,
the rocm-7.2.4 source pins, MLC checksum verification and the apt refresh.
Refresh microsoft#814 on top of main, reusing the fixes absorbed in the ROCm 6.4 image (microsoft#837): AMDGPU_TARGETS routing (default gfx942 gfx950), DOCA-OFED user-space, client-only Docker 29.6.2, flex, CMake version check, OpenMPI clone cleanup and .git removal. hipblaslt-bench is built for the requested targets via a standalone CMake script against the system hipBLASLt, TransformerEngine is pinned to v2.10_rocm, and hipBusBandwidth gets a <cassert> include for the ROCm 7 clang.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…gure
Stop clearing the global CMAKE_POLICY_VERSION_MINIMUM=3.5 for the hipblaslt-bench configure step so CMake 4.x compatibility also applies to any nested project.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use the configured NUM_MAKE_JOBS limit instead of $(nproc) when building OpenMPI so the image build honors the CI job cap.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Nested RCCL build ignores configured make job limit
dockerfile/rocm7.2.x.dockerfile:199
The workflow supplies NUM_MAKE_JOBS=8 to this build, but this top-level rocm target still reaches rocm_rccl_tests, whose recipe invokes a nested make ... -j without a job count (third_party/Makefile:148). That bypasses the configured cap and can spawn unbounded RCCL-tests compile jobs on the self-hosted runner, causing avoidable CPU/memory pressure; propagate NUM_MAKE_JOBS to that sub-build (and the other nested builds) or use the make jobserver.
rocBLAS install.sh --dependencies runs apt-get install. When the earlier apt-get update layer is restored from the registry cache, its package index can be stale and fail with 404s on superseded Ubuntu packages (seen in the rocm6.4 PR gate once third_party changes invalidate later layers). Run apt-get update in the same layer as the third_party make.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
rocBLAS release/rocm-rel-7.2 install.sh and CMakeLists.txt require CMake >= 3.24.4; the ROCm 7.2 base image has no suitable CMake, so the previously bootstrapped 3.24.1 made the rocm_rocblas build fail.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The reason will be displayed to describe this comment to others. Learn more.
Copilot review overview
🔵 Needs a closer look
Three moderate build-configuration issues remain unresolved.
Review effort: Lite Findings: None
Previously missed (1)
In code that hasn't changed since last review
Nested ROCm builds bypass NUM_MAKE_JOBS with unbounded parallelism
dockerfile/rocm7.2.x.dockerfile:202
The workflow sets NUM_MAKE_JOBS=8, but this invokes the third_partyrocm aggregate, whose rocm_perftest and rocm_rccl_tests recipes run nested make -j without a value. Those sub-builds therefore use unlimited parallelism, bypass the configured cap, and can exhaust CPU or memory on the self-hosted runner. Pass the limit through those nested recipes (or replace the bare -j) before relying on this build limit.
The ROCm 7.2 hipblaslt-config.cmake uses the block() command added in CMake 3.25, and hipBLASLt 7.2 itself requires CMake 3.25.2. With 3.24.4, find_package(hipblaslt) in the rocBLAS clients build fails with 'Unknown CMake command \"block\"'.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The reason will be displayed to describe this comment to others. Learn more.
Copilot review overview
🔵 Needs a closer look
Recursive ROCm builds still use unbounded make -j, so the configured job limit may not prevent resource oversubscription.
Review effort: Lite Findings: None
Previously missed (1)
In code that hasn't changed since last review
Propagate NUM_MAKE_JOBS to nested ROCm builds
dockerfile/rocm7.2.x.dockerfile:202
This top-level make rocm still invokes several ROCm recipes whose nested commands use unbounded make -j (for example rocm_perftest and rocm_rccl_tests), so the workflow's NUM_MAKE_JOBS=8 does not cap the main third-party build. On the shared self-hosted runner this can oversubscribe CPU and memory despite the explicit caps on OpenMPI, RCCL, and hipBLASLt; pass the job limit through the Makefile's recursive builds (and any relevant upstream install scripts) rather than relying only on the later Dockerfile commands.
The remaining note about unbounded make -j in the nested third_party ROCm targets (rocm_perftest, rocm_rccl_tests, fio) applies to the shared third_party/Makefile used by every image, not to this Dockerfile. NUM_MAKE_JOBS is already visible to that make because Docker exposes ARG values to RUN. The targets just don't consume it. The same targets build fine in the ROCm 6.3, 6.4 and 7.0 images, so I'd rather cap them in a separate Makefile PR than widen this one.
The Docker build rocm6.3 failure is a transient Ansible Galaxy timeout during make postinstall (The read operation timed out calling galaxy.ansible.com), not related to this PR. The 6.3 image isn't touched here and built successfully on earlier pushes; rocm6.4 and rocm7.2 pass on fa2e0c0. Could someone with write access re-run the failed job?
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the rework. The image build and arch routing look good. Main asks: pin the hipBLASLt source to the rocm-7.2.4 tag so the bench headers match the installed library, and handle an empty AMDGPU_TARGETS in the hipBLASLt configure step. The rest are smaller hygiene suggestions.
Resolve the rocm6.4.x.dockerfile conflict by taking main's version, which already refreshes the apt index before the third_party ROCm build.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Pin hipBLASLt, RCCL and rocBLAS sources to the rocm-7.2.4 tag matching the base image, so the hipblaslt-bench headers stay in lockstep with the installed libhipblaslt.so and rebuilds are reproducible.
- Only pass CMAKE_HIP_ARCHITECTURES to the hipblaslt-bench configure when AMDGPU_TARGETS is non-empty; CMake rejects a defined-but-empty value.
- Add gfortran to the apt list (needed for LAPACK in hipBLASLt deps).
- Pin onnxscript 0.7.2 and onnx 1.23.0, the versions validated with TE v2.10_rocm.
- Remove the hipBLASLt source/build trees after copying hipblaslt-bench.
- Drop the unused HIPBLASLT_INTERNAL_API define from the standalone CMake.
- Bump Intel MLC to v3.13 with checksum verification, matching main.
- Update tests: empty targets omit the architecture flag; add tag pin, MLC and apt refresh checks.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
7.2 is already in build-image.yml, in the same format as the 6.4 entry, but with NUM_MAKE_JOBS=8 because 7.2 doesn't build the Tensile library that needed 6.4's limit of 2. Did you mean a different pipeline, or should I match 6.4 with NUM_MAKE_JOBS=2?
Nguyen Vuong (@normanvuong) I meant the same image-build pipeline. I see ROCm 7.2 is already included, so please keep NUM_MAKE_JOBS=8.
I checked the ROCm 6.4 history: the gfx942-only hipBLASLt/Tensile build was still killed with exit code 137 at 8 workers, so c7ccd245 reduced it to 2 and narrowed the Tensile logic catalog as a build-memory workaround.
Since ROCm 7.2 builds only hipblaslt-bench against the preinstalled hipBLASLt library and skips Tensile library generation, it does not need to inherit that 2-job limit.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
The image build, the standalone hipblaslt-bench CMake configure and compile, and the TransformerEngine AOTriton routing were not validated by execution, and the rocm7.2 build that passed on fa2e0c0 predates the review fixes and still needs a fresh run on the final commit.
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
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.
Description
Adds a ROCm 7.2.4 SuperBench Docker image targeting AMD MI300X (gfx942) and MI355X (gfx950).
This replaces the outdated draft #814. It is rebuilt on top of
rocm6.4.x.dockerfileas mergedin #837 and does not depend on the ROCm 7.0 PR (#854), which has been dropped in favor of this one.
ROCm 7.2 is the newest ROCm userspace supported on the 6.4.x amdgpu driver used by the current
fleet (per AMD's compatibility matrix), so it can be validated on existing MI300X/MI355X SKUs
without a driver upgrade.
Supersedes #814.
Major Revision
dockerfile/rocm7.2.x.dockerfile, a new ROCm 7.2.4 image (Ubuntu 24.04, Python 3.12,PyTorch 2.9.1). Base image:
rocm/pytorch:rocm7.2.4_ubuntu24.04_py3.12_pytorch_release_2.9.1.rocm-7.2.4tag that matches the baseimage, so rebuilds are reproducible and the hipblaslt-bench headers match the installed
libhipblaslt.so.AMDGPU_TARGETSdefaults to"gfx942 gfx950"and can be changed with--build-arg. Thevalue is cleaned up and passed to the micro-benchmark builds, rccl-tests, hipblaslt-bench
and TransformerEngine. If it is empty,
CMAKE_HIP_ARCHITECTURESis left out of thehipblaslt-bench build so CMake falls back to auto-detection.
hipblaslt-benchis built, against the hipBLASLt already in the base image. Theupstream 7.2 build pulls in AMD-internal "origami" headers and a new tensilelite-host
library even for client-only builds, so it is replaced by a small CMake file,
dockerfile/etc/hipblaslt-bench-standalone.cmake. LAPACK/CBLAS come from hipBLASLt'sdeps project. The hipBLASLt source and build folders are deleted afterwards.
v2.10_rocm. AMD tests that release on ROCm 7.2, and itships AOTriton 0.11.2b for gfx942 and gfx950. CK fused attention stays off, as in 6.4.
AOTriton is on only when every target is gfx942 or gfx950.
onnxscript==0.7.2andonnx==1.23.0are installed up front, pinned to the versions validated with thisTE/torch combination.
3.24.4, and the ROCm 7.2
hipblaslt-config.cmakeusesblock(), which needs 3.25 or later.third_party/Makefile: add#include <cassert>tohipBusBandwidth.cppwhen it ismissing. The ROCm 7 clang rejects
assert()without it. The step does nothing if theinclude is already there.
rocm7.2to.github/workflows/build-image.ymlwithNUM_MAKE_JOBS=8. 7.2 skips thememory-heavy Tensile library build that required 6.4's limit of 2.
Minor Revision
flex, removal of the real OpenMPI clone directory,apt-get clean,rm -rf .git, and anapt-get updatebefore thethird_partyROCm build.main.gfortranadded to the apt list, because LAPACK in hipBLASLt's deps needs it.MAX_JOBS) followsNUM_MAKE_JOBSinstead of$(nproc).CMAKE_POLICY_VERSION_MINIMUM=3.5is set forCMake 4.x, and the deps project's reserved
installtarget is renamed.tests/test_rocm72_dockerfile.py, a test that needs no Docker or GPU. It covers howAMDGPU_TARGETSis passed on (including the empty case), use of the standalone CMake file,the
rocm-7.2.4source pins, MLC checksum verification and the apt refresh.Not included from #814
main(Enhancement - Fix hipblaslt-gemm result parsing for hipBLASLt v1500+ output format #791).Verification
tests/test_rocm72_dockerfile.pyandtests/test_rocm64_dockerfile.pypass.fa2e0c0; pending re-run after review fixes).