Auf dem HoRUS-Cluster ist der Job Scheduler SLURM in der Version 17.02.2 installiert. SLURM dient dazu, die Rechenjobs der Nutzer so auf dem Cluster zu verteilen, dass dieser möglichst effizient genutzt wird und die Wartezeiten so kurz wie möglich sind. Mehr Informationen zum Einstellen von Jobs finden Sie hier. Die SLURM-Dokumentation befindet sich hier.
Tipp: SLURM steht nur zur Verfügung, wenn das SLURM-Modul auch geladen ist (module load slurm
). Standardmäßig wird das SLURM-Modul beim Login immer geladen, es kann aber durch Nutzeraktionen versehentlich oder absichtlich entladen werden (z.B. mit module purge
). Wenn Sie die SLURM-Befehle nicht zur Verfügung haben, vergewissern Sie sich mit module list
, dass das Modul geladen ist.
Ein SLURM-Job bezieht seine Einstellungen aus verschiedenen Quellen. In absteigender Reihenfolge der Priorität sind dies:
- Kommandozeilenparameter des Befehls, mit dem der Job eingestellt wurde.
- Umgebungsvariablen, falls gesetzt.
- Die Parameter am Anfang eines Jobskripts, falls angegeben.
- Die in SLURM eingestellten Standards.
Das heißt zum Beispiel, dass Sie in einem Job-Skript spezifizieren können, mit welchen Einstellungen es laufen soll, und wenn Sie einmalig abweichende Einstellungen benötigen, können Sie beim Aufruf einfach einen Kommandozeilenparameter angeben.
SLURM-Begriffe
SLURM kennt und berücksichtigt im Prinzip die Aufteilung des Clusters in Knoten mit einzelnen Kernen. Bei der Einstellung von Jobs gibt es mehrere Möglichkeiten, Ressourcen anzufordern. In SLURM-Terminologie ist:
-
Ein Job eine in sich abgeschlossene Rechnung, die aus mehreren Tasks bestehen kann und bestimmte Ressourcen wie einzelne CPUs, eine bestimmte Menge Arbeitsspeicher oder komplette Knoten zugewiesen (allokiert) bekommt.
-
Ein Task der Lauf eines einzelnen Prozesses. Standardmäßig wird pro Knoten ein Task gestartet, und pro Task eine CPU zugewiesen.
-
Eine Partition (häufig auch Queue genannt) eine Warteschlange, in der Jobs eingestellt werden.
Konsolenbefehle und Optionen
Hier sind die üblichsten Befehle, die Sie als SLURM-Nutzer benötigen.
Befehl | Funktion |
---|---|
squeue |
Jobs anzeigen. |
sinfo |
Informationen zu belegten und freien Knoten anzeigen. |
sbatch |
Stellt einen Batch-Job ein. |
srun |
Außerhalb eines Jobs: stellt einen Job mit einem Linux-Befehl ein. Innerhalb eines Jobs: führt einen Befehl in jedem Task aus. |
spartition |
Informationen zu den Partitionen (Queues) anzeigen. ZIMT-Addition. |
scancel |
Einen Job löschen. |
sview |
Grafische Oberfläche starten. |
scontrol |
Detailliertere Informationen (nicht alle für normale Nutzer verfügbar). |
Viele dieser Befehle haben Optionen (Kommandozeilenparameter), die Sie beim Aufruf mit angeben können. Eine volle Liste finden Sie für jeden Befehl mittels man <Befehlsname>
oder <Befehlsname> --help
und auch in der SLURM-Dokumentation von sbatch
. Die wichtigsten sind hier kurz aufgelistet:
Option | Funktion |
---|---|
--partition , -p |
Definiert die Partition auf welcher der Job laufen soll. Wenn dies nicht angegeben wird, wird defq verwendet. |
--nodes , -N |
Definiert die Anzahl der Knoten, auf denen der Job laufen soll. |
--ntasks , -n |
Definiert die Anzahl der Tasks für den Job. |
--ntasks-per-node |
Definiert die maximale Anzahl der Tasks pro Knoten. Wird in der Regel mit MPI-Programmen benutzt. |
--cpus-per-task |
Definiert die Anzahl der CPUs pro Task. In der Regel bei Verwendung von OpenMP wichtig. |
--mem |
Definiert das Arbeitsspeicher-Limit pro Knoten. Der Job wird abgebrochen, sollte das Limit überschritten werden. Der Zahlenwert ist in Kilobyte. |
--time , -t |
Definiert das Zeitlimit des Jobs. Wird das Limit überschritten, wird der Job abgebrochen. Format: D-HH:MM:SS |
--output=<Dateiname> |
Beim sbatch -Befehl spezifiziert dies die Log-Datei in welcher der stdout-Stream geleitet wird. Standardmäßig wird im Ordner, in dem sbatch ausgeführt wurde, eine Datei namens slurm-<JobID>.out angelegt. |
--error=<Dateiname> |
Beim sbatch -Befehl spezifiziert dies die Log-Datei in welcher der stderr-Stream geleitet wird. Standardmäßig wird stderr an dieselbe Stelle geschrieben wie stdout, siehe oben. |
--mail-type |
Spezifiziert die Ereignisse, bei denen eine E-Mail an die mit --mail-user spezifizierte Adresse versendet werden soll. Mögliche Angaben sind BEGIN, END, FAIL, REQUEUE, ALL . |
--mail-user=<Adresse> |
Spezifiziert den Empfänger der E-Mail. |
Umgebungsvariablen
SLURM verwendet eine Reihe von Umgebungsvariablen. Einige können Sie benutzen, um SLURM-Jobs Einstellungen mitzugeben (es sei denn Sie überschreiben sie beim Einstellen des Jobs mittels Kommandozeilenparameter), sie sind für sbatch
zum Beispiel hier beschrieben. Andere Variablen werden von SLURM beim Einstellen des Jobs gesetzt. Diese können Sie innerhalb des Jobs verwenden, um Job-Einstellungen abzufragen. Hier sind nur ein paar Beispiele gelistet, die SLURM-Dokumentation enthält eine vollständige Liste.
Variable | Funktion |
---|---|
SLURM_CPUS_PER_TASK |
CPUs per Task. |
SLURM_JOB_ID |
ID-Nummer des Jobs. |
SLURM_JOB_NAME |
Name des Jobs, bei sbatch standardmäßig der Name des Job-Skripts |
SLURM_JOB_NUM_NODES |
Anzahl der Knoten, die zugewiesen wurden. |
SLURM_JOB_PARTITION |
Partition, in welcher der Job läuft. |
SLURM_NTASKS |
Anzahl Tasks |
SLURM_TASK_PID |
Linux-Prozess-ID des entsprechenden Tasks. |