diff --git a/cms/cms-patatrack-ci.yml b/cms/cms-patatrack-ci.yml index b8cdc8e986b271c3d3d658171e7ebce09802cc00..ba722bcb013dd45ada45a9db706343b6ba0e8f28 100644 --- a/cms/cms-patatrack-ci.yml +++ b/cms/cms-patatrack-ci.yml @@ -1,10 +1,10 @@ --- stages: - - build_0 - - build_1 - - build_2 - - snapshot - - build_standalone + - build_base_image + - build_data_image + - build_interim_image + - snapshot_cvmfs + - build_standalone_image - test #- publish #- announce @@ -61,48 +61,48 @@ stages: # docker in docker image: to trigger other docker runs ########################################################### -job_build_image_step0: - stage: build_0 +job_build_base_image: + stage: build_base_image before_script: - - export DOCKERFILE=$CI_PROJECT_DIR/cms/patatrack/ci-scripts/nvidia.Dockerfile.0 + - export DOCKERFILE=$CI_PROJECT_DIR/cms/patatrack/ci-scripts/Dockerfile.nvidia.base - export CONTEXT=$CI_PROJECT_DIR/cms/patatrack - - export IMAGE_NAME=cms/cms-patatrack-nvidia-0 + - export IMAGE_NAME=cms/cms-patatrack-nvidia-base - export IMAGE_TAG=${CI_COMMIT_TAG:-$CI_COMMIT_BRANCH} <<: *template_build_image only: changes: - - cms/patatrack/ci-scripts/nvidia.Dockerfile.0 + - cms/patatrack/ci-scripts/Dockerfile.nvidia.base -job_build_image_step1: - stage: build_1 +job_build_data_image: + stage: build_data_image before_script: - - export DOCKERFILE=$CI_PROJECT_DIR/cms/patatrack/ci-scripts/nvidia.Dockerfile.1 + - export DOCKERFILE=$CI_PROJECT_DIR/cms/patatrack/ci-scripts/Dockerfile.nvidia.data - export CONTEXT=$CI_PROJECT_DIR/cms/patatrack - - export IMAGE_NAME=cms/cms-patatrack-nvidia-1 + - export IMAGE_NAME=cms/cms-patatrack-nvidia-data - export IMAGE_TAG=${CI_COMMIT_TAG:-$CI_COMMIT_BRANCH} <<: *template_build_image only: changes: - - cms/patatrack/ci-scripts/nvidia.Dockerfile.0 - - cms/patatrack/ci-scripts/nvidia.Dockerfile.1 + - cms/patatrack/ci-scripts/Dockerfile.nvidia.base + - cms/patatrack/ci-scripts/Dockerfile.nvidia.data -job_build_image_step2: - stage: build_2 +job_build_interim_image: + stage: build_interim_image before_script: - - export DOCKERFILE=$CI_PROJECT_DIR/cms/patatrack/ci-scripts/nvidia.Dockerfile.2 + - export DOCKERFILE=$CI_PROJECT_DIR/cms/patatrack/ci-scripts/Dockerfile.nvidia.full - export CONTEXT=$CI_PROJECT_DIR/cms/patatrack - - export IMAGE_NAME=cms/cms-patatrack-nvidia-2 + - export IMAGE_NAME=cms/cms-patatrack-nvidia-interim - export IMAGE_TAG=${CI_COMMIT_TAG:-$CI_COMMIT_BRANCH} <<: *template_build_image only: changes: - - cms/patatrack/ci-scripts/nvidia.Dockerfile.* + - cms/patatrack/ci-scripts/Dockerfile.nvidia.* - cms/patatrack/cms-patatrack/* - cms/patatrack/cms-patatrack/utility_scripts/* job_snapshot_cvmfs: - stage: snapshot + stage: snapshot_cvmfs tags: - hep-workload-gpu-docker-builder image: @@ -121,7 +121,7 @@ job_snapshot_cvmfs: - $CI_COMMIT_BRANCH =~ /^qa.*$/ - $CI_COMMIT_TAG =~ /^v.*$/ changes: - - cms/patatrack/ci-scripts/nvidia.Dockerfile.* + - cms/patatrack/ci-scripts/Dockerfile.nvidia.* - cms/patatrack/ci-scripts/snapshot_cvmfs.sh - cms/patatrack/cms-patatrack/* - cms/patatrack/cms-patatrack/utility_scripts/* @@ -135,16 +135,16 @@ job_snapshot_cvmfs: when: always job_build_standalone_image: - stage: build_standalone + stage: build_standalone_image before_script: - - export DOCKERFILE=$CI_PROJECT_DIR/cms/patatrack/ci-scripts/nvidia.Dockerfile.2 + - export DOCKERFILE=$CI_PROJECT_DIR/cms/patatrack/ci-scripts/Dockerfile.nvidia.full - export CONTEXT=$CI_PROJECT_DIR/cms/patatrack - export IMAGE_NAME=cms/cms-patatrack-nvidia-bmk - export IMAGE_TAG=${CI_COMMIT_TAG:-$CI_COMMIT_BRANCH} <<: *template_build_image only: changes: - - cms/patatrack/ci-scripts/nvidia.Dockerfile.* + - cms/patatrack/ci-scripts/Dockerfile.nvidia.* - cms/patatrack/ci-scripts/snapshot_cvmfs.sh - cms/patatrack/cms-patatrack/* - cms/patatrack/cms-patatrack/utility_scripts/* diff --git a/cms/patatrack/ci-scripts/nvidia.Dockerfile.0 b/cms/patatrack/ci-scripts/Dockerfile.nvidia.base similarity index 59% rename from cms/patatrack/ci-scripts/nvidia.Dockerfile.0 rename to cms/patatrack/ci-scripts/Dockerfile.nvidia.base index 6d661957d01759049c958ae03c577e994433be81..f3a7dec536fb77608f60e85b6924a541cd66d346 100644 --- a/cms/patatrack/ci-scripts/nvidia.Dockerfile.0 +++ b/cms/patatrack/ci-scripts/Dockerfile.nvidia.base @@ -1,5 +1,7 @@ -# FIXME: need to build in gitlab this base image. Was done by hand -FROM nvidia/cuda:10.1-devel-centos7 +# This dockerfile generates a base image for +# later importing bmk code and cvmfs. +# This image is not frequently updated. +FROM nvidia/cuda:10.1-base-centos7 RUN yum install -y \ which \ diff --git a/cms/patatrack/ci-scripts/nvidia.Dockerfile.1 b/cms/patatrack/ci-scripts/Dockerfile.nvidia.data similarity index 96% rename from cms/patatrack/ci-scripts/nvidia.Dockerfile.1 rename to cms/patatrack/ci-scripts/Dockerfile.nvidia.data index b63ab1a425ccd2ba3027676a6baf73eeb1a89f78..87691b1dc1f5e50e683e564b1b438db2fb55645e 100644 --- a/cms/patatrack/ci-scripts/nvidia.Dockerfile.1 +++ b/cms/patatrack/ci-scripts/Dockerfile.nvidia.data @@ -1,4 +1,4 @@ -FROM gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/cms/cms-patatrack-nvidia-0:qa +FROM gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/cms/cms-patatrack-nvidia-base:qa # Prepare a data directory for downloading large files that should normally be cacheable (BMK-159) diff --git a/cms/patatrack/ci-scripts/nvidia.Dockerfile.2 b/cms/patatrack/ci-scripts/Dockerfile.nvidia.full similarity index 69% rename from cms/patatrack/ci-scripts/nvidia.Dockerfile.2 rename to cms/patatrack/ci-scripts/Dockerfile.nvidia.full index ecc4be0800513767da41dec2e755505ad1fe37a6..c422efc4cf25ee5bc4bf2cf5cfea8c8559556bb2 100644 --- a/cms/patatrack/ci-scripts/nvidia.Dockerfile.2 +++ b/cms/patatrack/ci-scripts/Dockerfile.nvidia.full @@ -1,7 +1,7 @@ -FROM gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/cms/cms-patatrack-nvidia-1:qa +FROM gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/cms/cms-patatrack-nvidia-data:qa COPY . /stage/ RUN ls -la /stage/* -RUN /stage/ci-scripts/build_2.sh +RUN /stage/ci-scripts/build_final.sh ENTRYPOINT ["/bmk/./cms-patatrack/cms-patatrack-bmk.sh"] diff --git a/cms/patatrack/ci-scripts/build_2.sh b/cms/patatrack/ci-scripts/build_final.sh similarity index 90% rename from cms/patatrack/ci-scripts/build_2.sh rename to cms/patatrack/ci-scripts/build_final.sh index 8a78e56332ccd274d0e5635f11b68433ebc6cd38..afef513f39249df8fa79cb968341dfff4f38f888 100755 --- a/cms/patatrack/ci-scripts/build_2.sh +++ b/cms/patatrack/ci-scripts/build_final.sh @@ -22,7 +22,7 @@ chmod -R 555 /cvmfs # This MUST happen before linking the data dir # otherwise will take a lot of time to tar date -tar -cf /tmp/bmk_checksum.tar /bmk && md5sum /tmp/bmk_checksum.tar | cut -f1 -d" " >/tmp/bmk_checksum && rm /tmp/bmk_checksum.tar #FIXME +tar -cf /tmp/bmk_checksum.tar /bmk --exclude='data' && md5sum /tmp/bmk_checksum.tar | cut -f1 -d" " >/tmp/bmk_checksum && rm /tmp/bmk_checksum.tar #FIXME # The data dir has already a checksum in /tmp/bmkdata_checksum # generated in nvidia.Dockerfile.1 diff --git a/cms/patatrack/ci-scripts/snapshot_cvmfs.sh b/cms/patatrack/ci-scripts/snapshot_cvmfs.sh index 21cc3830e19b91d8b469e293be7c8139e19acd88..b885ab198f56a965d9ecdfd4aec899c8827c4d77 100644 --- a/cms/patatrack/ci-scripts/snapshot_cvmfs.sh +++ b/cms/patatrack/ci-scripts/snapshot_cvmfs.sh @@ -15,8 +15,8 @@ function _script() { # check cvmfs is running docker exec cvmfs_${CI_JOB_ID} cvmfs_config probe # Here comes the dry run of the CMS Patatrack container. Arguments are for the time being defaults/hardcoded FIXME - docker pull gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/cms/cms-patatrack-nvidia-2:qa - docker run --name patatrack_container --gpus '"device=0"' -v ${CIENV_CVMFSVOLUME}:/cvmfs gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/cms/cms-patatrack-nvidia-2:qa -e 100 -t 8 -c 1 + docker pull ${INTERIM_IMAGE} + docker run --name patatrack_container --gpus '"device=0"' -v ${CIENV_CVMFSVOLUME}:/cvmfs ${INTERIM_IMAGE} -e 100 -t 8 -c 1 # run shrinkwrapper docker exec cvmfs_${CI_JOB_ID} /root/shrinkwrap.sh -t /tmp/traces -e ${CVMFS_EXPORT_DIR} # get the generated traces from the container @@ -45,4 +45,5 @@ function _after_script() { export CIENV_CVMFSVOLUME=/scratch/cvmfs_hep/CI-JOB-${CI_JOB_ID} export CVMFS_EXPORT_DIR=${CI_PROJECT_DIR}/cms/patatrack export CIENV_CVMFSREPO=cms.cern.ch -export CVMFS_IMAGE=gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-builder/cvmfs-image:${CI_COMMIT_TAG:-$CI_COMMIT_BRANCH} \ No newline at end of file +export CVMFS_IMAGE=gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-builder/cvmfs-image:qa +export INTERIM_IMAGE=gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/cms/cms-patatrack-nvidia-interim:${CI_COMMIT_TAG:-$CI_COMMIT_BRANCH} \ No newline at end of file diff --git a/cms/patatrack/cms-patatrack/cms-reco-bmk.sh b/cms/patatrack/cms-patatrack/cms-reco-bmk.sh deleted file mode 100755 index 6a91e8f4f7c98029df1d85a43fb20afa6505415f..0000000000000000000000000000000000000000 --- a/cms/patatrack/cms-patatrack/cms-reco-bmk.sh +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/bash - -#set -x # enable debug printouts - -#set -e # immediate exit on error - -# Function doOne must be defined in each benchmark -# Input argument $1: process index (between 1 and $NCOPIES) -# Return value: please return 0 if this workload copy was successful, 1 otherwise -# The following variables are guaranteed to be defined and exported: NCOPIES, NTHREADS, NEVENTS_THREAD, BMKDIR, DEBUG -# The function is started in process-specific working directory <basewdir>/proc_$1: -# please store here the individual log files for each of the NCOPIES processes -function doOne(){ - if [ "$1" == "" ] || [ "$2" != "" ]; then echo "[doOne] ERROR! Invalid arguments '$@' to doOne"; return 1; fi - echo "[doOne ($1)] $(date) starting in $(pwd)" - # Extra CMS-RECO-specific setup - export CMSSW_RELEASE=CMSSW_10_2_9 - export VO_CMS_SW_DIR=/cvmfs/cms.cern.ch - source $VO_CMS_SW_DIR/cmsset_default.sh - export SCRAM_ARCH=slc6_amd64_gcc700 - [[ ! -e ${CMSSW_RELEASE} ]] && scram project CMSSW ${CMSSW_RELEASE} - pushd ${CMSSW_RELEASE}; eval `scramv1 runtime -sh`; popd - # Configure WL copy - ln -s ${BMKDIR}/data/GlobalTag.db ./GlobalTag.db - ln -s ${BMKDIR}/data/*.root . - CMSSW_CONF=step3_RAW2DIGI_L1Reco_RECO_EI_PAT_DQM.py - JOB_EVENTS=$(( NEVENTS_THREAD * NTHREADS )) # bash shell arithmetic, may use var instead of $var - cp ${BMKDIR}/${CMSSW_CONF}_template ./${CMSSW_CONF} - sed -e "s@_NEVENTS_@${JOB_EVENTS}@g" -e "s@_NTHREADS_@$NTHREADS@g" -i ./${CMSSW_CONF} - # Execute WL copy - LOG=out_$1.log - cmsRun ./${CMSSW_CONF} >>$LOG 2>&1 3>&1 - status=${?} - echo "[doOne ($1)] $(date) completed (status=$status)" - # Return 0 if this workload copy was successful, 1 otherwise - return $status -} - -# Optional function validateInputArguments may be defined in each benchmark -# If it exists, it is expected to set NCOPIES, NTHREADS, NEVENTS_THREAD -# (based on previous defaults and on user inputs USER_NCOPIES, USER_NTHREADS, USER_NEVENTS_THREADS) -# Input arguments: none -# Return value: please return 0 if input arguments are valid, 1 otherwise -# The following variables are guaranteed to be defined: NCOPIES, NTHREADS, NEVENTS_THREAD -# (benchmark defaults) and USER_NCOPIES, USER_NTHREADS, USER_NEVENTS_THREADS (user inputs) -function validateInputArguments(){ - if [ "$1" != "" ]; then echo "[validateInputArguments] ERROR! Invalid arguments '$@' to validateInputArguments"; return 1; fi - echo "[validateInputArguments] validate input arguments" - # Number of copies and number of threads per copy - if [ "$USER_NTHREADS" != "" ] && [ "$USER_NCOPIES" != "" ]; then - NCOPIES=$USER_NCOPIES - NTHREADS=$USER_NTHREADS - elif [ "$USER_NTHREADS" != "" ]; then - NTHREADS=$USER_NTHREADS - NCOPIES=$((`nproc`/$NTHREADS)) - elif [ "$USER_NCOPIES" != "" ]; then - NCOPIES=$USER_NCOPIES - NTHREADS=$((`nproc`/$NCOPIES)) - fi - # Number of events per thread - if [ "$USER_NEVENTS_THREAD" != "" ]; then NEVENTS_THREAD=$USER_NEVENTS_THREAD; fi - # Return 0 if input arguments are valid, 1 otherwise - # Report any issues to parseResults via s_msg - export s_msg="ok" - tot_load=$(($NCOPIES*$NTHREADS)) - if [ $tot_load -gt `nproc` ]; then - s_msg="[ERROR] NCOPIES*NTHREADS=$NCOPIES*$NTHREADS=$tot_load > number of available cores (`nproc`)" - return 1 - elif [ $tot_load -eq 0 ]; then - s_msg="[ERROR] NCOPIES*NTHREADS=$NCOPIES*$NTHREADS=$tot_load. Please fix it" - return 1 - elif [ $tot_load -ne `nproc` ]; - then s_msg="[WARNING] NCOPIES*NTHREADS ($NCOPIES*$NTHREADS=$tot_load) != `nproc` (number of available cores nproc)" - echo $s_msg - fi - return 0 -} - -# Default values for NCOPIES, NTHREADS, NEVENTS_THREAD must be set in each benchmark -NTHREADS=4 -NCOPIES=$(( `nproc` / $NTHREADS )) -NEVENTS_THREAD=100 -if [ "$NCOPIES" -lt 1 ]; then # when $NTHREADS > nproc - NCOPIES=1 - NTHREADS=`nproc` -fi - -# Source the common benchmark driver -if [ -f $(dirname $0)/bmk-driver.sh ]; then - . $(dirname $0)/bmk-driver.sh -else - . $(dirname $0)/../../../common/bmk-driver.sh -fi