HPC-Cluster

Array-Jobs

Manchmal möchte man viele gleichartige Jobs laufen lassen, die sich nur in den Parametern unterscheiden. Da es mühselig sein kann, hunderte von fast identischen Jobscripts zu verwalten, und das Batchsystem dadurch stark belastet wird, bieten sich Array-Jobs als Alternative an. Die Grundidee ist einfach: anstatt dem Batchsystem hundert mal zu sagen, dass es einen Job starten soll, sagt man ihm einmal, dass es hundert Jobs starten soll. Realisiert wird das mittels qsub:

qsub -t 10-30:2 my.job

Dieser Aufruf von qsub erzeugt für das Jobscript my.job insgesamt 11 Clones des Jobs, sogenannte Tasks. Jede Task hat eine eindeutige Task-ID (10,12,14,16,18,20,22,24,26,28,30), die im Jobscript auf zwei verschiedene Arten zur Verfügung steht:

1 #!/bin/bash --login
2 #$ -cwd
3 #$ -N array_example.$TASK_ID
4 #$ -j y
5 #$ -o array_example.$TASK_ID.out
6 #$ -m be
7 #$ -M meine.mail@adresse

8 ./meinprogramm < meininput.${SGE_TASK_ID}.in

Im Header kann die Variable TASK_ID (Zeilen 3 und 5) benutzt werden, um z.B. für jede Task ein individuelles Outputfile festzulegen. Im Body kann die Environment-Variable SGE_TASK_ID zur Auswahl taskspezifischer Parametersätze oder Ähnlichem dienen. 

In der Ausgabe von qstat wird für laufende Jobs die Task-ID in der letzten Spalte angezeigt.