Reference
The primary way for users to interact with the exacb
framework is through the GitLab
CI/CD Components.. The components
introduce jobs in the GitLab CI/CD pipeline that run the benchmarks, gather the
results, deploy them to the storage, and publish them to the GitLab Pages of
the project. Currently, the exacb
framework provides the following
components:
jureap/jube CI/CD Component
The jureap/jube
is the primary component of the exacb
framework for the JUREAP
program. It inserts a selection of jobs into the GitLab CI/CD pipeline that are used to run
benchmarks on the JSC machines, deploy the results to the storage, and publish the results to the
Gitlab Pages of the project. The visibility of the complete set of data and Gitlab Pages is
identical to the visibility of the benchmark repository.
Usage
The jube
component accepts the above variables as input and run the JUBE
benchmark on the specified machine with the specified parameters.
module load JUBE
jube-autorun -r \
"-e --tag $[[inputs.usecase]] $[[inputs.queue]] $[[inputs.variant]] --outpath ../outpath" $[[inputs.jube_file]]
The above command runs the JUBE benchmark on the specified machine with the
include:
- component: gitlab.jsc.fz-juelich.de/exacb/catalog/jureap/jube@main
inputs:
prefix: <prefix>
variant: <variant{.subvariant}>
machine: <machine name>
queue: <slurm queue to use>
project: <slurm project name>
budget: <budget to use for the benchmark>
reservation: <reservation to use for the benchmark>
is_public: all
jube_file: benchmark/jube/shell.yml
fixture: <gitlab CI job template for job fixture>
usecase: <the use case you want to run, empty by default>
record: <record the benchmark results, default is true>
.fixture:
before_script:
- # ... code to setup the benchmark
name |
description |
required |
default |
allowed values |
---|---|---|---|---|
prefix |
namespace prefix for CI jobs |
yes |
- |
any |
variant |
variant and subvariants for the benchmark |
yes |
- |
any |
machine |
machine for the benchmark |
yes |
- |
juwels,juwels_booster,jureca |
queue |
queue for the benchmark |
yes |
- |
any |
project |
project for the benchmark |
yes |
- |
any |
budget |
budget account for the benchmark |
yes |
- |
any |
reservation |
reservation for the benchmark |
no |
empty |
any |
is_public |
publicity of the benchmark |
yes |
- |
all,resultonly,private |
jube_file |
path to the jube file |
yes |
- |
any |
fixture |
fixture template for the benchmark |
yes |
empty |
any |
The components mentioned above are specified in more detail below.
prefix
Prefix to namespace the CI/CD jobs introduced by the component.
One must use a unique prefix for each use of a component in your pipeline.
For example, if you set the prefix to
mylib.exacb
, and the component adds a job with basenamebuild
, the full job name will bemylib.exacb.build
. Adding a prefix to your jobs names ensures that you can include a component multiple times in your pipeline without causing name conflicts. It also makes it easier to include the components in your production pipeline without conflicting with other jobs.The component reserves the right to add any jobs starting with `prefix` , therefore, user should not manually any jobs starting with the `prefix` anywhere in the pipeline.
record (optional)
since:
v3
default value:
false
Record the benchmark results. The variable is optional and is false by default. The variable is used to control whether the benchmark results should be recorded or not. The variable is useful when the user wants to run the benchmark but does not want to record the results. The user can set the variable to false in such cases.
Note
The user should set the variable to false only when the user does not want to record the benchmark results. The user should set the variable to true when the user wants to record the benchmark results.
variant
The variant of the benchmark that you want to run on the machine.
Options:
single
,strong.micro
,strong.tiny
,strong.small
,strong.medium
,weak.tiny
,jedi.evaluation.jedi
(since v3),jedi.evaluation.jureca
(since v3),jedi.evaluation.juwels_booster
(since v3)
machine
The JSC machine on which to execute the CI job.
Options:
juwels
,juwels_booster
,jureca
,jedi
queue
The slurm queue that the benchmark should run on.
project
The name of the slurm project you want to use to run the benchmark. The slurm-based project namespace will be used to run the benchmarks. In particular, the benchmarks will be executed in
/p/scratch/<project>/$GITLAB_USER_LOGIN.exacb/$CI_JOB_ID
. The rest of the paths will be created automatically by the Jacamar CI component as needed.Here,
<project>
is the value of theproject
variable. $GITLAB_USER_LOGIN is the Gitlab/JUDoor username for the user who has triggered the pipeline.$CI_JOB_ID
is the unique identifier for the job which can be found by the user in the Gitlab CI/CD pipeline’s web UI.The user triggering the pipeline should have access to the project specified here.
Note
The
jureap/jube
component is designed to run in the location dependent on <project> given by the path below. You can also find this information in the output of the CI/CD job as shown here ./p/scratch/<project>/$GITLAB_USER_LOGIN.exacb/$CI_JOB_ID/$GITLAB_USER_LOGIN/<...>
label (optional)
since:
v3
default value:
<empty>
The label to use for the benchmark. The label is used to identify the benchmark in the benchmark results. The label is optional and is empty by default.
In JUREAP, the label is used as a caption for the benchmark table and for the name in the legend of the benchmark plot.
budget
Compute budget to use for the benchmark.
The user triggering the benchmark should have access to the budget specified here.
reservation (optional)
default value: <empty>
The reservation to use for the benchmark. The user triggering the benchmark should have access to the reservation specified here. The variable is optional, and in case no variable is provided, the benchmark will be executed without a reservation.
is_public
The visibility of the benchmarks. The JUREAP program might want to use and publish the results from the benchmarks for various purposes. In the process, it is important to ensure that publicity of various aspects of the benchmark results is enforced.
While the actual choice of the visibility is done offline in the JUREAP program, we provide a way for the applications to control the visibility of the benchmark results in the CI/CD pipelines as well. The extra control here acts as an additional check for the automated workflows.
Options:
all
: Both results and benchmark code can be published publically.
resultonly
: Only the results are public, while the benchmark code is private.
private
: Neither the results nor the benchmark code is public.
jube_file
The path to the JUBE file to use for the benchmark. The path should be specified relative to the root of the repository.
usecase (optional)
default value:
<empty>
The use case you want to run. The use case is a string that can be used to differentiate between different usecases you want to run from the same jube file. The use case is optional and is empty by default, which is what would be the case for most single benchmarks.
The string would be passed verbatim to jube as additional tags. See the invocation below for an example.
fixture
By default the CI/CD component will run something equivalent to the code presented at the start of the section
It is possible that a user might want to do more setup before and after the benchmark run is executed, in essence attach a fixture to the benchmark run. In the
exacb
framework, we provide a way for the user to specify the fixture in form of agitlab CI/CD
job template.A user can provide gitlab CI/CD job template with a before_script section containing the setup script. The
before_script
section runs according to the policies of gitlab in the benchmark job. In particular, thebefore_script
section runs before the actual benchmark. The environment setup in thebefore_script
section is available to the benchmark job as well.Additionally, the user can optionally provide a
after_script
section in the.fixture
template. Theafter_script
section runs after the benchmark job complete according to the policies of gitlab. In particular, theafter_script
section do not affect the job’s exit code, and runs in a new shell, separate from thebefore_script
section and the benchmark job. Theafter_script
section is useful for any tear down that the user might want to do.Note
Due to the technical limitations of the Gitlab CI/CD components, the user must provide the input to the
fixture
variable even when the user does not need to set up anything. In such cases, the user can provide an emptybefore_script
section as shown below. One can look at how it is used in thequickstart
repository..setup.template: before_script: - echo "No Setup Needed"
jureap/jedi CI/CD Component
The jureap/jedi
is the evaluation component of the exacb
framework for the JUREAP JEDI evaluation milestone. The component takes in data
from an existing pipeline runs, analyses the data, generates the report, stores
the report in the pages branch of the repository.
IMPORTANT: The jureap/jedi
component is designed to run on the data
that already exists in the exacb.data branch of the repository from the
previous pipeline runs. It CANNOT run on the data that is generated by the
current pipeline run.
In order to run the jureap/jedi
component, the user must have run the
jureap/jube
component before as specified in Evaluation
Instructions in
the recording mode.
The generated reports are stored in the pages branch of the repository. The component creates a directory containing both the report and the raw data used to generate the report. The directory is named using the scheme as follows:
<pipelineid>-<date-time>-<prefix>
where <pipelineid>
is the pipeline id of the pipeline run which was
used to generate the report, <date-time>
is the date and time when the
pipeline was created, and <prefix>
is the prefix used to namespace the
CI/CD jobs introduced by the component.
Usage
include:
- component: gitlab.jsc.fz-juelich.de/exacb/catalog/jureap/jedi@v3
inputs:
prefix: "report.jedi.evaluation"
pipeline: [ "221418", "221415" ] # Array of pipeline ids
selector: [ "jedi.strong.tiny" , "jureca.strong.tiny" ] # Array of corresponding selectors
### WORKLOAD FACTOR IS DEPRECATED!!! IT IS NOT USED IN THE JEDI EVALUATION
workload_factor: [ "1.2" , "1.0" ] # Array of corresponding workload factors
name |
description |
required |
default |
allowed values |
---|---|---|---|---|
pipeline |
id of pipeline to include in results |
yes |
- |
integer number of pipeline id |
selector |
prefix of the results to use in the pipeline |
yes |
- |
string of prefix |
workload_factor (DEPRECATED) |
no use |
no |
1.0 |
float number |
The jube
component accepts the above variables as input.
The components mentioned above are specified in more detail below.
pipeline
The array of pipeline ids to use for the evaluation. The pipeline id is used to select the data from a particular pipeline run for evaluation. The entries of the pipeline array correspond in a one-to-one manner with the selector array. One can use as many pipeline ids as needed for the plotting. The data of different pipelines from the same machine will be aggregated into a single data set when plotting.
selector
The selector array to use for the evaluation. The selector is used to select the data from a particular prefix in the pipeline for evaluation. The entries of the selector array correspond in a one-to-one manner with the entries of the pipeline array.
In the example usage above, the selector
jedi.strong.tiny
is used to select the data from thejedi.strong.tiny
instance of pipeline [ “221418”] for evaluation, while the selectorjureca.strong.tiny
is used to select the data from thejureca.strong.tiny
instance of pipeline [ “221415”] for evaluation.
workload_factor (DEPRECATED!)
The workload factor is a DEPRECATED parameter here, not used in the JEDI evaluation. The parameter is kept for backward compatibility with the previous versions of the component. Please set the parameter to an array of the same length as the pipeline array with the value 1.0 for each entry in the array as shown in the example.
jureap/scaling CI/CD Component
The jureap/scaling
is the evaluation component of the exacb
framework for the JUREAP scaling evaluation milestone. The component takes in data
from an existing pipeline runs, analyses the data, generates the report, stores
the report in the pages branch of the repository.
IMPORTANT: The jureap/scaling
component is designed to run on the data
that already exists in the exacb.data branch of the repository from the
previous pipeline runs. It CANNOT run on the data that is generated by the
current pipeline run.
In order to run the jureap/scaling
component, the user must have run the
jureap/jube
component before as specified in :ref:`Evaluation
Instructions <https://gitlab.jsc.fz-juelich.de/jureap/jureap/-/issues/21>`_ in
the recording mode.
The generated reports are stored in the pages branch of the repository. The component creates a directory containing both the report and the raw data used to generate the report. The directory is named using the scheme as follows:
<pipelineid>-<date-time>-<prefix>
where <pipelineid>
is the pipeline id of the pipeline run which was
used to generate the report, <date-time>
is the date and time when the
pipeline was created, and <prefix>
is the prefix used to namespace the
CI/CD jobs introduced by the component.
Usage
include:
- component: gitlab.jsc.fz-juelich.de/exacb/catalog/jureap/scaling@v3
inputs:
prefix: "report.scaling.evaluation"
pipeline: [ "221418", "221415" ] # Array of pipeline ids
selector: [ "scaling.strong.tiny" , "jureca.strong.tiny" ] # Array of corresponding selectors
workload_factor: [ "1.2" , "1.0" ] # Array of corresponding workload factors
skip_workload_factor: false # Skip the workload factor error bars in the plot
legend_position: "0.9,0.15" # Position of the legend in the plot (x,y)
The jube
component accepts the above variables as input.
The components mentioned above are specified in more detail below.
pipeline
The array of pipeline ids to use for the evaluation. The pipeline is used to
selector
The selector array to use for the evaluation. The selector is used to select the data from a particular prefix in the pipeline for evaluation. The entries of the selector array correspond in a one-to-one manner with the entries of the pipeline array.
In the example usage above, the selector
scaling.strong.tiny
is used to select the data from thescaling.strong.tiny
instance of pipeline [ “221418”] for evaluation, while the selectorjureca.strong.tiny
is used to select the data from thejureca.strong.tiny
instance of pipeline [ “221415”] for evaluation.
workload_factor
The workload factor to use for the evaluation. The
workload_factor
input parameter is used to assign a workload parameter for benchmarks. This is meant to be used in cases where the workloads of the two benchmarks (the one on scaling and the one on JURECA for example) are different. Different benchmark workload means that the benchmarks are not directly comparable. The workload factor is then used to make the benchmarks comparable.Assume you are doing the following scaling:
Tiny : 1,2,4 nodes
Small : 8,16,32 nodes
Medium : 64,128,256 nodes
and assume that the computational workload to execute the simulation is given by
Tiny : 1 unit
Small : 8 units
Medium : 64 units
Then, for a perfectly weak scaling workload, the simulation on 1, 8 and 64 nodes should take the same time. The workload factors are then given by
Tiny : 1
Small : 8
Medium : 64
skip_workload_factor (optional)
since:
v3
default value:
false
Skip the workload factor error bars in the plot. The variable is optional and is false by default. The variable is used to control whether the workload factor error bars should be plotted or not. The variable is useful when the user wants to plot the workload factor error bars. The user can set the variable to false in such cases.
Note
The user should set the variable to false only when the user wants to plot the workload factor error bars. The user should set the variable to true when the user does not want to plot the workload factor error bars.
legend_position (optional)
since:
v3
default value:
0.9,0.15
(x,y)
The position of the legend in the plot in (x,y) co-ordinates. The variable is optional and is
0.9,0.15
by default. The variable is used to control the position of the legend in the plot. The variable is useful when the user wants to change the position of the legend in the plot. The user can set the variable to the desired position in such cases.Note
The user should set the variable to the desired position of the legend in the plot. The user should set the variable to the default value when the user does not want to change the position of the legend in the plot.