Batch-System SLURM
Auf Hummel wird das Batch-System SLURM eingesetzt. Im folgenden sind die wichtigsten Elemente von SLURM im Vergleich zum Batch-System PBS aufgeführt, das auf dem Vorgängersystem installiert war:
- Kommandos
- Job-Parameter
- Bei Ausführung gesetzte Umgebungsvariable
- Besonderheiten (!) / Unterschiede zu PBS
Die vollständige SLURM-Dokumentation ist unter http://slurm.schedmd.com/documentation.html zu finden.
Kommandos
Kommando | PBS | SLURM |
---|---|---|
Job abschicken | qsub job-script | sbatch job-script |
Interaktiv arbeiten | qsub -I [options] | salloc [options] |
Job löschen oder abbrechen | qdel job-ID | scancel job-ID |
Status eines Jobs anzeigen | qstat job-ID | squeue -j job-ID |
Alle eigenen Jobs anzeigen | qstat -u $USER | squeue -u $USER |
Alle Jobs (Warteschlange) anzeigen | qstat [-a] | squeue |
Zu erwartende Startzeit anzeigen | squeue --start -j job-ID |
Job-Parameter
Parameter | PBS | SLURM |
---|---|---|
Direktive im Skript | #PBS | #SBATCH |
Job-Name | -N name | --job-name=name |
Queue/Partition | -Q queue | --partition=partition |
Knotenanzahl | -l nodes=n | --nodes=n |
Prozesse pro Knoten | -l ppn=n | --tasks-per-node=n |
Zeitlimit | -l walltime=seconds | --time=minutes |
-l walltime=hh:mm:ss | --time=hh:mm:ss | |
Stdout-Datei | -o filename | --output=filename |
Stderr-Datei | -e filename | --error=filename |
Stdout und stderr in eine Datei | -j oe (beide in stdout) | (--output angeben, --error nicht) |
E-Mail-Adresse | -M address | --mail-user=address |
E-Mail-Benachrichtigung | -m b | --mail-type=BEGIN |
-m e | --mail-type=END | |
-m a | --mail-type=FAIL | |
-m abe | --mail-type=ALL | |
Job ist nicht restart-fähig | -r n | --no-requeue |
Bei Ausführung gesetzte Umgebungsvariable
Variable | PBS | SLURM |
---|---|---|
Job-ID | $PBS_JOBID | $SLURM_JOBID |
Verzeichnis aus dem der Job abgeschickt wurde | $PBS_O_WORKDIR | $SLURM_SUBMIT_DIR |
Liste der zugewiesenen Knoten | $PBS_NODEFILE (Dateiname) | $SLURM_JOB_NODELIST (die Liste selbst) |
Besonderheiten (!) / Unterschiede zu PBS
Eine Besonderheit auf Hummel ist, dass Batch-Jobs nicht in das
Heimatdateisystem /home
schreiben können! Damit wird
erzwungen, dass das Arbeitsverzeichnis in der Regel
unter $WORK
liegt. Auch die Batch-Log-Datei kann nicht
unter $HOME
angelegt werden: wenn das Arbeitsverzeichnis beim
Abschicken unter $HOME
liegt, erhält man keine
Batch-Log-Datei (es sei denn, man
hat mit --output
/--error
die Ausgabe
nach $WORK
spezifiziert).
Im Vergleich zu PBS sind uns beim Arbeiten mit SLURM folgende Besonderheiten aufgefallen:
- Queue/Partition. Es muss immer eine Partition angegeben werden (automatisch kann SLURM nur die als default konfigurierte Partition zuweisen; PBS findet automatisch eine geeignete Warteschlange). Auf Hummel ist keine default-Partition konfiguriert.
- Umgebungsvariable. Beim Abschicken eines Jobs werden alle Umgebungsvariable in den Job übernommen. Das ist auf den ersten Blick recht praktisch, kann aber dazu führen, dass sich dasselbe Job-Skript in Abhängigkeit der gerade gesetzten Umgebungsvariablen unterschiedlich verhält. Um eine definierte Umgebung zu haben, ist es empfehlenswert, im Job-Skript die Direktive
#SBATCH --export=NONE
unset SLURM_EXPORT_ENV
- Initialisierung. Jeder Batch-Job (auch interaktive)
sollten mit folgender Initialisierung beginnen:
source /sw/batch/init.sh # für die sh-Familie, z.B. sh, ksh, bash source /sw/batch/init.csh # für die csh-Familie, z.B. csh, tcsh
unset SLURM_EXPORT_ENV
erledigt und diemodule
-Funktion definiert. - Arbeitsverzeichnis. Ein SLURM-Job startet in dem Verzeichnis, in dem er abgeschickt wurde (ein PBS-Job startet im Heimatverzeichnis).
- Log-Dateien. Die Log-Dateien heißen slurm-jobID.out auch wenn ein Job-Name gesetzt wurde (unter PBS heißt die Log-Datei dann name.ojobID). Von PBS her gewohnte Dateinamen kann man wie in folgendem Beispiel erhalten:
#SBATCH --job-name=ErsterTestJob #SBATCH --output=ErsterTestJob.o%j
- Knotenliste. SLURM stellt automatisch keine Datei zur Verfügung, die die Namen der zugewiesenen Knoten enthält (wie $PBS_NODEFILE). Das Kommando
scontrol show hostnames $SLURM_JOB_NODELIST
scontrol show hostnames node[039-042,123] node039 node040 node041 node042 node123