Files
TheRock/rocm-systems/projects/rocshmem/docker/smoketest-rocm-multiversions/Dockerfile
T
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

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"]