From bec65495dc0812b580db56ffe72c66cf3acedeac Mon Sep 17 00:00:00 2001 From: Matthias Krack Date: Sun, 22 Feb 2026 08:55:25 +0100 Subject: [PATCH] Fix Cray tester (#4866) - Drop openpmd feature for Daint - Reduce default number of OMP_NUM_THREADS from 8 to 2 in launch script - Use popt binary for benchmark runs - Use old libfabric 1.22.0 for CSCS tester instead of version 2.4.0 - Add feature flags and increase time limit for Cray tester - Use py-torch 2.9.0 instead of 2.10.0 --- ci/cscs_daint_spack_psmp.yaml | 12 +++++++----- ci/cscs_eiger_spack_psmp.yaml | 14 ++++++++------ ci/cscs_eiger_spack_ssmp.yaml | 10 ++++++---- ci/docker/build_cp2k_spack.Dockerfile | 13 ++++++++++--- ci/docker/build_deps_spack.Dockerfile | 6 ++++-- make_cp2k.sh | 16 ++++++++++++---- tools/spack/cp2k_deps_psmp.yaml | 2 +- tools/spack/cp2k_deps_ssmp.yaml | 2 +- 8 files changed, 49 insertions(+), 26 deletions(-) diff --git a/ci/cscs_daint_spack_psmp.yaml b/ci/cscs_daint_spack_psmp.yaml index 4155c6d751..61fc17749c 100644 --- a/ci/cscs_daint_spack_psmp.yaml +++ b/ci/cscs_daint_spack_psmp.yaml @@ -31,12 +31,12 @@ build deps daint: DOCKER_BUILD_ARGS: '[ "BASE_IMAGE", "CP2K_VERSION", - "LOG_LINES" + "FEATURE_FLAGS" ]' DOCKERFILE: ci/docker/build_${CI_JOB_STAGE}_${BUILDER}.Dockerfile BASE_IMAGE: ${UBUNTU_IMAGE_NAME} CP2K_VERSION: ${VERSION} - LOG_LINES: 200 + FEATURE_FLAGS: "" build cp2k daint: extends: .container-builder-cscs-gh200 @@ -51,11 +51,13 @@ build cp2k daint: variables: DOCKER_BUILD_ARGS: '[ "BASE_IMAGE", - "DEPS_IMAGE" + "DEPS_IMAGE", + "FEATURE_FLAGS" ]' DOCKERFILE: ci/docker/build_${CI_JOB_STAGE}_${BUILDER}.Dockerfile BASE_IMAGE: ${UBUNTU_IMAGE_NAME} DEPS_IMAGE: ${DEPS_IMAGE_NAME} + FEATURE_FLAGS: "" PERSIST_IMAGE_NAME: ${CSCS_IMAGE_NAME} test cp2k daint: @@ -88,7 +90,7 @@ regression test cp2k daint: SLURM_HINT: nomultithread SLURM_JOB_NUM_NODES: 1 SLURM_NTASKS: 288 - SLURM_TIMELIMIT: 20 + SLURM_TIMELIMIT: 30 USE_MPI: YES benchmark cp2k 1 daint node: @@ -100,7 +102,7 @@ benchmark cp2k 1 daint node: before_script: - export CP2K_DATA_DIR=/opt/cp2k/install/share/cp2k/data script: - - cp2k /opt/cp2k/benchmarks/CI/H2O-512_md.inp + - cp2k.popt /opt/cp2k/benchmarks/CI/H2O-512_md.inp variables: SLURM_CPU_BIND: cores SLURM_CPUS_PER_TASK: 1 diff --git a/ci/cscs_eiger_spack_psmp.yaml b/ci/cscs_eiger_spack_psmp.yaml index 76460b4318..f6fa60350a 100644 --- a/ci/cscs_eiger_spack_psmp.yaml +++ b/ci/cscs_eiger_spack_psmp.yaml @@ -31,12 +31,12 @@ build deps eiger: DOCKER_BUILD_ARGS: '[ "BASE_IMAGE", "CP2K_VERSION", - "LOG_LINES" + "FEATURE_FLAGS" ]' DOCKERFILE: ci/docker/build_${CI_JOB_STAGE}_${BUILDER}.Dockerfile BASE_IMAGE: ${UBUNTU_IMAGE_NAME} CP2K_VERSION: ${VERSION} - LOG_LINES: 200 + FEATURE_FLAGS: "-ef openpmd" build cp2k eiger: extends: .container-builder-cscs-zen2 @@ -51,11 +51,13 @@ build cp2k eiger: variables: DOCKER_BUILD_ARGS: '[ "BASE_IMAGE", - "DEPS_IMAGE" + "DEPS_IMAGE", + "FEATURE_FLAGS" ]' DOCKERFILE: ci/docker/build_${CI_JOB_STAGE}_${BUILDER}.Dockerfile BASE_IMAGE: ${UBUNTU_IMAGE_NAME} DEPS_IMAGE: ${DEPS_IMAGE_NAME} + FEATURE_FLAGS: "-ef openpmd" PERSIST_IMAGE_NAME: ${CSCS_IMAGE_NAME} test cp2k eiger: @@ -90,7 +92,7 @@ regression test cp2k eiger: SLURM_HINT: nomultithread SLURM_JOB_NUM_NODES: 1 SLURM_NTASKS: 128 - SLURM_TIMELIMIT: 30 + SLURM_TIMELIMIT: 40 USE_MPI: YES benchmark cp2k 1 eiger node: @@ -102,7 +104,7 @@ benchmark cp2k 1 eiger node: before_script: - export CP2K_DATA_DIR=/opt/cp2k/install/share/cp2k/data script: - - cp2k /opt/cp2k/benchmarks/CI/H2O-128_md.inp + - cp2k.popt /opt/cp2k/benchmarks/CI/H2O-128_md.inp variables: SLURM_CONSTRAINT: mc SLURM_CPUS_PER_TASK: 1 @@ -124,7 +126,7 @@ benchmark cp2k 2 eiger nodes: before_script: - export CP2K_DATA_DIR=/opt/cp2k/install/share/cp2k/data script: - - cp2k /opt/cp2k/benchmarks/CI/H2O-512_md.inp + - cp2k.popt /opt/cp2k/benchmarks/CI/H2O-512_md.inp variables: SLURM_CONSTRAINT: mc SLURM_CPUS_PER_TASK: 1 diff --git a/ci/cscs_eiger_spack_ssmp.yaml b/ci/cscs_eiger_spack_ssmp.yaml index 1f7ca4107c..d9a68d8bf3 100644 --- a/ci/cscs_eiger_spack_ssmp.yaml +++ b/ci/cscs_eiger_spack_ssmp.yaml @@ -30,12 +30,12 @@ build deps eiger: DOCKER_BUILD_ARGS: '[ "BASE_IMAGE", "CP2K_VERSION", - "LOG_LINES" + "FEATURE_FLAGS" ]' DOCKERFILE: ci/docker/build_${CI_JOB_STAGE}_${BUILDER}.Dockerfile BASE_IMAGE: ${UBUNTU_IMAGE_NAME} CP2K_VERSION: ${VERSION} - LOG_LINES: 200 + FEATURE_FLAGS: "" build cp2k eiger: extends: .container-builder-cscs-zen2 @@ -50,11 +50,13 @@ build cp2k eiger: variables: DOCKER_BUILD_ARGS: '[ "BASE_IMAGE", - "DEPS_IMAGE" + "DEPS_IMAGE", + "FEATURE_FLAGS" ]' DOCKERFILE: ci/docker/build_${CI_JOB_STAGE}_${BUILDER}.Dockerfile BASE_IMAGE: ${UBUNTU_IMAGE_NAME} DEPS_IMAGE: ${DEPS_IMAGE_NAME} + FEATURE_FLAGS: "" PERSIST_IMAGE_NAME: ${CSCS_IMAGE_NAME} test cp2k eiger: @@ -88,6 +90,6 @@ regression test cp2k eiger: SLURM_HINT: nomultithread SLURM_JOB_NUM_NODES: 1 SLURM_NTASKS: 128 - SLURM_TIMELIMIT: 30 + SLURM_TIMELIMIT: 40 # EOF diff --git a/ci/docker/build_cp2k_spack.Dockerfile b/ci/docker/build_cp2k_spack.Dockerfile index fc26b6833b..bd3ee26223 100644 --- a/ci/docker/build_cp2k_spack.Dockerfile +++ b/ci/docker/build_cp2k_spack.Dockerfile @@ -9,7 +9,7 @@ ARG BASE_IMAGE="ubuntu:24.04" ARG DEPS_IMAGE="" -###### Stage 2a: Build CP2K ###### +###### Stage 2: Build CP2K ###### FROM "${DEPS_IMAGE}" AS build_cp2k @@ -17,11 +17,14 @@ FROM "${DEPS_IMAGE}" AS build_cp2k ARG NUM_PROCS ENV NUM_PROCS=${NUM_PROCS:-32} +ARG FEATURE_FLAGS +ENV FEATURE_FLAGS=${FEATURE_FLAGS:-} + # Build CP2K WORKDIR /opt/cp2k -RUN /bin/bash -o pipefail -c "source ./make_cp2k.sh -cv ${CP2K_VERSION} -dlc -j${NUM_PROCS}" +RUN ./make_cp2k.sh -cray -cv ${CP2K_VERSION} -dlc -j${NUM_PROCS} ${FEATURE_FLAGS} -###### Stage 2: Install CP2K ###### +###### Stage 3: Install CP2K ###### FROM "${BASE_IMAGE}" AS install_cp2k @@ -45,6 +48,10 @@ COPY --from=build_cp2k /opt/cp2k/src/grid/sample_tasks ./src/grid/sample_tasks # Install CP2K/Quickstep CI benchmarks COPY --from=build_cp2k /opt/cp2k/benchmarks/CI ./benchmarks/CI +# Do not rely only on LD_LIBRARY_PATH because it is fragile +COPY --from=build_cp2k /etc/ld.so.conf.d/cp2k.conf /etc/ld.so.conf.d/cp2k.conf +RUN ldconfig + # Create entrypoint and finalise container build WORKDIR /mnt ENTRYPOINT ["/opt/cp2k/install/bin/launch"] diff --git a/ci/docker/build_deps_spack.Dockerfile b/ci/docker/build_deps_spack.Dockerfile index 9f9e75737f..a3401e35ab 100644 --- a/ci/docker/build_deps_spack.Dockerfile +++ b/ci/docker/build_deps_spack.Dockerfile @@ -25,7 +25,6 @@ RUN apt-get update -qq && apt-get install -qq --no-install-recommends \ libtool-bin \ lsb-release \ make \ - ninja-build \ patch \ pkgconf \ python3 \ @@ -46,10 +45,13 @@ ENV NUM_PROCS=${NUM_PROCS:-32} ARG CP2K_VERSION ENV CP2K_VERSION=${CP2K_VERSION:-psmp} +ARG FEATURE_FLAGS +ENV FEATURE_FLAGS=${FEATURE_FLAGS:-} + # Copy CP2K repository into container WORKDIR /opt COPY . cp2k/ # Build CP2K dependencies WORKDIR /opt/cp2k -RUN /bin/bash -o pipefail -c "source ./make_cp2k.sh -bd_only -cv ${CP2K_VERSION} -dlc -j${NUM_PROCS}" +RUN ./make_cp2k.sh -bd_only -cray -cv ${CP2K_VERSION} -dlc -j${NUM_PROCS} ${FEATURE_FLAGS} diff --git a/make_cp2k.sh b/make_cp2k.sh index ef92069c5e..bb6e03dedc 100755 --- a/make_cp2k.sh +++ b/make_cp2k.sh @@ -84,8 +84,13 @@ else EXIT_CMD="exit" fi +# Help finding ldconfig +if ! command -v ldconfig &> /dev/null; then + PATH="${PATH}:/sbin" +fi + # Check if all mandatory packages are installed in the environment -for package in awk bzip2 find g++ gcc gfortran git make gzip patch python3 tar wget xz; do +for package in awk bzip2 find g++ gcc gfortran git gzip ldconfig make patch python3 tar wget xz; do if ! command -v "${package}" &> /dev/null; then echo "ERROR: The package \"${package}\" is mandatory to build CP2K with Spack/CMake" echo " Install the missing package and re-run the script" @@ -811,9 +816,12 @@ if [[ ! -d "${SPACK_BUILD_PATH}" ]]; then sed -E -e "0,/~cuda/s//+cuda cuda_arch=${CUDA_ARCH}/" -i "${CP2K_CONFIG_FILE}" fi - # Apply Cray specific adaptation of the spack configuration if requested + # Apply Cray specific adaptation of the spack configuration if requested (CSCS) if [[ "${CRAY}" == "yes" ]]; then - sed -E -e 's/~xpmem/+xpmem/' -i "${CP2K_CONFIG_FILE}" + sed -E \ + -e 's/~xpmem/+xpmem/' \ + -e 's/"libfabric@[.0-9]*"/"libfabric@1.22.0"/' \ + -i "${CP2K_CONFIG_FILE}" fi # Apply feature selection to spack configuration file @@ -1234,7 +1242,7 @@ cat << *** > "${LAUNCH_SCRIPT}" ulimit -c 0 -s unlimited export PATH=${INSTALL_PREFIX}/bin:${PATH} export LD_LIBRARY_PATH=${LD_LIBRARY_PATH} -export OMP_NUM_THREADS=\${OMP_NUM_THREADS:-8} +export OMP_NUM_THREADS=\${OMP_NUM_THREADS:-2} export OMP_STACKSIZE=256M ${OMPI_VARS} exec "\$@" diff --git a/tools/spack/cp2k_deps_psmp.yaml b/tools/spack/cp2k_deps_psmp.yaml index d419452a47..67da87ba9d 100644 --- a/tools/spack/cp2k_deps_psmp.yaml +++ b/tools/spack/cp2k_deps_psmp.yaml @@ -205,7 +205,7 @@ spack: - "pace@2025.12.4" - "pexsi@2.0.0" - "plumed@2.10.0" - - "py-torch@2.10.0" + - "py-torch@2.9.0" - "sirius@7.10.0" - "spfft@1.1.1" - "spglib@2.7.0" diff --git a/tools/spack/cp2k_deps_ssmp.yaml b/tools/spack/cp2k_deps_ssmp.yaml index 66fdd4656e..26fc4cd82c 100644 --- a/tools/spack/cp2k_deps_ssmp.yaml +++ b/tools/spack/cp2k_deps_ssmp.yaml @@ -123,7 +123,7 @@ spack: - "libxsmm@1.17-cp2k" - "openblas@0.3.31" - "pace@2025.12.4" - - "py-torch@2.10.0" + - "py-torch@2.9.0" - "spglib@2.7.0" - "tblite@0.5.0" - "trexio@2.5.0"