Skip to content
Snippets Groups Projects
Commit 50f7515c authored by Whitney Armstrong's avatar Whitney Armstrong
Browse files

Generic Bench for common benchmarks

The strategy should still be to write generic code (ie, not exclusive to epic).
parent a8e855f4
No related branches found
No related tags found
1 merge request!75Generic Bench for common benchmarks
image: ${BENCHMARKS_REGISTRY}/${BENCHMARKS_CONTAINER}:${BENCHMARKS_TAG} image: ${BENCHMARKS_REGISTRY}/${BENCHMARKS_CONTAINER}:${BENCHMARKS_TAG}
variables:
DETECTOR: "epic"
DETECTOR_VERSION: "main"
workflow: workflow:
rules: rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
...@@ -43,26 +47,28 @@ common:variables: ...@@ -43,26 +47,28 @@ common:variables:
echo " CI_PIPELINE_SOURCE = ${CI_PIPELINE_SOURCE}" echo " CI_PIPELINE_SOURCE = ${CI_PIPELINE_SOURCE}"
echo " COMMON_BENCH_VERSION = ${COMMON_BENCH_VERSION}" echo " COMMON_BENCH_VERSION = ${COMMON_BENCH_VERSION}"
if [[ "${CI_PIPELINE_SOURCE}" == "push" || "x${CI_PIPELINE_SOURCE}" == "xmerge_request_event" || "$CI_COMMIT_BRANCH" == "master" ]]; then if [[ "${CI_PIPELINE_SOURCE}" == "push" || "x${CI_PIPELINE_SOURCE}" == "xmerge_request_event" || "$CI_COMMIT_BRANCH" == "master" ]]; then
export COMMON_BENCH_VERSION="${CI_COMMIT_REF_NAME}" export COMMON_BENCH_VERSION=${CI_COMMIT_REF_NAME}
echo "COMMON_BENCH_VERSION = ${CI_COMMIT_REF_NAME}"
echo "COMMON_BENCH_VERSION=${CI_COMMIT_REF_NAME}" >> .env echo "COMMON_BENCH_VERSION=${CI_COMMIT_REF_NAME}" >> .env
echo "DETECTOR=${DETECTOR}" >> .env
echo "DETECTOR_VERSION=${DETECTOR_VERSION}" >> .env
echo "COMMON_BENCH_VERSION=${CI_COMMIT_REF_NAME}"
fi fi
echo "COMMON_BENCH_VERSION = ${COMMON_BENCH_VERSION}" echo "COMMON_BENCH_VERSION = ${COMMON_BENCH_VERSION}"
common:setup: common:setup:
stage: config stage: config
needs: ["common:variables"]
rules: rules:
- if: '$CI_SERVER_HOST == "eicweb.phy.anl.gov"' - if: '$CI_SERVER_HOST == "eicweb.phy.anl.gov"'
needs: ["common:variables"]
script: script:
- git clone -b "${COMMON_BENCH_VERSION}" "${CI_REPOSITORY_URL}" setup - git clone -b ${CI_COMMIT_REF_NAME} https://eicweb.phy.anl.gov/EIC/benchmarks/common_bench.git setup
- source setup/bin/env.sh && ./setup/bin/install_common.sh - source setup/bin/env.sh && ./setup/bin/install_common.sh
common:detector: common:detector:
stage: initialize stage: initialize
needs: ["common:setup"]
rules: rules:
- if: '$CI_SERVER_HOST == "eicweb.phy.anl.gov"' - if: '$CI_SERVER_HOST == "eicweb.phy.anl.gov"'
needs: ["common:setup"]
script: script:
- source .local/bin/env.sh && build_detector.sh - source .local/bin/env.sh && build_detector.sh
- bin/mkdir_local_data_link sim_output - bin/mkdir_local_data_link sim_output
...@@ -81,6 +87,9 @@ detector_benchmarks: ...@@ -81,6 +87,9 @@ detector_benchmarks:
strategy: depend strategy: depend
parallel: parallel:
matrix: matrix:
- DETECTOR: 'DII'
DETECTOR_VERSION: 'main'
BEAMLINE: 'ip8'
- DETECTOR: 'epic' - DETECTOR: 'epic'
DETECTOR_CONFIG: 'epic_arches' DETECTOR_CONFIG: 'epic_arches'
DETECTOR_VERSION: 'main' DETECTOR_VERSION: 'main'
......
...@@ -4,11 +4,13 @@ ...@@ -4,11 +4,13 @@
## Overview ## Overview
Code common to: This repository aims to provide:
- [`detector_benchmarks`](https://eicweb.phy.anl.gov/eic/benchmarks/detector_benchmarks/)
- [`reconstruction_benchmarks`](https://eicweb.phy.anl.gov/eic/benchmarks/reconstruction_benchmarks/)
- [`physics_benchmarks`](https://eicweb.phy.anl.gov/eic/benchmarks/physics_benchmarks/)
1. A common benchmark reporting library used in:
- [`detector_benchmarks`](https://eicweb.phy.anl.gov/eic/benchmarks/detector_benchmarks/)
- [`reconstruction_benchmarks`](https://eicweb.phy.anl.gov/eic/benchmarks/reconstruction_benchmarks/)
- [`physics_benchmarks`](https://eicweb.phy.anl.gov/eic/benchmarks/physics_benchmarks/)
2. A set of tools to manage CI builds and data workflows in other project repos (such as those above).
## Usage ## Usage
...@@ -71,4 +73,38 @@ test1.fail(10) ...@@ -71,4 +73,38 @@ test1.fail(10)
common_bench::write_test({test1, test2}, "test.json"); common_bench::write_test({test1, test2}, "test.json");
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
## CI builds and data workflow tools
### Environment Variables
Here we aim to document a coherent set of environment varialbes to pass between CI jobs **and between pipelines**.
The idea is to write as much generic code as possible, so this can be used by any detector currently being implemented or yet to be defined.
#### The Important Ones
| Variable | Meaning and use | Examples | Notes |
| :--- | :--- | :--- | :--- |
| `DETECTOR` | Name of detector and repository | `athena` or `epic` | |
| `DETECTOR_VERSION` | Branch or tagged version to use | A PR branch name automatically generated from issue | Default typically `main` or `master` |
| `BEAMLINE` | Optional, name of beamline/interaction region to build first | `ip6` or `ip8` | Not used if undefined |
| `BEAMLINE_VERSION` | Branch or tagged version to use | Same as | Default typically `main` or `master` |
#### Build Strategy
First, let's start with the underlying assumptions:
- A "finished" container image will include a completely furnished detector (or detectors) -- from here, the goals is to run all the benchmarks.
- Development necessitates rebuilding some of the packaged software. Here we need to avoid unintentionally using the container packaged version we want to supplant.
- This problem persists across CI jobs, triggered pipelines, and working locally.
In the case
#### Data Flow: Artifacts Vs dedicated storage
### For benchmarks
...@@ -20,6 +20,7 @@ if [ -n "${LOCAL_PREFIX}" ] ; then ...@@ -20,6 +20,7 @@ if [ -n "${LOCAL_PREFIX}" ] ; then
else else
source ${LOCAL_PREFIX}/bin/env.sh source ${LOCAL_PREFIX}/bin/env.sh
fi fi
./${LOCAL_PREFIX}/bin/print_env.sh
## ============================================================================= ## =============================================================================
...@@ -33,20 +34,24 @@ if [ -d "${DETECTOR}" ]; then ...@@ -33,20 +34,24 @@ if [ -d "${DETECTOR}" ]; then
echo "cleaning up ${DETECTOR}" echo "cleaning up ${DETECTOR}"
mv "${DETECTOR}" "$(mktemp)-${DETECTOR}" mv "${DETECTOR}" "$(mktemp)-${DETECTOR}"
fi fi
echo "Fetching ${DETECTOR}" echo "Fetching ${DETECTOR}"
#if [ "${DETECTOR}" == "epic" ] ; then
if [ -n "${DETECTOR_DEPLOY_TOKEN_USERNAME:-}" -a -n "${DETECTOR_DEPLOY_TOKEN_PASSWORD:-}" ]; then if [ -n "${DETECTOR_DEPLOY_TOKEN_USERNAME:-}" -a -n "${DETECTOR_DEPLOY_TOKEN_PASSWORD:-}" ]; then
DEPLOY_TOKEN="${DETECTOR_DEPLOY_TOKEN_USERNAME}:${DETECTOR_DEPLOY_TOKEN_PASSWORD}@" DEPLOY_TOKEN="${DETECTOR_DEPLOY_TOKEN_USERNAME}:${DETECTOR_DEPLOY_TOKEN_PASSWORD}@"
echo "Deploy token for ${DETECTOR_DEPLOY_TOKEN_USERNAME} is masked in the next line." echo "Deploy token for ${DETECTOR_DEPLOY_TOKEN_USERNAME} is masked in the next line."
else else
DEPLOY_TOKEN="" DEPLOY_TOKEN=""
fi fi
echo "git clone -b ${DETECTOR_VERSION} --depth 1 ${DETECTOR_REPOSITORYURL:-https://eicweb.phy.anl.gov/EIC/detectors/${DETECTOR}.git} ${DETECTOR}" echo "git clone -b ${DETECTOR_VERSION} --depth 1 ${DETECTOR_REPOSITORYURL:-https://eicweb.phy.anl.gov/EIC/detectors/${DETECTOR}.git} ${DETECTOR}"
git clone -b ${DETECTOR_VERSION} --depth 1 ${DETECTOR_REPOSITORYURL:-https://${DEPLOY_TOKEN}eicweb.phy.anl.gov/EIC/detectors/${DETECTOR}.git} ${DETECTOR} git clone -b ${DETECTOR_VERSION} --depth 1 ${DETECTOR_REPOSITORYURL:-https://${DEPLOY_TOKEN}eicweb.phy.anl.gov/EIC/detectors/${DETECTOR}.git} ${DETECTOR}
if [ -f "${DETECTOR}/requirements.txt" ] ; then if [ -f "${DETECTOR}/requirements.txt" ] ; then
python -m pip install -r ${DETECTOR}/requirements.txt python -m pip install -r ${DETECTOR}/requirements.txt
fi fi
rm -rf "${DETECTOR}/.git"
rm -rf "${DETECTOR}/.git"
popd popd
if [ "${BEAMLINE}" ]; then if [ "${BEAMLINE}" ]; then
...@@ -57,7 +62,9 @@ if [ "${BEAMLINE}" ]; then ...@@ -57,7 +62,9 @@ if [ "${BEAMLINE}" ]; then
echo "cleaning up ${BEAMLINE}" echo "cleaning up ${BEAMLINE}"
mv "${BEAMLINE}" "$(mktemp)-${BEAMLINE}" mv "${BEAMLINE}" "$(mktemp)-${BEAMLINE}"
fi fi
echo "Fetching ${BEAMLINE}" echo "Fetching ${BEAMLINE}"
if [ -n "${BEAMLINE_DEPLOY_TOKEN_USERNAME:-}" -a -n "${BEAMLINE_DEPLOY_TOKEN_PASSWORD:-}" ]; then if [ -n "${BEAMLINE_DEPLOY_TOKEN_USERNAME:-}" -a -n "${BEAMLINE_DEPLOY_TOKEN_PASSWORD:-}" ]; then
DEPLOY_TOKEN="${BEAMLINE_DEPLOY_TOKEN_USERNAME}:${BEAMLINE_DEPLOY_TOKEN_PASSWORD}@" DEPLOY_TOKEN="${BEAMLINE_DEPLOY_TOKEN_USERNAME}:${BEAMLINE_DEPLOY_TOKEN_PASSWORD}@"
echo "Deploy token for ${BEAMLINE_DEPLOY_TOKEN_USERNAME} is masked in the next line." echo "Deploy token for ${BEAMLINE_DEPLOY_TOKEN_USERNAME} is masked in the next line."
...@@ -68,14 +75,15 @@ if [ "${BEAMLINE}" ]; then ...@@ -68,14 +75,15 @@ if [ "${BEAMLINE}" ]; then
git clone -b ${BEAMLINE_VERSION} --depth 1 ${BEAMLINE_REPOSITORYURL:-https://${DEPLOY_TOKEN}eicweb.phy.anl.gov/EIC/detectors/${BEAMLINE}.git} ${BEAMLINE} git clone -b ${BEAMLINE_VERSION} --depth 1 ${BEAMLINE_REPOSITORYURL:-https://${DEPLOY_TOKEN}eicweb.phy.anl.gov/EIC/detectors/${BEAMLINE}.git} ${BEAMLINE}
[[ "$?" == "0" ]] || exit 1 [[ "$?" == "0" ]] || exit 1
rm -rf "${BEAMLINE}/.git" rm -rf "${BEAMLINE}/.git"
ln -s -f ${DETECTOR_PREFIX}/${BEAMLINE}/${BEAMLINE} ${DETECTOR_PATH}/${BEAMLINE}
[[ "$?" == "0" ]] || exit 1
popd popd
#echo "ln -s -f ${BEAMLINE} ${DETECTOR}/${BEAMLINE} "
#ln -s -f ${BEAMLINE} ${DETECTOR}/${BEAMLINE}
#[[ "$?" == "0" ]] || exit 1
mkdir -p ${DETECTOR_PREFIX}/${BEAMLINE}_build mkdir -p ${DETECTOR_PREFIX}/${BEAMLINE}_build
pushd ${DETECTOR_PREFIX}/${BEAMLINE}_build pushd ${DETECTOR_PREFIX}/${BEAMLINE}_build
cmake ${DETECTOR_PREFIX}/${BEAMLINE} -DCMAKE_INSTALL_PREFIX=${LOCAL_PREFIX} -DCMAKE_CXX_STANDARD=17 && make -j$(($(nproc)/4+1)) install || exit 1 cmake ${DETECTOR_PREFIX}/${BEAMLINE} -DCMAKE_INSTALL_PREFIX=${LOCAL_PREFIX} -DCMAKE_CXX_STANDARD=17 -DCENTRAL_DETECTOR=${DETECTOR} && make -j$(($(nproc)/4+1)) install || exit 1
popd popd
rm -rf ${DETECTOR_PREFIX}/${BEAMLINE}_build rm -rf ${DETECTOR_PREFIX}/${BEAMLINE}_build
...@@ -88,7 +96,7 @@ echo "Building and installing the ${DETECTOR} package" ...@@ -88,7 +96,7 @@ echo "Building and installing the ${DETECTOR} package"
mkdir -p ${DETECTOR_PREFIX}/${DETECTOR}_build mkdir -p ${DETECTOR_PREFIX}/${DETECTOR}_build
pushd ${DETECTOR_PREFIX}/${DETECTOR}_build pushd ${DETECTOR_PREFIX}/${DETECTOR}_build
cmake ${DETECTOR_PATH} -DCMAKE_INSTALL_PREFIX=${LOCAL_PREFIX} -DCMAKE_CXX_STANDARD=17 && make -j$(($(nproc)/4+1)) install || exit 1 cmake ${DETECTOR_PREFIX}/${DETECTOR} -DCMAKE_INSTALL_PREFIX=${LOCAL_PREFIX} -DCMAKE_CXX_STANDARD=17 && make -j$(($(nproc)/4+1)) install || exit 1
popd popd
rm -rf ${DETECTOR_PREFIX}/${DETECTOR}_build rm -rf ${DETECTOR_PREFIX}/${DETECTOR}_build
......
...@@ -33,20 +33,29 @@ echo "Setting up the Physics Benchmarks environment" ...@@ -33,20 +33,29 @@ echo "Setting up the Physics Benchmarks environment"
## number of events to be analyzed during the benchmark ## number of events to be analyzed during the benchmark
## Detector package to be used during the benchmark process ## Detector package to be used during the benchmark process
if [ ! -n "${DETECTOR}" ] ; then ## If you didn't define DETECTOR already, you have bigger problesm
export DETECTOR="epic"
fi
if [ ! -n "${DETECTOR_CONFIG}" ] ; then if [ ! -n "${DETECTOR}" ] ; then
export DETECTOR_CONFIG="${DETECTOR}_full" echo "ERROR: No DETECTOR defined!"
echo " There is no assumed default detector."
echo " Set the environment variable DETECTOR accordingly."
#export DETECTOR="epic"
fi fi
# Optional variable, define it or don't use it
#if [ ! -n "${DETECTOR_CONFIG}" ] ; then
# export DETECTOR_CONFIG="${DETECTOR}_full"
#fi
# main is the new master
if [ ! -n "${DETECTOR_VERSION}" ] ; then if [ ! -n "${DETECTOR_VERSION}" ] ; then
export DETECTOR_VERSION="main" export DETECTOR_VERSION="main"
fi fi
if [ ! -n "${DETECTOR_REPOSITORYURL}" ] ; then if [ ! -n "${DETECTOR_REPOSITORYURL}" ] ; then
export DETECTOR_REPOSITORYURL="https://eicweb.phy.anl.gov/EIC/detectors/${DETECTOR}.git" export DETECTOR_REPOSITORYURL="https://eicweb.phy.anl.gov/EIC/detectors/${DETECTOR}.git"
# This if statement should be removed -- just define the variable upstream.
if [ "${DETECTOR}" == "epic" ] ; then if [ "${DETECTOR}" == "epic" ] ; then
export DETECTOR_REPOSITORYURL="https://github.com/eic/${DETECTOR}.git" export DETECTOR_REPOSITORYURL="https://github.com/eic/${DETECTOR}.git"
fi fi
......
#!/bin/bash #!/bin/bash
echo "JUGGLER_TAG: ${JUGGLER_TAG}"
echo "DETECTOR: ${DETECTOR}" echo "DETECTOR: ${DETECTOR}"
echo "DETECTOR_CONFIG: ${DETECTOR_CONFIG}"
echo "DETECTOR_VERSION: ${DETECTOR_VERSION}" echo "DETECTOR_VERSION: ${DETECTOR_VERSION}"
echo "DETECTOR_CONFIG: ${DETECTOR_CONFIG}"
echo "DETECTOR_PATH : ${DETECTOR_PATH}"
echo "DETECTOR_PREFIX: ${DETECTOR_PREFIX}"
echo " "
echo "BEAMLINE: ${BEAMLINE}" echo "BEAMLINE: ${BEAMLINE}"
echo "BEAMLINE_CONFIG: ${BEAMLINE_CONFIG}" echo "BEAMLINE_CONFIG: ${BEAMLINE_CONFIG}"
echo "BEAMLINE_VERSION: ${BEAMLINE_VERSION}" echo "BEAMLINE_VERSION: ${BEAMLINE_VERSION}"
echo "DETECTOR_PREFIX: ${DETECTOR_PREFIX}" echo " "
echo "DETECTOR_PATH: ${DETECTOR_PATH}"
echo "BENCHMARK_N_EVENTS: ${BENCHMARK_N_EVENTS}" echo "BENCHMARK_N_EVENTS: ${BENCHMARK_N_EVENTS}"
echo "BENCHMARK_N_THREADS: ${BENCHMARK_N_THREADS}" echo "BENCHMARK_N_THREADS: ${BENCHMARK_N_THREADS}"
echo "BENCHMARK_RNG_SEED: ${BENCHMARK_RNG_SEED}" echo "BENCHMARK_RNG_SEED: ${BENCHMARK_RNG_SEED}"
echo " "
echo "JUGGLER_TAG: ${JUGGLER_TAG}"
echo "JUGGLER_N_EVENTS: ${JUGGLER_N_EVENTS}" echo "JUGGLER_N_EVENTS: ${JUGGLER_N_EVENTS}"
echo "JUGGLER_N_THREADS: ${JUGGLER_N_THREADS}" echo "JUGGLER_N_THREADS: ${JUGGLER_N_THREADS}"
echo "JUGGLER_RNG_SEED: ${JUGGLER_RNG_SEED}" echo "JUGGLER_RNG_SEED: ${JUGGLER_RNG_SEED}"
echo " "
echo "LOCAL_PREFIX: ${LOCAL_PREFIX}" echo "LOCAL_PREFIX: ${LOCAL_PREFIX}"
echo "LOCAL_DATA_PATH: ${LOCAL_DATA_PATH}" echo "LOCAL_DATA_PATH: ${LOCAL_DATA_PATH}"
echo " "
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment