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
zu setzen. Als Folge wird bei Job-Ausführung die Variable $SLURM_EXPORT_ENV gesetzt, was andere Seiteneffekte hat (in unseren Tests lief daraufhin mpirun nicht mehr). Die Lösung ist, im Skript folgende Variable zu löschen:#SBATCH --export=NONE
unset SLURM_EXPORT_ENV
- Initialisierung. Jeder Batch-Job (auch interaktive)
sollten mit folgender Initialisierung beginnen:
Dadurch werden u.a.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_ENVerledigt 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
liefert die Liste in einer einfach weiterzuverarbeitenden Form, zum Beispiel:scontrol show hostnames $SLURM_JOB_NODELIST
scontrol show hostnames node[039-042,123] node039 node040 node041 node042 node123