Springe direkt zu Inhalt

Job-Array

Für eine große Zahl von Jobs, die durch eine einzelne ganze Zahl parametrisiert werden können, sollte man ein Job-Array verwenden.  Dies hat den Vorteil, dass wartende Jobs, die Teil eines Arrays sind, von Programmen wie squeue zusammengefasst werden können.  Damit wird die Liste der wartenden Jobs wesentlich übersichtlicher.

Ein Job-Array wird folgendermaßen abgeschickt:

sbatch --array=1-20 my_script.sh

Für jeden Wert, der durch die Option --array spezifiziert wird, wird die Variable ${SLURM_ARRAY_TASK_ID} im Skript durch diesen Wert ersetzt. Die maximale Array-Größe ist 5001.

Im einfachsten Fall wird der Array-Index als Argument direkt an das Programm gegeben:

#!/bin/bash

#SBATCH --job-name=my_job_array                 # replace name
#SBATCH --mail-user=example@zedat.fu-berlin.de  # replace email address
#SBATCH --mail-type=end
#SBATCH --nodes=1
#SBATCH --ntasks=1                              # replace with value for your job
#SBATCH --mem-per-cpu=4096                      # replace with value for your job
#SBATCH --time=08:00:00                         # replace with value for your job
#SBATCH --qos=medium                            # replace with value for your job

module add ExampleProg/1.2.3-foss-2018b         # replace with value for your job

cd /scratch/${USER}                             # replace with your directory
exampleprog ${SLURM_ARRAY_TASK_ID}              # replace with your program

Es kann aber auch ein Array von Parameterkombinationen erstellt werden und der Array-Index verwendet werden, um eine bestimmte Kombination auszuwählen:

#!/bin/bash

#SBATCH --job-name=my_job_array                 # replace name
#SBATCH --mail-user=example@zedat.fu-berlin.de  # replace email address
#SBATCH --mail-type=end
#SBATCH --nodes=1
#SBATCH --ntasks=1                              # replace with value for your job
#SBATCH --mem-per-cpu=4096                      # replace with value for your job
#SBATCH --time=08:00:00                         # replace with value for your job
#SBATCH --qos=medium                            # replace with value for your job

declare -a combinations
index=0
for run in `seq 1 10`
do
    for direction in 'north' 'south' 'east' 'west'
    do
        for size in 7 11 19 33 112
        do
            combinations[$index]="$run $direction $size"
            index=$((index + 1))
        done
    done
done

parameters=(${combinations[${SLURM_ARRAY_TASK_ID}]})

run=${parameters[0]}
direction=${parameters[1]}
size=${parameters[2]}

module add ExampleProg/1.2.3-foss-2018b         # replace with value for your job

cd /scratch/${USER}                             # replace with your directory
exampleprog ${run} ${direction} ${size}