From 0629307797ce82beb1f46a6efd6d701cd958a887 Mon Sep 17 00:00:00 2001 From: Stephen Nicholas Swatman Date: Mon, 22 Jul 2024 14:23:25 +0200 Subject: [PATCH] Add new Ubuntu 24.04 CUDA, ROCm, OneAPI machines This commit adds three new images based on Ubuntu 24.04, with OneAPI and, optionally, the AMD ROCm and NVIDIA CUDA plugins. --- .github/workflows/build-images.yml | 3 ++ ubuntu2404_cuda_oneapi/Dockerfile | 65 +++++++++++++++++++++++++++++ ubuntu2404_cuda_oneapi/oneapi.list | 1 + ubuntu2404_oneapi/Dockerfile | 34 +++++++++++++++ ubuntu2404_oneapi/oneapi.list | 1 + ubuntu2404_rocm_oneapi/Dockerfile | 57 +++++++++++++++++++++++++ ubuntu2404_rocm_oneapi/oneapi.list | 1 + ubuntu2404_rocm_oneapi/rocm-pin-600 | 3 ++ ubuntu2404_rocm_oneapi/rocm.list | 1 + 9 files changed, 166 insertions(+) create mode 100644 ubuntu2404_cuda_oneapi/Dockerfile create mode 100644 ubuntu2404_cuda_oneapi/oneapi.list create mode 100644 ubuntu2404_oneapi/Dockerfile create mode 100644 ubuntu2404_oneapi/oneapi.list create mode 100644 ubuntu2404_rocm_oneapi/Dockerfile create mode 100644 ubuntu2404_rocm_oneapi/oneapi.list create mode 100644 ubuntu2404_rocm_oneapi/rocm-pin-600 create mode 100644 ubuntu2404_rocm_oneapi/rocm.list diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml index 5ab89a2..5b91276 100644 --- a/.github/workflows/build-images.yml +++ b/.github/workflows/build-images.yml @@ -26,6 +26,9 @@ jobs: - ubuntu2204_rocm_clang - ubuntu2404 - ubuntu2404_cuda + - ubuntu2404_cuda_oneapi + - ubuntu2404_rocm_oneapi + - ubuntu2404_oneapi - alma9-base steps: - uses: actions/checkout@v4 diff --git a/ubuntu2404_cuda_oneapi/Dockerfile b/ubuntu2404_cuda_oneapi/Dockerfile new file mode 100644 index 0000000..3cac3ce --- /dev/null +++ b/ubuntu2404_cuda_oneapi/Dockerfile @@ -0,0 +1,65 @@ +# Docker machinery, part of the ACTS project +# +# (c) 2024 CERN for the benefit of the ACTS project +# +# Mozilla Public License Version 2.0 + +# Start from the (at the time of writing) latest Acts Ubuntu 24.04 image. +FROM ghcr.io/acts-project/ubuntu2404:53 + +# Some description for the image. +LABEL description="Ubuntu 24.04 with Acts dependencies and CUDA + oneAPI" +LABEL maintainer="Stephen Nicholas Swatman " + +# Add the Ubuntu 24.04 CUDA repository. +RUN curl -SL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb \ + -o cuda-keyring.deb && \ + dpkg -i cuda-keyring.deb && \ + rm cuda-keyring.deb + +# Install CUDA. +ARG CUDA_VERSION=12-5 +RUN apt-get update && \ + apt-get install -y cuda-compat-${CUDA_VERSION} cuda-cudart-${CUDA_VERSION} \ + cuda-libraries-dev-${CUDA_VERSION} \ + cuda-command-line-tools-${CUDA_VERSION} \ + cuda-minimal-build-${CUDA_VERSION} && \ + apt-get clean -y + +# Set up the CUDA environment. +ENV NVIDIA_VISIBLE_DEVICES=all +ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility +ENV PATH=/usr/local/cuda/bin:${PATH} +ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH} +ENV CUDAHOSTCXX="clang++" +ENV CUDAFLAGS="-allow-unsupported-compiler" + +# Set up the Intel package signing key. +RUN mkdir --parents --mode=0755 /etc/apt/keyrings && \ + curl -SL https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | \ + gpg --dearmor > /usr/share/keyrings/oneapi-archive-keyring.gpg + +# Set up the oneAPI repository. +COPY oneapi.list /etc/apt/sources.list.d/ + +# Install oneAPI. +ARG ONEAPI_VERSION=2024.2 +RUN apt-get update && \ + apt-get install -y intel-oneapi-compiler-dpcpp-cpp-${ONEAPI_VERSION} && \ + apt-get clean -y + +# Install the CodePlay NVIDIA plugin on top of oneAPI. +ARG CODEPLAY_PLUGIN_VERSION=2024.2 +RUN curl -SL \ + "https://developer.codeplay.com/api/v1/products/download?product=oneapi&variant=nvidia&version=${CODEPLAY_PLUGIN_VERSION}" \ + -o plugin.sh && \ + sh plugin.sh --install-dir /opt/intel/oneapi --yes && \ + rm plugin.sh + +# Set up the oneAPI environment. Note that one *MUST* source the +# /opt/intel/oneapi/setvars.sh script to make the following work. Which has to +# be done in the respective CI scripts. +ENV CC="icx" +ENV CXX="icpx" +ENV SYCLCXX="icpx" +ENV SYCLFLAGS="-fsycl -fsycl-targets=nvidia_gpu_sm_75 -Wno-unknown-cuda-version" diff --git a/ubuntu2404_cuda_oneapi/oneapi.list b/ubuntu2404_cuda_oneapi/oneapi.list new file mode 100644 index 0000000..3939bca --- /dev/null +++ b/ubuntu2404_cuda_oneapi/oneapi.list @@ -0,0 +1 @@ +deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main diff --git a/ubuntu2404_oneapi/Dockerfile b/ubuntu2404_oneapi/Dockerfile new file mode 100644 index 0000000..5476157 --- /dev/null +++ b/ubuntu2404_oneapi/Dockerfile @@ -0,0 +1,34 @@ +# Docker machinery, part of the ACTS project +# +# (c) 2024 CERN for the benefit of the ACTS project +# +# Mozilla Public License Version 2.0 + +# Start from the (at the time of writing) latest Acts Ubuntu 24.04 image. +FROM ghcr.io/acts-project/ubuntu2404:53 + +# Some description for the image. +LABEL description="Ubuntu 24.04 with Acts dependencies and oneAPI" +LABEL maintainer="Stephen Nicholas Swatman " + +# Set up the Intel package signing key. +RUN mkdir --parents --mode=0755 /etc/apt/keyrings && \ + curl -SL https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | \ + gpg --dearmor > /usr/share/keyrings/oneapi-archive-keyring.gpg + +# Set up the oneAPI repository. +COPY oneapi.list /etc/apt/sources.list.d/ + +# Install oneAPI. +ARG ONEAPI_VERSION=2024.2 +RUN apt-get update && \ + apt-get install -y intel-oneapi-compiler-dpcpp-cpp-${ONEAPI_VERSION} && \ + apt-get clean -y + +# Set up the environment. Note that one *MUST* source the +# /opt/intel/oneapi/setvars.sh script to make the following work. Which has to +# be done in the respective CI scripts. +ENV CC="icx" +ENV CXX="icpx" +ENV SYCLCXX="icpx" +ENV SYCLFLAGS="-fsycl -fsycl-targets=spir64,spir64_x86_64" diff --git a/ubuntu2404_oneapi/oneapi.list b/ubuntu2404_oneapi/oneapi.list new file mode 100644 index 0000000..3939bca --- /dev/null +++ b/ubuntu2404_oneapi/oneapi.list @@ -0,0 +1 @@ +deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main diff --git a/ubuntu2404_rocm_oneapi/Dockerfile b/ubuntu2404_rocm_oneapi/Dockerfile new file mode 100644 index 0000000..c66ff5c --- /dev/null +++ b/ubuntu2404_rocm_oneapi/Dockerfile @@ -0,0 +1,57 @@ +# Docker machinery, part of the ACTS project +# +# (c) 2024 CERN for the benefit of the ACTS project +# +# Mozilla Public License Version 2.0 + +# Start from the (at the time of writing) latest Acts Ubuntu 24.04 image. +FROM ghcr.io/acts-project/ubuntu2404:53 + +# Some description for the image. +LABEL description="Ubuntu 24.04 with Acts dependencies and ROCm/HIP + oneAPI" +LABEL maintainer="Stephen Nicholas Swatman " + +# Set up the ROCm package signing key. +RUN mkdir --parents --mode=0755 /etc/apt/keyrings && \ + curl -SL https://repo.radeon.com/rocm/rocm.gpg.key | \ + gpg --dearmor > /etc/apt/keyrings/rocm.gpg + +# Set up the ROCm repository. +COPY rocm.list /etc/apt/sources.list.d/ +COPY rocm-pin-600 /etc/apt/preferences.d/ + +# Install ROCm/HIP. +ARG ROCM_VERSION=6.1.0 +RUN apt-get update && \ + apt-get install -y rocm-hip-runtime-dev${ROCM_VERSION} && \ + apt-get clean -y +ENV HIP_PLATFORM=amd + +# Set up the Intel package signing key. +RUN curl -SL https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | \ + gpg --dearmor > /usr/share/keyrings/oneapi-archive-keyring.gpg + +# Set up the oneAPI repository. +COPY oneapi.list /etc/apt/sources.list.d/ + +# Install oneAPI. +ARG ONEAPI_VERSION=2024.2 +RUN apt-get update && \ + apt-get install -y intel-oneapi-compiler-dpcpp-cpp-${ONEAPI_VERSION} && \ + apt-get clean -y + +# Install the CodePlay AMD plugin on top of oneAPI. +ARG CODEPLAY_PLUGIN_VERSION=2024.2.0 +RUN curl -SL \ + "https://developer.codeplay.com/api/v1/products/download?product=oneapi&variant=amd&version=${CODEPLAY_PLUGIN_VERSION}" \ + -o plugin.sh && \ + sh plugin.sh --install-dir /opt/intel/oneapi --yes && \ + rm plugin.sh + +# Set up the oneAPI environment. Note that one *MUST* source the +# /opt/intel/oneapi/setvars.sh script to make the following work. Which has to +# be done in the respective CI scripts. +ENV CC="icx" +ENV CXX="icpx" +ENV SYCLCXX="icpx" +ENV SYCLFLAGS="-fsycl -fsycl-targets=amd_gpu_gfx1031" diff --git a/ubuntu2404_rocm_oneapi/oneapi.list b/ubuntu2404_rocm_oneapi/oneapi.list new file mode 100644 index 0000000..3939bca --- /dev/null +++ b/ubuntu2404_rocm_oneapi/oneapi.list @@ -0,0 +1 @@ +deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main diff --git a/ubuntu2404_rocm_oneapi/rocm-pin-600 b/ubuntu2404_rocm_oneapi/rocm-pin-600 new file mode 100644 index 0000000..88348a5 --- /dev/null +++ b/ubuntu2404_rocm_oneapi/rocm-pin-600 @@ -0,0 +1,3 @@ +Package: * +Pin: release o=repo.radeon.com +Pin-Priority: 600 diff --git a/ubuntu2404_rocm_oneapi/rocm.list b/ubuntu2404_rocm_oneapi/rocm.list new file mode 100644 index 0000000..85c3797 --- /dev/null +++ b/ubuntu2404_rocm_oneapi/rocm.list @@ -0,0 +1 @@ +deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/6.1 focal main