CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
238 lines
11 KiB
Docker
238 lines
11 KiB
Docker
# =============================================================================
|
|
# Multi-ROCm-version rocSHMEM smoketest
|
|
#
|
|
# Installs multiple ROCm versions side-by-side (6.3, 6.4, 7.0, 7.2 + 7.13/7.14 TheRock),
|
|
# builds rocshmem against a default subset, runs ping-pong smoketest + Python wheel.
|
|
#
|
|
# Build from local checkout:
|
|
# docker build -f docker/smoketest-rocm-multiversions/Dockerfile \
|
|
# --build-arg USE_SRC=. -t rocshmem-multiversion .
|
|
#
|
|
# Build from GitHub branch:
|
|
# docker build -f docker/smoketest-rocm-multiversions/Dockerfile \
|
|
# --build-arg ROCSHMEM_REF=develop -t rocshmem-multiversion .
|
|
#
|
|
# Add a TheRock nightly tarball from rocm.nightlies.amd.com:
|
|
# docker build ... \
|
|
# --build-arg ROCM_NIGHTLY_VERSION=10.1.0a20260731 \
|
|
# --build-arg ROCM_NIGHTLY_ARCH=gfx950 \
|
|
# -t rocshmem-multiversion .
|
|
# # Or resolve the latest automatically:
|
|
# docker build ... --build-arg ROCM_NIGHTLY_VERSION=latest \
|
|
# --build-arg ROCM_NIGHTLY_ARCH=gfx950 -t rocshmem-multiversion .
|
|
#
|
|
# Run (compile-only, no GPU needed):
|
|
# docker run --rm rocshmem-multiversion --build-only
|
|
#
|
|
# Run (with GPUs, full smoketest):
|
|
# docker run --rm --device=/dev/kfd --device=/dev/dri \
|
|
# --security-opt seccomp=unconfined rocshmem-multiversion
|
|
# =============================================================================
|
|
|
|
FROM ubuntu:24.04
|
|
|
|
ARG ROCM_LEGACY_VERSIONS="6.3.3 6.4.3 7.0.2 7.2.4"
|
|
ARG ROCM_THEROCK_VERSIONS="7.13 7.14"
|
|
ARG ROCM_THEROCK_GPU_TARGETS="gfx942 gfx950 gfx1250"
|
|
|
|
###############################################################################
|
|
# System dependencies
|
|
###############################################################################
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
build-essential autoconf automake libtool flex bison m4 \
|
|
git make cmake ninja-build pkg-config \
|
|
libnuma-dev libpthread-stubs0-dev libzstd-dev \
|
|
zip zlib1g-dev wget unzip gpg ca-certificates \
|
|
libssl-dev curl \
|
|
python3-pip python3-setuptools python3-venv python3-dev python3-yaml \
|
|
libibverbs-dev ibverbs-utils libibumad-dev libpci-dev librdmacm-dev \
|
|
rdma-core infiniband-diags \
|
|
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
|
|
###############################################################################
|
|
# ROCm legacy versions (traditional repo.radeon.com)
|
|
###############################################################################
|
|
RUN mkdir -p /etc/apt/keyrings \
|
|
&& wget -qO- https://repo.radeon.com/rocm/rocm.gpg.key \
|
|
| gpg --dearmor > /etc/apt/keyrings/rocm.gpg \
|
|
&& for ver in ${ROCM_LEGACY_VERSIONS}; do \
|
|
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] \
|
|
https://repo.radeon.com/rocm/apt/$ver noble main" \
|
|
>> /etc/apt/sources.list.d/rocm.list; \
|
|
done \
|
|
&& printf 'Package: *\nPin: release o=repo.radeon.com\nPin-Priority: 600\n' \
|
|
> /etc/apt/preferences.d/rocm-pin-600 \
|
|
&& apt-get update \
|
|
&& for ver in ${ROCM_LEGACY_VERSIONS}; do \
|
|
apt-get install -y rocm${ver}; \
|
|
done \
|
|
&& apt-get clean && rm -rf /var/lib/apt/lists/* \
|
|
&& { update-alternatives --query rocm >/dev/null 2>&1 && update-alternatives --remove-all rocm; }
|
|
|
|
###############################################################################
|
|
# ROCm TheRock versions (repo.amd.com)
|
|
###############################################################################
|
|
RUN wget -qO- https://repo.amd.com/rocm/packages/gpg/rocm.gpg \
|
|
| gpg --dearmor > /etc/apt/keyrings/amdrocm.gpg \
|
|
&& echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/amdrocm.gpg] \
|
|
https://repo.amd.com/rocm/packages-multi-arch/ubuntu2404 stable main" \
|
|
> /etc/apt/sources.list.d/amdrocm.list \
|
|
&& apt-get update \
|
|
&& for ver in ${ROCM_THEROCK_VERSIONS}; do \
|
|
pkgs="amdrocm-developer-tools${ver} amdrocm-runtime-dev${ver} amdrocm-runtime${ver} amdrocm-llvm${ver} amdrocm-sysdeps${ver}"; \
|
|
for gpu in ${ROCM_THEROCK_GPU_TARGETS}; do \
|
|
for pkg in "amdrocm-core${ver}-${gpu}" "amdrocm-core-dev${ver}-${gpu}"; do \
|
|
apt-cache show "${pkg}" >/dev/null 2>&1 && pkgs="${pkgs} ${pkg}"; \
|
|
done; \
|
|
done; \
|
|
apt-get install -y ${pkgs}; \
|
|
done \
|
|
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
|
|
###############################################################################
|
|
# UCX (shared across all ROCm versions, built against the newest)
|
|
###############################################################################
|
|
ARG UCX_COMMIT=b6a9d47fccce849c28111f05a7fa8f1c930ff17d
|
|
ARG UCX_INSTALL=/opt/ucx
|
|
RUN git clone https://github.com/ROCm/ucx.git /tmp/ucx \
|
|
&& cd /tmp/ucx && git checkout ${UCX_COMMIT} \
|
|
&& ./autogen.sh \
|
|
&& ./contrib/configure-release \
|
|
--prefix=${UCX_INSTALL} \
|
|
--with-rocm=/opt/rocm \
|
|
--enable-mt \
|
|
--without-go --without-java --without-cuda --without-knem \
|
|
&& make -j$(nproc) install \
|
|
&& rm -rf /tmp/ucx
|
|
ENV PATH="${UCX_INSTALL}/bin:${PATH}"
|
|
ENV LD_LIBRARY_PATH="${UCX_INSTALL}/lib:${LD_LIBRARY_PATH}"
|
|
|
|
###############################################################################
|
|
# OpenMPI (shared across all ROCm versions, internal PMIx/prrte)
|
|
###############################################################################
|
|
ARG OMPI_COMMIT=697a596dde68815fe50db3c2a75a42ddb41b5ef4
|
|
ARG OMPI_INSTALL=/opt/ompi
|
|
RUN git clone --recursive https://github.com/ROCm/ompi.git /tmp/ompi \
|
|
&& cd /tmp/ompi && git checkout ${OMPI_COMMIT} \
|
|
&& git submodule update --init --recursive \
|
|
&& python3 -m venv /tmp/ompi-venv \
|
|
&& /tmp/ompi-venv/bin/pip install -r docs/requirements.txt \
|
|
&& ./autogen.pl \
|
|
&& ./configure \
|
|
--prefix=${OMPI_INSTALL} \
|
|
--with-rocm=/opt/rocm \
|
|
--with-ucx=${UCX_INSTALL} \
|
|
--disable-oshmem \
|
|
--with-prrte=internal \
|
|
--with-hwloc=internal \
|
|
--with-libevent=internal \
|
|
--without-cuda \
|
|
--disable-mpi-fortran \
|
|
--without-ofi \
|
|
&& make -j$(nproc) install \
|
|
&& rm -rf /tmp/ompi /tmp/ompi-venv
|
|
ENV PATH="${OMPI_INSTALL}/bin:${PATH}"
|
|
RUN echo "${OMPI_INSTALL}/lib" > /etc/ld.so.conf.d/ompi.conf && ldconfig
|
|
|
|
###############################################################################
|
|
# TheRock from-source build (optional, opt-in with --build-arg BUILD_THEROCK=1)
|
|
# Builds rocshmem as a TheRock subproject to validate the super-build recipe.
|
|
# This is expensive (builds compiler + HIP + HSA from source).
|
|
###############################################################################
|
|
ARG BUILD_THEROCK=
|
|
ARG THEROCK_REF=main
|
|
ARG THEROCK_GPU_FAMILIES="gfx94X-all;gfx110X-all"
|
|
RUN if [ -n "${BUILD_THEROCK}" ]; then \
|
|
git clone https://github.com/ROCm/TheRock.git /app/therock \
|
|
&& cd /app/therock && git checkout ${THEROCK_REF} \
|
|
&& cmake -B build -GNinja . \
|
|
-DTHEROCK_ENABLE_ALL=OFF \
|
|
-DTHEROCK_ENABLE_ROCSHMEM=ON \
|
|
-DTHEROCK_AMDGPU_FAMILIES="${THEROCK_GPU_FAMILIES}" \
|
|
&& cmake --build build \
|
|
&& echo "TheRock super-build: OK"; \
|
|
fi
|
|
|
|
###############################################################################
|
|
# TheRock nightly tarball (optional)
|
|
# Downloads a pre-built nightly from https://rocm.nightlies.amd.com/tarball-multi-arch/
|
|
# and installs it under /opt/rocm-<version> so build_and_test.sh picks it up.
|
|
#
|
|
# ROCM_NIGHTLY_ARCH: GPU arch slice, e.g. gfx950, gfx94X (default: gfx94X)
|
|
# ROCM_NIGHTLY_VERSION: version+date string, e.g. 10.1.0a20260731
|
|
# Set to "latest" to auto-resolve the most recent build.
|
|
###############################################################################
|
|
ARG ROCM_NIGHTLY_VERSION=
|
|
ARG ROCM_NIGHTLY_ARCH=gfx94X
|
|
ARG ROCM_NIGHTLY_BASE_URL=https://rocm.nightlies.amd.com/tarball-multi-arch
|
|
RUN if [ -n "${ROCM_NIGHTLY_VERSION}" ]; then \
|
|
arch="${ROCM_NIGHTLY_ARCH}" \
|
|
&& ver="${ROCM_NIGHTLY_VERSION}" \
|
|
&& if [ "${ver}" = "latest" ]; then \
|
|
ver=$(curl -fsSL "${ROCM_NIGHTLY_BASE_URL}/" \
|
|
| grep -oE "therock-dist-linux-${arch}-dcgpu-[0-9]+\.[0-9]+\.[0-9]+a[0-9]+\.tar\.gz" \
|
|
| sed "s/therock-dist-linux-${arch}-dcgpu-//;s/\.tar\.gz//" \
|
|
| sort -t'a' -k1,1V -k2,2n | tail -1); \
|
|
echo "Resolved latest nightly: ${ver}"; \
|
|
fi \
|
|
&& tarball="therock-dist-linux-${arch}-dcgpu-${ver}.tar.gz" \
|
|
&& dest="/opt/rocm-${ver}" \
|
|
&& mkdir -p "${dest}" \
|
|
&& echo "Downloading ${tarball} -> ${dest}" \
|
|
&& curl -fSL "${ROCM_NIGHTLY_BASE_URL}/${tarball}" \
|
|
| tar -xz -C "${dest}" \
|
|
&& echo "Installed TheRock nightly ${ver} at ${dest}"; \
|
|
fi
|
|
|
|
###############################################################################
|
|
# Python venv + wheel dependencies
|
|
###############################################################################
|
|
# Install Python build deps declared in rocshmem's own pyproject.toml into a
|
|
# dedicated venv so the system Python install is not modified.
|
|
# COPY from local context so local changes are respected (works for both
|
|
# USE_SRC and ROCSHMEM_REF builds since the build context is always local).
|
|
COPY python/pyproject.toml /tmp/rocshmem-pyproject.toml
|
|
ENV ROCSHMEM_VENV=/opt/rocshmem-venv
|
|
RUN python3 -m venv ${ROCSHMEM_VENV} \
|
|
&& ${ROCSHMEM_VENV}/bin/pip install \
|
|
$(python3 -c "import tomllib; f=open('/tmp/rocshmem-pyproject.toml','rb'); d=tomllib.load(f); print(' '.join(d.get('build-system',{}).get('requires',[])))") \
|
|
pytest \
|
|
pyyaml
|
|
ENV PATH="${ROCSHMEM_VENV}/bin:${PATH}"
|
|
|
|
###############################################################################
|
|
# Environment
|
|
###############################################################################
|
|
WORKDIR /app
|
|
ENV OMPI_ALLOW_RUN_AS_ROOT=1 \
|
|
OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 \
|
|
ROCSHMEM_HEAP_SIZE=6442450944
|
|
ENV ROCSHMEM_SRC=/app/rocshmem
|
|
|
|
###############################################################################
|
|
# Driver script (changes rarely, cached separately from source)
|
|
###############################################################################
|
|
COPY docker/smoketest-rocm-multiversions/build_and_test.sh /app/build_and_test.sh
|
|
|
|
###############################################################################
|
|
# rocshmem source — LAST so that source changes don't rebuild expensive layers
|
|
###############################################################################
|
|
ARG USE_SRC=
|
|
ARG ROCSHMEM_REF=develop
|
|
|
|
COPY . /app/rocshmem-context/
|
|
|
|
RUN if [ -n "${USE_SRC}" ]; then \
|
|
ln -s /app/rocshmem-context /app/rocshmem; \
|
|
else \
|
|
git clone --no-checkout --filter=blob:none \
|
|
https://github.com/ROCm/rocm-systems.git /app/rocm-systems \
|
|
&& cd /app/rocm-systems \
|
|
&& git sparse-checkout set --cone projects/rocshmem \
|
|
&& git checkout ${ROCSHMEM_REF} \
|
|
&& ln -s /app/rocm-systems/projects/rocshmem /app/rocshmem; \
|
|
fi
|
|
|
|
ENTRYPOINT ["/app/build_and_test.sh"]
|