Informationen zum Stapelsystem PBS Professional
Für den Umgang mit dem Stapelsystem PBS Pro sind folgende Kommandos vorhanden:
Kommando | Beschreibung |
---|---|
qsub {parameter} {jobskript} | Abgabe eines Jobs |
qstat {parameter} {job-id} | Status eines/aller Ihrer Jobs abfragen |
qalter {parameter} {job-id} | Parameter eines Jobs nachträglich anpassen |
qdel {parameter} {job-id} | Job beenden bzw. löschen |
Jobs werden an das Clustersystem mittels Skripten übergeben. Der Skriptkopf beginnt mit einer Hash-Bang Zeile (z.B.: "#!/bin/bash") und enthält anschließend Kommandos für das Stapelsystem PBS. Anweisungen dafür beginnen mit "#PBS":
Anweisung | Beschreibung |
---|---|
#PBS -N Jobname | Name des Jobs |
#PBS -l select=X:ncpus=Y:mpiprocs=Y:mem=Zgb | Ressourcenanforderung bzgl. Hardware |
#PBS -l walltime=XX:YY:ZZ | Ressourcenanforderung bzgl. Laufzeit |
#PBS -l place={scatter|vscatter|pack|free|{:excl|exclhost|shared}{|:group=host} | scatter ... Jeder Chunk bekommt eine eigene Node vscatter ... Jeder Chunk bekommt eine eigene VNode (entspricht einem Prozessorsockel) pack ... Alles wird auf einer Node gerechnet free ... Wahllose Verteilung der Chunks excl ... Kein weiterer Job startet auf der VNode, auch wenn noch Ressourcen frei sind exclhost ... Die komplette Node wird blockiert shared ... Standardverhalten; Ressourcen werden mit anderen Jobs geteilt group=host ... Alle Chunks müssen auf der gleichen Node sein |
#PBS -m abe | E-Mail Benachrichtigung bei Abbruch, Beginn und Ende des Jobs |
#PBS -M Ihre [dot] Mailadresse [at] tu-freiberg [dot] de | E-Mailempfänger für Benachrichtigungen |
#PBS -o standardausgabe.out | Alternative Ausgabedatei verwenden Standardwert: "<jobname>.o<jobid> |
#PBS -e fehlerausgabe.out | Alternative Fehlerausgabedatei verwenden Standardwert: "<jobname>.e<jobid> |
#PBS -r y | "Rerunable", Job bei Fehler automatisch neu einstellen Standardwert: "true" |
#PBS -q entryq | Angabe der Queue Nur für GPU- und institutseigene Knoten notwendig |
Alle Parameter können auch als qsub-Parameter auf der Kommandozeile mitgegeben werden und überschreiben in diesem Fall Werte in einem Jobskript.
Nach dem Festlegen der oben genannten PBS Optionen sollte der Hauptteil des Skriptes mindestens Folgendes enthalten:
- zu ladende Software
- Programmaufruf mit Eingabedatei und ggf. weiteren Parametern
Konkrete Beispiele finden Sie unter den Beispielskripten.
Erklärung zu den angeforderten Ressourcen
Parameter | Beschreibung |
---|---|
select | Anzahl der angeforderten "Chunks". |
ncpus | Anzahl der Cores pro Chunk Kann maximal 40 bzw. 64 sein. |
mpiprocs | Anzahl der MPI-Prozesse pro Core. Kann maximal zwei Mal die Anzahl ncpus sein (Hyper-Threading). |
ompthreads | Anzahl der OpenMP Threads je Prozess. Kann maximal zwei Mal die Anzahl ncpus sein (Hyper-Threading). |
mem | Angeforderter Arbeitsspeicher pro Chunk. Mögliche Einheiten: MB, GB, TB |
ngpus | Angeforderte GPUs pro Chunk Kann maximal gleich "1" sein, da nur eine GPU pro Node vorhanden ist |
walltime | Maximale Laufzeit im Format HHH:MM:SS |
Beispiel 1: qsub -l select=2:ncpus=20:mpiprocs=10:ompthreads=2:mem=40GB,walltime=10:00:00 -o job.out -e job.err pbspro.script
Hier soll eine parallele Berechnung von maximal 10 Stunden durchgeführt werden. Die Ausgabedateien sind job.out und job.err. Die Prozesse verteilen sich auf 2 Chunks mit je 20 Cores, welche wiederum 10 MPI-Prozesse haben. D.h. um die 20 geforderten Cores auszulasten, muss die Anwendung mit 2 Threads pro MPI-Prozess laufen. Die Walltime muss im Format HHH:MM:SS auch wenn Null-Werte mit angegeben sind. Die Auswertung des Strings erfolgt von rechts nach links.
- walltime=120:00 ergibt demzufolge nicht 120 h, sondern 2 h
- um 120 h zu erhalten, muss man walltime=120:00:00 spezifizieren
Beispiel 2: qsub -l select=2:ncpus=40:mpiprocs=80:mem=80GB
Es werden zwei volle Knoten inkl. der Hyper-Threads gebucht.
Beispiel 3: qsub -l select=1:ncpus=40:ompthreads=80:mem=80GB
Hier wird eine OpenMP-Anwendung einen Knoten vollständig auslasten.
Beispiel 4: qsub -l select=1:ncpus=40:mpiprocs=40:ompthreads=2:mem=80GB
Dieses Beispiel zeigt eine die Anforderung für eine hybride Anwendung mit 40 MPI-Ranks und je zwei OpenMP-Threads je Rank.
Interaktive Jobs
Im Stapelbetrieb interaktiv auf einer Kommandozeile zu arbeiten, ermöglicht z.B. Tests zu absolvieren oder Programme zu debuggen . Dazu nutzen Sie den Befehl qsub -I [Optionen] (groß i). Die Optionen sind analog zu den oben genannten PBS-Anweisungen.
Beispiel: qsub -I -l select=1:ncpus=10:mpiprocs=10:mem=10GB # (erst groß i, dann klein L)
Ebenso können Sie interaktive Jobs nutzen, um grafische Anwendungen auf Ihrem Endgerät darzustellen und dabei aber Rechenkapazitäten vom Cluster zu nutzen. Unterstützung seitens der Anwendung wird vorausgesetzt. Dazu verwenden Sie qsub -I -X [Optionen]. Loggen Sie sich vorher auch auf dem Loginknoten mit aktiviertem X-Forwarding ein ("ssh -X mlogin01").
Reservierungen
Um Ressourcen des Systems für einen gewissen Zeitraum exklusiv zu nutzen ohne an einen einzelnen Job und an dessen Wartezeit gebunden zu sein, kann man über PBS Reservierungen vornehmen. Dazu dienen folgende Kommandos.
Kommando | Erklärung |
---|---|
pbs_rsub | Erstellen einer Reservierung |
pbs_rstat | Statusabfrage von Reservierungen |
pbs_rdel | Eine Reservierung löschen |
pbs_ralter | Eine Reservierung ändern |
Folgende Parameter können bei pbs_rsub verwendet werden:
Parameter | Beschreibung |
---|---|
-R [[[[CC]YY]MM]DD]hhmm[.SS] | Startzeitpunkt |
-E [[[[CC]YY]MM]DD]hhmm[.SS] | Endzeitpunkt |
-D [[HH:]MM:]SS | Dauer der Reservierung |
-N <Name> | Name der Reservierung |
-l <Ressourcenanforderung> | Ressourcenmenge definieren |
-U <Nutzerliste> | Kommagetrennte Nutzerliste |
-m abce | E-Mail Benachrichtigung bei Abbruch, Beginn, Bestätigung und Ende der Reservierung |
-M <E-Mail-Liste> | Kommagetrennte Liste an E-Mailadressen für Benachrichtigungen |
Für die Zeitangaben müssen mindestens zwei der drei genannten Parameter gesetzt sein.
Beispiel
pbs_rsub -R 0800 -D 06:00:00 -l select=5:ncpus=40:mem=100gb
Erklärung
Dieser Befehl fordert 5 Knoten mit je 40 Cores und 100GB Arbeitsspeicher für 6h ab zum nächsten 08:00 Uhr Zeitpunkt.
Verwendung
Der Rückgabewert kann wie folgt aussehen: "R1234.mmaster CONFIRMED". Im Reservierungszeitfenster schicken Sie Ihre Jobs dann an die Queue "R1234", z.B.:qsub -q R1234 -l select=5:ncpus=40:mem=100gb
Die Aufteilung der gebuchten Ressourcen auf mehrere Jobs ist möglich.
Stehen die angeforderten Ressourcen und/oder der angeforderte Zeitraum nicht zur Verfügung, wird die Reservierung "R1234.mmaster DENIED" abgewiesen.
Limitierungen
Innerhalb eines Jobs sind nur die angeforderten Ressourcen sichtbar. Dies kann zur Folge haben, dass eine Überbuchung von CPU oder Arbeitsspeicher Ihre Programme und damit ggf. den ganzen Job abstürzen lässt.