Files
TheRock/rocm-libraries/projects/miopen/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

394 lines
15 KiB
Docker
Executable File

# Copyright © Advanced Micro Devices, Inc., or its affiliates.
# SPDX-License-Identifier: MIT
ARG BUILD_TYPE=prebuilt
ARG THEROCK_BASE_IMAGE=rocm/miopen:therock
# ============================================================================
# Common base image with all dependencies
# ============================================================================
FROM ubuntu:24.04 AS base
ARG CCACHE_COMMIT=8c107aada09df2a40930d7064bbec8120ee76c91
ENV DEBIAN_FRONTEND=noninteractive
ENV HIP_PLATFORM=amd
ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
# Setup ubsan environment to printstacktrace
ENV UBSAN_OPTIONS=print_stacktrace=1
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
# Install dependencies
RUN apt-get update && apt-get install -y --allow-unauthenticated \
apt-utils \
automake \
bison \
build-essential \
ca-certificates \
cmake \
curl \
doxygen \
flex \
g++ \
gdb \
gfortran \
git \
git-lfs \
gnupg2 \
lbzip2 \
lcov \
libegl1-mesa-dev \
libncurses5-dev \
libnuma-dev \
libtool \
ninja-build \
patchelf \
pkg-config \
python3-dev \
python3-pip \
python3-venv \
redis \
rpm \
rsync \
software-properties-common \
stunnel \
sudo \
texinfo \
unzip \
vim \
wget \
xxd
# Install DVC
RUN mkdir -p /etc/apt/keyrings && \
wget -qO - https://dvc.org/deb/iterative.asc | sudo gpg --dearmor -o /etc/apt/keyrings/packages.iterative.gpg && \
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/packages.iterative.gpg] https://dvc.org/deb/ stable main" | sudo tee /etc/apt/sources.list.d/dvc.list && \
chmod 644 /etc/apt/keyrings/packages.iterative.gpg /etc/apt/sources.list.d/dvc.list && \
apt-get update && apt-get install -y dvc && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Install an init system
RUN wget -O /tmp/ccache.tar.gz https://github.com/ccache/ccache/archive/${CCACHE_COMMIT}.tar.gz && \
tar zxvf /tmp/ccache.tar.gz -C /tmp/ && mkdir /tmp/ccache-${CCACHE_COMMIT}/build && \
cd /tmp/ccache-${CCACHE_COMMIT}/build && \
cmake -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON .. && make -j install && rm -rf /tmp/* && \
ccache -s && \
cd /
# Purge packages conflicting with doc-requirements
RUN apt-get remove --purge -y python3-pyparsing python3-cryptography python3-jwt
# Add requirements files
ADD miopen/docs/sphinx/requirements.txt /doc-requirements.txt
# Install doc requirements
RUN pip3 install --break-system-packages -r /doc-requirements.txt && \
# Install an init system
wget https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64.deb && \
dpkg -i dumb-init_*.deb && rm dumb-init_*.deb && \
# Install cget && rbuild
pip3 install --break-system-packages https://github.com/pfultz2/cget/archive/b5dd36cafa2804e6146c5021eb2469c4b2d3ad42.tar.gz && \
pip3 install --break-system-packages https://github.com/RadeonOpenCompute/rbuild/archive/c33b1a7e74ae7f72379364b523f73d30fd4d765c.tar.gz && \
# Install pre-commit and clang-format pinned to match .pre-commit-config.yaml mirrors-clang-format rev
pip3 install --break-system-packages pre-commit clang-format==18.1.4 && \
# groupadd render && video
groupadd -f render && \
groupadd -f video && \
usermod -a -G render,video root
# ========================================================================================
# NIGHTLY: Build from source stage - clones and builds projects from TheRock that MIOpen
# depends on, with the exception of CK and external MIOpen deps which are built separately
# ========================================================================================
FROM base AS build_therock
ARG THEROCK_ASIC=gfx90a
ARG THEROCK_GIT_HASH=default
ARG THEROCK_BUILD_MODE=Release
ARG THEROCK_BUILD_PRESET=linux-release-package
ARG BUILD_JOBS=0
ARG ROCM_LIBRARIES_REF=default
ARG ROCM_SYSTEMS_REF=default
ARG USE_FIN="OFF"
ARG PREFIX=/usr/local
RUN git config --global user.email "docker@build.local" && \
git config --global user.name "Docker Build"
RUN git clone https://github.com/ROCm/TheRock.git
WORKDIR /TheRock
RUN if [ "$THEROCK_GIT_HASH" != "default" ]; then \
echo "Checking out specific hash: $THEROCK_GIT_HASH"; \
git fetch; \
git checkout $THEROCK_GIT_HASH; \
else \
echo "Using default branch"; \
fi
# Update rocm-libraries submodule to specific ref if provided
# we need to commit the change so that fetch_sources.py does not overwrite the change
RUN if [ "$ROCM_LIBRARIES_REF" != "default" ]; then \
echo "Updating rocm-libraries submodule to: $ROCM_LIBRARIES_REF"; \
git submodule update --init rocm-libraries && \
cd rocm-libraries && \
git fetch origin && \
git checkout $ROCM_LIBRARIES_REF && \
cd .. && \
git add rocm-libraries && \
git commit -m "Update rocm-libraries submodule to $ROCM_LIBRARIES_REF"; \
fi
# Update rocm-systems submodule to specific ref if provided
# we need to commit the change so that fetch_sources.py does not overwrite the change
RUN if [ "$ROCM_SYSTEMS_REF" != "default" ]; then \
echo "Updating rocm-systems submodule to: $ROCM_SYSTEMS_REF"; \
git submodule update --init rocm-systems && \
cd rocm-systems && \
git fetch origin && \
git checkout $ROCM_SYSTEMS_REF && \
cd .. && \
git add rocm-systems && \
git commit -m "Update rocm-systems submodule to $ROCM_SYSTEMS_REF"; \
fi
RUN python3 -m venv /opt/venv
# Adding the venv into the path activates the python virtual env in a way. We cant source it the
# normal way due to how dockerfiles run
ENV PATH="/opt/venv/bin:$PATH"
RUN pip install -r requirements.txt
RUN git config --global url."https://github.com/".insteadOf git@github.com: && \
git config --global credential.helper "!f() { echo username=anonymous; echo password=; }; f" && \
python ./build_tools/fetch_sources.py
RUN mkdir build
WORKDIR /TheRock/build
RUN if [ "$THEROCK_BUILD_MODE" = "Preset" ]; then \
echo "Building with TheRock preset: $THEROCK_BUILD_PRESET"; \
cmake .. \
--preset=$THEROCK_BUILD_PRESET \
-DCMAKE_INSTALL_PREFIX=/opt/rocm \
-DTHEROCK_ENABLE_ALL=OFF \
-DTHEROCK_ENABLE_PROFILER=ON \
-DTHEROCK_ENABLE_SYSDEPS=ON \
-DTHEROCK_ENABLE_BASE=ON \
-DTHEROCK_ENABLE_COMPILER=ON \
-DTHEROCK_ENABLE_CORE_RUNTIME=ON \
-DTHEROCK_ENABLE_HOST_BLAS=ON \
-DTHEROCK_ENABLE_HOST_SUITE_SPARSE=ON \
-DTHEROCK_ENABLE_HIP_RUNTIME=ON \
-DTHEROCK_ENABLE_OCL_RUNTIME=ON \
-DTHEROCK_ENABLE_ROCPROFV3=ON \
-DTHEROCK_ENABLE_ROCPROFILER_COMPUTE=ON \
-DTHEROCK_ENABLE_BLAS=ON \
-DTHEROCK_ENABLE_RAND=ON \
-DTHEROCK_ENABLE_ROCPROFSYS=ON \
-DTHEROCK_ENABLE_ROCPROF_TRACE_DECODER_BINARY=ON \
-DTHEROCK_ENABLE_ROCGDB=ON \
-DTHEROCK_AMDGPU_DIST_BUNDLE_NAME=multiarch \
-DTHEROCK_FLAG_KPACK_SPLIT_ARTIFACTS=OFF \
-DTHEROCK_AMDGPU_FAMILIES=$THEROCK_ASIC; \
else \
echo "Building with CMake build type: $THEROCK_BUILD_MODE"; \
cmake .. \
-GNinja \
-DCMAKE_BUILD_TYPE=$THEROCK_BUILD_MODE \
-DCMAKE_INSTALL_PREFIX=/opt/rocm \
-DTHEROCK_ENABLE_ALL=OFF \
-DTHEROCK_ENABLE_PROFILER=ON \
-DTHEROCK_ENABLE_SYSDEPS=ON \
-DTHEROCK_ENABLE_BASE=ON \
-DTHEROCK_ENABLE_COMPILER=ON \
-DTHEROCK_ENABLE_CORE_RUNTIME=ON \
-DTHEROCK_ENABLE_HOST_BLAS=ON \
-DTHEROCK_ENABLE_HOST_SUITE_SPARSE=ON \
-DTHEROCK_ENABLE_HIP_RUNTIME=ON \
-DTHEROCK_ENABLE_OCL_RUNTIME=ON \
-DTHEROCK_ENABLE_ROCPROFV3=ON \
-DTHEROCK_ENABLE_ROCPROFILER_COMPUTE=ON \
-DTHEROCK_ENABLE_BLAS=ON \
-DTHEROCK_ENABLE_RAND=ON \
-DTHEROCK_ENABLE_ROCPROFSYS=ON \
-DTHEROCK_ENABLE_ROCPROF_TRACE_DECODER_BINARY=ON \
-DTHEROCK_ENABLE_ROCGDB=ON \
-DTHEROCK_AMDGPU_DIST_BUNDLE_NAME=multiarch \
-DTHEROCK_BUILD_TESTING=OFF \
-DTHEROCK_FLAG_KPACK_SPLIT_ARTIFACTS=OFF \
-DTHEROCK_AMDGPU_FAMILIES=$THEROCK_ASIC; \
fi
RUN if [ "$BUILD_JOBS" = "0" ]; then \
cmake --build .; \
else \
echo "Building with $BUILD_JOBS parallel jobs"; \
cmake --build . -j$BUILD_JOBS; \
fi && \
cmake --install .
#============================================================================
# REGULAR: Use the pre-built ROCm image from TheRock to build the rest of
# the MIOpen environment
#============================================================================
FROM ${THEROCK_BASE_IMAGE} AS prebuilt_therock
# ============================================================================
# Select which build stage to use
# ============================================================================
FROM ${BUILD_TYPE}_therock AS therock
# ================================================================================
# REGULAR: Build and install other 3rd party deps using pre-built ROCm image
# ================================================================================
FROM base AS miopen_deps
COPY --from=therock /opt/rocm /opt/rocm
ARG THEROCK_ASIC=gfx90a
ARG PREFIX="/usr/local"
ARG USE_FIN="OFF"
# Add requirements files
ADD miopen/rbuild.ini /rbuild.ini
ADD miopen/requirements.txt /requirements.txt
ADD miopen/dev-requirements.txt /dev-requirements.txt
# rbuild is used to trigger build of requirements.txt, dev-requirements.txt.
# Composable Kernel install separated from rbuild
# Remove components that are already built by TheRock.
RUN cd / && \
sed -i '/composablekernel/d; /half/d; /nlohmann/d' /requirements.txt && \
if [ "$USE_FIN" = "ON" ]; then \
rbuild prepare -s fin -d ${PREFIX} -DGPU_ARCHS="${THEROCK_ASIC}"; \
else \
rbuild prepare -s develop -d ${PREFIX} -DGPU_ARCHS="${THEROCK_ASIC}"; \
fi
# ================================================================================
# NIGHTLY target: push this image as rocm/miopen:therock
# ================================================================================
FROM scratch AS update_therock
COPY --from=miopen_deps /opt/rocm /opt/rocm
COPY --from=miopen_deps /usr/local /usr/local
# ============================================================================
# Build and install CK
# ============================================================================
FROM miopen_deps AS build_ck
ARG THEROCK_ASIC=gfx90a
ADD miopen/script/redis-cli.conf /redis-cli.conf
ADD miopen/script/sccache_wrapper.sh /sccache_wrapper.sh
## Sccache binary built from source for ROCm, only install if MIOPEN_SCCACHE is defined
ENV SCCACHE_VERSION="0.14.0"
ENV SCCACHE_INSTALL_LOCATION=/usr/local/.cargo/bin
ENV PATH=$PATH:${SCCACHE_INSTALL_LOCATION}
ARG MIOPEN_SCCACHE=""
ENV MIOPEN_SCCACHE=$MIOPEN_SCCACHE
ARG COMPILER_LAUNCHER=""
ARG MIOPEN_SCCACHE_CUSTOM_CACHE_BUSTER="MiOpen-Docker-CK"
ARG THEROCK_ASIC=""
ENV THEROCK_ASIC=${THEROCK_ASIC}
# Copy Composable Kernel
COPY /composablekernel /composable_kernel
# Build and install Composable Kernel
RUN set -x && \
echo Building for GPU Archs: ${THEROCK_ASIC} && \
if [ "$MIOPEN_SCCACHE" != "" ]; then \
mkdir -p ${SCCACHE_INSTALL_LOCATION} && \
wget -qO sccache.tar.gz https://github.com/mozilla/sccache/releases/download/v$SCCACHE_VERSION/sccache-v$SCCACHE_VERSION-x86_64-unknown-linux-musl.tar.gz && \
tar -xzf sccache.tar.gz --strip-components=1 -C ${SCCACHE_INSTALL_LOCATION} && \
chmod +x ${SCCACHE_INSTALL_LOCATION}/sccache && \
export ROCM_PATH=/opt/rocm && \
export SCCACHE_ENABLED=true && \
export SCCACHE_LOG_LEVEL=debug && \
export SCCACHE_IDLE_TIMEOUT=14400 && \
export COMPILERS_HASH_DIR=/tmp/.sccache && \
export SCCACHE_BIN=${SCCACHE_INSTALL_LOCATION}/sccache && \
export SCCACHE_EXTRAFILES=/tmp/.sccache/rocm_compilers_hash_file && \
export SCCACHE_REDIS="redis://$MIOPEN_SCCACHE" && \
cd / && \
echo "connect = $MIOPEN_SCCACHE" >> redis-cli.conf && \
export SCCACHE_C_CUSTOM_CACHE_BUSTER="${MIOPEN_SCCACHE_CUSTOM_CACHE_BUSTER}" && \
echo $SCCACHE_C_CUSTOM_CACHE_BUSTER && \
stunnel redis-cli.conf && \
export PATH=$PATH:${SCCACHE_INSTALL_LOCATION} && \
./sccache_wrapper.sh --enforce_redis; \
fi &&\
# Clear the ROCM_PATH TheRock causes HIP errors
unset ROCM_PATH && \
cd /composable_kernel && \
mkdir build && cd build && \
#Get the number of threads and RAM available
num_threads=$(nproc) && \
ram_gb=$(free -g | awk '/^Mem:/{print $7}') && \
# CK's ram req per thread is ~4 GB,
# so limit the number of threads accordingly
if [ "$num_threads" -le 0 ]; then \
num_threads=1; \
fi && \
if [ "$ram_gb" -lt $((num_threads * 4)) ]; then \
if [ "$ram_gb" -ge 4 ]; then \
num_threads=$((ram_gb / 4)); \
else \
num_threads=1; \
fi; \
fi && \
echo Building CK with ${num_threads} threads && \
CXX=/opt/rocm/llvm/bin/amdclang++ cmake \
-G Ninja \
-D CMAKE_PREFIX_PATH=/opt/rocm \
-D CMAKE_CXX_COMPILER_LAUNCHER=${COMPILER_LAUNCHER} \
-D CMAKE_HIP_COMPILER_LAUNCHER=${COMPILER_LAUNCHER} \
-D CMAKE_C_COMPILER_LAUNCHER=${COMPILER_LAUNCHER} \
-D CMAKE_BUILD_TYPE=Release \
-D GPU_TARGETS="${THEROCK_ASIC}" \
-D MIOPEN_REQ_LIBS_ONLY=ON \
-D HIPTENSOR_REQ_LIBS_ONLY=OFF \
-D CMAKE_CXX_FLAGS=" -O3 " .. && \
ninja -j ${num_threads} install && \
if [ "$MIOPEN_SCCACHE" != "" ]; then \
sccache -s; \
fi
# ============================================================================
# REGULAR target: final MIOpen development environment
# ============================================================================
FROM base AS miopen
COPY --from=build_ck /opt/rocm /opt/rocm
COPY --from=build_ck /usr/local /usr/local
# Install clang-tidy-21 from the LLVM apt repo.
# clang-format is installed via pip (see above) pinned to match .pre-commit-config.yaml.
RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - && \
echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-21 main" | sudo tee /etc/apt/sources.list.d/llvm21.list
RUN apt-get update && apt-get install -y \
clang-tidy-21 \
&& rm -rf /var/lib/apt/lists/*
# Workaround for broken clang-tidy in TheRock
RUN mv /opt/rocm/llvm/bin/clang-tidy /opt/rocm/llvm/bin/clang-tidy.disabled || true
RUN ln -sf /usr/bin/clang-tidy-21 /opt/rocm/llvm/bin/clang-tidy
# Use update-alternatives to set default clang-tidy version
RUN update-alternatives --install /opt/rocm/llvm/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-21 100
RUN update-alternatives --set clang-tidy /usr/bin/clang-tidy-21
# Ensure the dynamic linker can find ROCm libraries by adding /opt/rocm/lib to the linker cache.
RUN printf '%s\n' /opt/rocm/lib > /etc/ld.so.conf.d/rocm.conf && ldconfig
ENV HIP_PLATFORM=amd
ENV PATH="/opt/rocm/bin:/opt/rocm:${PATH}"
ENV ROCM_PATH=/opt/rocm
WORKDIR /workspace