mirror of
https://github.com/cp2k/cp2k.git
synced 2026-07-28 06:05:29 -04:00
Use 2-stage dockerfiles for CSCS CI/CD
to reduce/minimize image size for production container deployment
This commit is contained in:
parent
f05d45d108
commit
8abc00d379
5 changed files with 152 additions and 47 deletions
|
|
@ -4,7 +4,7 @@ include:
|
|||
stages:
|
||||
- build_deps
|
||||
- build_cp2k
|
||||
# - test_cp2k
|
||||
- test_cp2k
|
||||
|
||||
variables:
|
||||
PERSIST_IMAGE_NAME: $CSCS_REGISTRY_PATH/cp2k:$CI_COMMIT_SHORT_SHA
|
||||
|
|
@ -23,14 +23,14 @@ build_cp2k_job:
|
|||
variables:
|
||||
DOCKERFILE: ci/docker/build_cp2k_psmp.Dockerfile
|
||||
|
||||
#test_cp2k_job:
|
||||
# extends: .container-runner-eiger
|
||||
# stage: test_cp2k
|
||||
# timeout: 2 hours
|
||||
# image: $PERSIST_IMAGE_NAME
|
||||
# script:
|
||||
# - /opt/cp2k/tools/docker/scripts/test_regtest_cmake.sh toolchain psmp
|
||||
# variables:
|
||||
# OMP_NUM_THREADS: 2
|
||||
# SLURM_NTASKS: 64
|
||||
# SLURM_TIMELIMIT: "60:00"
|
||||
test_cp2k_job:
|
||||
extends: .container-runner-eiger
|
||||
stage: test_cp2k
|
||||
timeout: 2 hours
|
||||
image: $PERSIST_IMAGE_NAME
|
||||
script:
|
||||
- /opt/cp2k/bin/run_tests
|
||||
variables:
|
||||
OMP_NUM_THREADS: 2
|
||||
SLURM_NTASKS: 64
|
||||
SLURM_TIMELIMIT: "60:00"
|
||||
|
|
|
|||
|
|
@ -1,14 +1,108 @@
|
|||
# Stage 1b: Build CP2K with CMake
|
||||
WORKDIR /opt/cp2k
|
||||
COPY ./src ./src
|
||||
COPY ./CMakeLists.txt .
|
||||
COPY ./cmake ./cmake
|
||||
COPY ./data ./data
|
||||
COPY ./src ./src
|
||||
COPY ./tests ./tests
|
||||
COPY ./tools/build_utils ./tools/build_utils
|
||||
COPY ./cmake ./cmake
|
||||
COPY ./CMakeLists.txt .
|
||||
|
||||
# Build CP2K with CMake and run regression tests
|
||||
COPY ./tools/docker/scripts/build_cp2k_cmake.sh ./
|
||||
RUN /bin/bash -o pipefail -c " \
|
||||
./build_cp2k_cmake.sh toolchain psmp |& tee build_cp2k.log"
|
||||
# Run CMake
|
||||
RUN /bin/bash -c -o pipefail " \
|
||||
TOOLCHAIN_DIR=/opt/cp2k/tools/toolchain; \
|
||||
source ./cmake/cmake_cp2k.sh toolchain psmp |& tee cmake.log"
|
||||
|
||||
#EOF
|
||||
# Compile CP2K
|
||||
WORKDIR /opt/cp2k/build
|
||||
RUN /bin/bash -c -o pipefail " \
|
||||
source /opt/cp2k/tools/toolchain/install/setup; \
|
||||
echo -en '\nCompiling CP2K ... '; \
|
||||
if ninja --verbose &> ninja.log; then \
|
||||
echo -e 'done\n'; \
|
||||
echo -en 'Installing CP2K ... '; \
|
||||
if ninja --verbose install &> install.log; then \
|
||||
echo -e 'done\n'; \
|
||||
else \
|
||||
echo -e 'failed\n'; \
|
||||
cat install.log; \
|
||||
fi; \
|
||||
else \
|
||||
echo -e 'failed\n'; \
|
||||
cat ninja.log; \
|
||||
fi"
|
||||
|
||||
# Update environment variables
|
||||
ENV LD_LIBRARY_PATH=/opt/cp2k/lib:${LD_LIBRARY} \
|
||||
PATH=/opt/cp2k/bin:${PATH}
|
||||
|
||||
# Collect components for installation
|
||||
WORKDIR /opt/cp2k/bin
|
||||
RUN /bin/bash -c -o pipefail " \
|
||||
source /opt/cp2k/tools/toolchain/install/setup; \
|
||||
mkdir -p /toolchain/install /toolchain/scripts; \
|
||||
for libdir in \$(ldd /opt/cp2k/bin/cp2k.psmp | \
|
||||
grep /opt/cp2k/tools/toolchain/install | \
|
||||
awk '{print \$3}' | cut -d/ -f7 | \
|
||||
sort | uniq) setup; do \
|
||||
cp -ar /opt/cp2k/tools/toolchain/install/\${libdir} /toolchain/install; \
|
||||
done; \
|
||||
cp /opt/cp2k/tools/toolchain/scripts/tool_kit.sh /toolchain/scripts"
|
||||
|
||||
# Stage 2: Install CP2K
|
||||
FROM ubuntu:24.04 AS install
|
||||
|
||||
# Install required packages
|
||||
RUN apt-get update -qq && apt-get install -qq --no-install-recommends \
|
||||
g++ \
|
||||
gcc \
|
||||
gfortran \
|
||||
python3 && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install CP2K binaries and libraries
|
||||
WORKDIR /opt/cp2k
|
||||
COPY --from=build /opt/cp2k/bin ./bin
|
||||
COPY --from=build /opt/cp2k/lib ./lib
|
||||
|
||||
# Install CP2K database files
|
||||
COPY --from=build /opt/cp2k/share ./share
|
||||
|
||||
# Install CP2K regression tests
|
||||
COPY --from=build /opt/cp2k/tests ./tests
|
||||
COPY --from=build /opt/cp2k/src/grid/sample_tasks ./src/grid/sample_tasks
|
||||
|
||||
# Create links to CP2K binaries
|
||||
WORKDIR /opt/cp2k/bin
|
||||
RUN ln -sf cp2k.psmp cp2k
|
||||
RUN ln -sf cp2k.psmp cp2k.popt
|
||||
RUN ln -sf cp2k.psmp cp2k_shell
|
||||
|
||||
# Install shared libraries required by the CP2K binaries
|
||||
COPY --from=build /toolchain /opt/cp2k/tools/toolchain
|
||||
|
||||
# Create entrypoint script file
|
||||
RUN printf "#!/bin/bash\n\
|
||||
ulimit -c 0 -s unlimited\n\
|
||||
\
|
||||
export OMP_STACKSIZE=64M\n\
|
||||
export LD_LIBRARY_PATH=/opt/cp2k/lib:\${LD_LIBRARY_PATH}\n\
|
||||
export PATH=/opt/cp2k/bin:\${PATH}\n\
|
||||
source /opt/cp2k/tools/toolchain/install/setup\n\
|
||||
\"\$@\"" \
|
||||
>/opt/cp2k/bin/entrypoint.sh && chmod 755 /opt/cp2k/bin/entrypoint.sh
|
||||
|
||||
# Create shortcut for regression test
|
||||
RUN printf "/opt/cp2k/tests/do_regtest.py --maxtasks 12 --workbasedir /mnt \$* /opt/cp2k/bin psmp" \
|
||||
>/opt/cp2k/bin/run_tests && chmod 755 /opt/cp2k/bin/run_tests
|
||||
|
||||
# Define entrypoint
|
||||
WORKDIR /mnt
|
||||
ENTRYPOINT ["/opt/cp2k/bin/entrypoint.sh"]
|
||||
CMD ["cp2k", "--help"]
|
||||
|
||||
# Label docker image
|
||||
LABEL author="CP2K Developers" \
|
||||
cp2k_version="master" \
|
||||
container_type="production_psmp" \
|
||||
dockerfile_generator_version="0.1"
|
||||
|
||||
# EOF
|
||||
|
|
|
|||
|
|
@ -1,27 +1,36 @@
|
|||
# Stage 1a: Build CP2K toolchain
|
||||
FROM ubuntu:24.04 AS build
|
||||
|
||||
# Install requirements for the toolchain
|
||||
WORKDIR /opt/cp2k-toolchain
|
||||
COPY ./tools/toolchain/install_requirements*.sh ./
|
||||
RUN ./install_requirements.sh ubuntu:24.04
|
||||
# Install packages required for the CP2K toolchain build
|
||||
RUN apt-get update -qq && apt-get install -qq --no-install-recommends \
|
||||
bzip2 \
|
||||
ca-certificates \
|
||||
g++ \
|
||||
gcc \
|
||||
gfortran \
|
||||
git \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
make \
|
||||
patch \
|
||||
pkg-config \
|
||||
python3 \
|
||||
unzip \
|
||||
wget \
|
||||
zlib1g-dev
|
||||
|
||||
# Install the toolchain
|
||||
RUN mkdir scripts
|
||||
COPY ./tools/toolchain/scripts/VERSION \
|
||||
./tools/toolchain/scripts/parse_if.py \
|
||||
./tools/toolchain/scripts/tool_kit.sh \
|
||||
./tools/toolchain/scripts/common_vars.sh \
|
||||
./tools/toolchain/scripts/signal_trap.sh \
|
||||
./tools/toolchain/scripts/get_openblas_arch.sh \
|
||||
./scripts/
|
||||
COPY ./tools/toolchain/install_cp2k_toolchain.sh .
|
||||
RUN ./install_cp2k_toolchain.sh \
|
||||
# Build CP2K toolchain
|
||||
COPY ./tools/toolchain /opt/cp2k/tools/toolchain
|
||||
WORKDIR /opt/cp2k/tools/toolchain
|
||||
RUN ./install_cp2k_toolchain.sh -j \
|
||||
--dry-run \
|
||||
--install-all \
|
||||
--no-arch-files \
|
||||
--target-cpu=native \
|
||||
--with-gcc=system \
|
||||
--dry-run
|
||||
--with-mpich
|
||||
|
||||
# Dry-run leaves behind config files for the followup install scripts
|
||||
# This breaks up the lengthy installation into smaller docker build steps
|
||||
# Perform toolchain build step-wise in stages after its initialization with dry-run
|
||||
COPY ./tools/toolchain/scripts/stage0/ ./scripts/stage0/
|
||||
RUN ./scripts/stage0/install_stage0.sh && rm -rf ./build
|
||||
|
||||
|
|
@ -49,13 +58,7 @@ RUN ./scripts/stage7/install_stage7.sh && rm -rf ./build
|
|||
COPY ./tools/toolchain/scripts/stage8/ ./scripts/stage8/
|
||||
RUN ./scripts/stage8/install_stage8.sh && rm -rf ./build
|
||||
|
||||
COPY ./tools/toolchain/scripts/arch_base.tmpl \
|
||||
./tools/toolchain/scripts/generate_arch_files.sh \
|
||||
./scripts/
|
||||
RUN ./scripts/generate_arch_files.sh && rm -rf ./build
|
||||
COPY ./tools/toolchain/scripts/stage9/ ./scripts/stage9/
|
||||
RUN ./scripts/stage9/install_stage9.sh && rm -rf ./build
|
||||
|
||||
# Install DBCSR
|
||||
COPY ./tools/docker/scripts/install_dbcsr.sh ./
|
||||
RUN ./install_dbcsr.sh toolchain psmp
|
||||
|
||||
#EOF
|
||||
# EOF
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ if [[ "${PROFILE}" == "spack" ]] && [[ "${VERSION}" == "psmp" ]]; then
|
|||
export Torch_DIR="/opt/spack/var/spack/environments/myenv/spack-env/view/lib/python3.11/site-packages/torch/share/cmake/Torch"
|
||||
cmake \
|
||||
-GNinja \
|
||||
-DCMAKE_BUILD_TYPE="RelWithDebInfo" \
|
||||
-DCMAKE_C_FLAGS="-fno-lto" \
|
||||
-DCMAKE_Fortran_FLAGS="-fno-lto" \
|
||||
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
|
||||
|
|
@ -72,6 +73,7 @@ if [[ "${PROFILE}" == "spack" ]] && [[ "${VERSION}" == "psmp" ]]; then
|
|||
elif [[ "${PROFILE}" == "toolchain" ]] && [[ "${VERSION}" == "ssmp" ]]; then
|
||||
cmake \
|
||||
-GNinja \
|
||||
-DCMAKE_BUILD_TYPE="RelWithDebInfo" \
|
||||
-DCMAKE_INSTALL_LIBDIR=lib \
|
||||
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
|
||||
-DCP2K_BLAS_VENDOR=OpenBLAS \
|
||||
|
|
@ -97,6 +99,7 @@ elif [[ "${PROFILE}" == "toolchain" ]] && [[ "${VERSION}" == "ssmp" ]]; then
|
|||
elif [[ "${PROFILE}" == "toolchain" ]] && [[ "${VERSION}" == "sdbg" ]]; then
|
||||
cmake \
|
||||
-GNinja \
|
||||
-DCMAKE_BUILD_TYPE="RelWithDebInfo" \
|
||||
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
|
||||
-DCP2K_BLAS_VENDOR=OpenBLAS \
|
||||
-DCP2K_DEBUG_MODE=ON \
|
||||
|
|
@ -116,6 +119,7 @@ elif [[ "${PROFILE}" == "toolchain" ]] && [[ "${VERSION}" == "sdbg" ]]; then
|
|||
elif [[ "${PROFILE}" == "toolchain" ]] && [[ "${VERSION}" == "psmp" ]]; then
|
||||
cmake \
|
||||
-GNinja \
|
||||
-DCMAKE_BUILD_TYPE="RelWithDebInfo" \
|
||||
-DCMAKE_INSTALL_LIBDIR=lib \
|
||||
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
|
||||
-DCP2K_BLAS_VENDOR=OpenBLAS \
|
||||
|
|
@ -146,6 +150,7 @@ elif [[ "${PROFILE}" == "toolchain" ]] && [[ "${VERSION}" == "psmp" ]]; then
|
|||
elif [[ "${PROFILE}" == "toolchain" ]] && [[ "${VERSION}" == "pdbg" ]]; then
|
||||
cmake \
|
||||
-GNinja \
|
||||
-DCMAKE_BUILD_TYPE="RelWithDebInfo" \
|
||||
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
|
||||
-DCP2K_BLAS_VENDOR=OpenBLAS \
|
||||
-DCP2K_DEBUG_MODE=ON \
|
||||
|
|
@ -167,6 +172,7 @@ elif [[ "${PROFILE}" == "ubuntu" ]] && [[ "${VERSION}" == "ssmp" ]]; then
|
|||
# NOTE: libxc 5.2.3 is provided, CP2K requires libxc 7
|
||||
cmake \
|
||||
-GNinja \
|
||||
-DCMAKE_BUILD_TYPE="RelWithDebInfo" \
|
||||
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
|
||||
-DCP2K_BLAS_VENDOR=OpenBLAS \
|
||||
-DCP2K_USE_COSMA=OFF \
|
||||
|
|
@ -188,6 +194,7 @@ elif [[ "${PROFILE}" == "ubuntu_i386" ]] && [[ "${VERSION}" == "ssmp" ]]; then
|
|||
# TODO fix spglib https://github.com/cp2k/cp2k/issues/3414
|
||||
cmake \
|
||||
-GNinja \
|
||||
-DCMAKE_BUILD_TYPE="RelWithDebInfo" \
|
||||
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
|
||||
-DCP2K_BLAS_VENDOR=OpenBLAS \
|
||||
-DCP2K_USE_COSMA=OFF \
|
||||
|
|
@ -207,6 +214,7 @@ elif [[ "${PROFILE}" == "ubuntu_i386" ]] && [[ "${VERSION}" == "ssmp" ]]; then
|
|||
elif [[ "${PROFILE}" == "minimal" ]] && [[ "${VERSION}" == "ssmp" ]]; then
|
||||
cmake \
|
||||
-GNinja \
|
||||
-DCMAKE_BUILD_TYPE="RelWithDebInfo" \
|
||||
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
|
||||
-DCP2K_BLAS_VENDOR=OpenBLAS \
|
||||
-DCP2K_USE_COSMA=OFF \
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue