Main Navigation

Secondary Navigation

Page Contents

Contents

Using Job Arrays

If you have a large number of similar, small to medium sized jobs, the use of a slurm job array is recommended. It is convenient to use and allows the workload manager to operate more efficiently than with a large number of individual single jobs. A job array is created by adding the --array option to the sbatch command or using #SBATCH --array= in your submision script.

The use of job arrays is best explained using an example. Let's assume that you have an executable called exec that is located at path_to_exec/ and that requires an input file with extension *.inp for running. Let's furthermore assume that you have a folder with 100 different *.inp files that you want to run. You can then start these 100 jobs as an array using the job script shown below.

#!/bin/bash
#SBATCH --job-name=jobArrayExampe
#SBATCH --array=0-99
#SBATCH --time=00:05:00
#SBATCH --ntasks=1

# find the corresponding input files in the current folder
i=0
INP=""
while read line
do
    if [ {$SLURM_ARRAY_TASK_ID} == {$i} ]; then
       INP="$line"
       break
    fi
    (( i++ ))
done < <(ls *.inp)

if [ "$INP" ]; then
       path_to_exec/exec "$INP"
else
       echo "Job array size larger than no. of input files"
fi
		
The job array gets a single unique job ID. The IDs of the individual tasks are constructed by appending an index to the job ID of the entire job array. These indices start from 0 and run to 99 (--array=0-99). These indices are also appended to the names of the stderr and stdout files.

When submitting the above script to sbatch, the variable SLURM_ARRAY_TASK_ID gets replaced with all indices provided with the --array option.

In case a few jobs from the array fail, say, the ones with IDs 4, 7, and 11, you can rerun them by providing --array=4,7,11 to the sbatch command.

It is not recommended to bundle more than 250 jobs in one job array.