In diesem Beispiel berechnen wir ein bisschen die Zahl Pi.
Aus diesem Grund enthält der Ordner die Dateien:
Makefile
pi_mpi
pi_mpi.cpp
Dies sind die eigentlichen Dateien die bei der Berechnung ausgeführt werden sollen. In Ihrem Fall würden Sie auf die Scriptdatei Ihres Softwareproduktes verweisen, die Sie ausführen möchten.
Die für SLURM relevante Datei ist die "submit.sh"
Werfen wir nun einen Blick auf diese "submit.sh" Datei.
Im oberen Bereich finden Sie ganz viele Zeilen mit "#SBATCH". Diese sehen so aus aus wären Sie auskommentiert, sie sind es aber nicht.
Wie Sie in der README.txt bereits erfahren haben, wird diese Datei später mit dem Befehl "sbatch submit.sh" an das Jobmanagement System übergeben.
Gehen wir auf jede Zeile noch einmal im Detail ein:
#SBATCH -p queue1
Anweisung einen Job in der Queue "queue1" zu erzeugen. Die Queues und die dort laufenden Jobs können Sie über die Befehle "sinfo" und "squeue" abrufen. Mehr dazu später.
#SBATCH -J MPItest
Ihr Job braucht einen beliebigen Namen. Am besten sind 8 Zeichen ohne Leerzeichen und diese sollten ggf. etwas wie eine Versionsnummer enthalten, damit Sie Ihre Jobs später auseinanderhalten können.
#SBATCH -o MPItest-%j.out
Wenn Ihr Job eine Ausgabe produziert, dann können und sollten Sie diese in eine Datei schreiben lassen.
#SBATCH -e MPItest-%j.err
Sie sollten auch eine Datei für eine Fehlerausgabe definieren. Falls Sie den Support unter campuscluster@fh-muenster.de kontaktieren, werden diese zwei Dateien zur Analyse benötigt.
#SBATCH -t 0-12:00:00
Hier wird ein Job für 12 Stunden eingereicht. Es können maximal 10 Tage sein, dann würden Sie "#SBATCH -t 10-00:00:00" schreiben.
#SBATCH --nodes=1
In diesem Fall wird eine einzelne Node gebucht. Wenn Sie in "queue1" buchen, dann stehen dort, je nach Auslastung, bis zu 16 identische Nodes zur Verfügung.
#SBATCH --ntasks-per-node=5
Dies ist die Angabe darüber, wieviel Kerne auf jeder Node gebucht werden sollen, bzw. wie viele Prozesse Ihr Job später auf einer Node eröffnen wird. Ein häufiger Fehler ist es, anzunehmen, hiermit läge später eine Begrenzung Ihres Scriptes auf die angegebene Anzahl von Prozessen vor. Dies ist jedoch nicht der Fall! Wenn Sie hier 5 Kerne buchen, müssen Sie in Ihrem Script sicherstellen, dass dieses auf der Node auch 5 Prozesse startet. Dies führt dann für gewöhnlich zu einer load der Rechennode von 5. Sie können die Eckdaten jeder Node über folgende Webseite auslesen (VPN Verbindung erforderlich): https://main.cc4.fh-muenster.de:3000
#SBATCH --mem-per-cpu=4GB
Dies ist die Angabe über den zu reservierenden Speicherplatz pro gebuchtem Kern. Sie können diese Angabe auch auslassen, wenn Sie beispielsweise Ihre Nodes so buchen, dass nur sie allein die ganze Node reservieren, z.B. durch "--ntasks-per-node=48" auf einer Node mit 48 Kernen.
#SBATCH --mail-type=ALL
Sie wollen Mails erhalten, wenn Ihr Job startet und beendet wird? Dies ist die Option dafür.
In dieser Zeile wird eine Liste der gebuchten Nodes in die Datei nodes.txt geschrieben
export CORES=5
Es wird eine globale Variable CORES angelegt.
cd $SLURM_SUBMIT_DIR
Der Job wechselt in das Verzeichnis, in dem Sie den Startbefehl ausgeführt haben. In diesem Beispiel wäre das ~/slurm-beispiel
HWLOC_COMPONENTS=-gl mpirun -np $CORES ./pi_mpi
Schlussendlich wird ein "mpirun" Befehl ausgeführt, der letztenendes die lastverteilte Rechnung startet. Auch Ihr Softwareprodukt wird höchstwahrscheinlich mit einem mpi Befehl wie mpirun oder orterun gestartet oder Sie starten ein Script, der einen mpi Befehl beinhaltet.
Nachdem alles angepasst ist, starten wir den Job mit sbatch submit.sh
Stellen Sie sicher, dass alle Dateien aus ausführbar sind, nutzen Sie ggf. einfach den Befehl chmod -R 744 ~/slurm-beispiel
Wie Sie sehen, wurde der Job unter der fortlaufenden Nummer 49136 im System angenommen.
Werfen wir nun einen Blick auf das System...
Mit "sinfo" erhalten Sie eine Übersicht über alle Arbeitsnodes und deren Status.
Mit "squeue" erhalten Sie die Liste der momentan im System befindlichen Jobs.
Wie Sie sehen, ist der Job "MPItest" in queue1 angenommen und der Node c06 zur Berechnung übergeben worden.
Gleichzeitig habe ich eine Mail vom System erhalten:
Durch den Job wurden nun mehrere neue Dateien angelegt,...
Die nodes.txt in der die Liste der gebuchten Nodes geschrieben wurde.
Die Ausgabedatei
Die Errordatei
Der Testjob, falls Sie nicht die Eckdaten verändert haben, benötigt einige Zeit. Sie erhalten erneut eine Mail, wenn er abgeschlossen ist.
Schauen Sie währenddessen doch einmal auf die grafische Übersicht von SLURM, die Sie über das Startmenü öffnen oder über den Befehl "sview"
Sie erinnern sich, dass ich oben schrieb: "Wenn Sie hier 5 Kerne buchen, müssen Sie in Ihrem Script sicherstellen, dass dieses auf der Node auch 5 Prozesse startet. Dies führt dann für gewöhnlich zu einer load der Rechennode von 5. Sie können die Eckdaten jeder Node über folgende Webseite auslesen (VPN Verbindung erforderlich): https://main.cc4.fh-muenster.de:3000"
Besuchen Sie diese Webseite einmal, während Ihr Job läuft:
Drücken Sie in der Leiste unten auf das Grafana Logo
Drücken Sie nun auf die gebuchte Node g06
Als wir den Job mit der Angabe "#SBATCH --ntasks-per-node=5" gestartet haben, haben wir 5 Kerne auf Node c06 reserviert und später dem mpi Befehl mit "mpirun -np $CORES ./pi_mpi" in der Variable $CORES übergeben, dass er 5 nutzen soll. Dies sollte im Idealfall jetzt zu einer Auslastung der Node von einer load von 5 führen.
Entspricht die load bei Ihnen nicht ungefähr 5, sondern mehr, ist wahrscheinlich etwas nicht richtig. Haben Sie z.B. 4 Nodes mit jeweils 10 Kernen gebucht, und 1 Node zeigt eine load von 40 und die anderen 3 Nodes eine load von 0, dann ist ganz sicher etwas nicht richtig. Prüfen Sie in diesem Fall unbedingt Ihr Script.
Über Ihre zwei Ausgabedateien können Sie, je nachdem wieviel Output Ihre Software erzeugt, den Fortschritt beobachten. Im besten Fall starten Sie den Job, er wird wie geplant auf alle gebuchten Nodes verteilt und irgendwann erhalten Sie eine Mail über den erfolgreichen Abschluss.
Falls Sie einen Fehler entdecken, können Sie Ihren Job mit dem Befehl "scancel" abbrechen, danach Anpassungen vornehmen und Ihn danach erneut einreichen.