Ressourcenverwaltung mit dem Batchsystem LSF

Die Vergabe von Ressourcen des Clusters für parallele Anwendungen wird über die "Load Sharing Facility" LSF der Firma Platform gesteuert. Anwendungen werden den Warteschlangen von LSF mit dem bsub-Kommando übergeben. LSF teilt der Anwendung die angeforderten Ressourcen unter Berücksichtigung einer möglichst guten Auslastung des Clusters und einer möglichst gerechten Erfüllung aller anstehenden Anforderungen zu.

Konfiguration der Warteschlangen

Zur Zeit ist im LSF eine Warteschlange gwdg-pcpar  für alle Anwendungen definiert. Weitere Warteschlangen können konfiguriert werden, falls sich dies für eine Verbesserung des Betriebs erforderlich erweist.

Die Grenzwerte für mögliche Anforderungen der Warteschlangen sind in der folgenden Tabelle zusammengestellt

Name der
Warteschlange
Verweilzeit
maximal
Verweilzeit
default
Prozessorzahl
maximal
Speicher
maximal
Speicher
default
gwdg-pcpar 48 h 1 h 108 2 GB 100 MB

 

 

Maximal werden zwei MPI-Prozesse pro Knoten gestartet, so dass eine Anwendung, die 2n MPI-Tasks anfordert, im Normalfall exklusiv auf n Knoten bearbeitet wird. Wenn die Knoten exklusiv mit nur einem MPI-Task genutzt werden sollen, kann die exklusive Nutzung der Knoten durch die Option -x beim Abschicken des Jobs in die Warteschlange verlangt werden. Dies ist nur dann sinnvoll, wenn innerhalb eines MPI-Tasks zwei parallele Threads gestartet werden sollen, so dass beide Prozessoren in den Knoten genutzt werden.

Anwendungen starten mit dem bsub-Kommando

Das Starten einer parallelen Anwendung unter LSF mit bsub erfordert die Angabe mehrerer Parameter, die die Anforderungen für die Anwendung beschreiben. Ein typisches Beispiel sieht folgendermaßen aus:

bsub -n 16 -R "span[ptile=1]" -o out.%J -M 2000000 -W 24:00 -x
     -q gwdg-pcpar pam -g sca_mpimon_wrapper a.out

mit folgender Bedeutung der verschiedenen Optionen:
-n 16
  
                                                                        16 Prozessoren sollen verwendet werden

-R "span[ptile=1]"
                                         pro Knoten soll 1 Prozessor verwendet werden

-o o.%J
                                                                        die Ausgabe wird in die Datei o.%J geschrieben,
                                                                                             wobei %J durch die Auftragsnummer ersetzt wird

-M 2000000
                                                                 pro MPI-Task werden 2.000.000 KB Hauptspeicher benötigt

-W 24:00
                                                                  der Auftrag hat eine maximale Laufzeit von 24 h

-x
                                                                                der Auftrag braucht exklusive Nutzung der Knoten

-q gwdg-pcpar
                                                         der Auftrag wird in die Warteschlange gwdg-pcpar gestellt  

pam -g sca_mpimon_wrapper
                     Start, Ausführung und Beendigung der parallelen MPI-Tasks werden
                                                                                            vom "parallel application manager"  pam überwacht,
                                                                                            der mpimon zum Starten der MPI-Tasks benutzt

a.out
                                                                            die auszuführende MPI-Anwendung


Ohne explizite Angabe von -M und -W werden für einen Auftrag in der Warteschlange gwdg-pcpar höchstens 100.000 KB Speicher und 1 h Verweilzeit zugelassen..
Weitere Optionen sind den Manual-Seiten zu bsub zu entnehmen.
Anwendungen können interaktiv gestartet werden durch Angabe der Option -I. LSF startet dann die Anwendung sofort, wenn die benötigten Ressourcen frei sind und bricht das Kommando im anderen Falle mit einer Fehlermeldung ab.

Anwendungen über ein Skript starten.

Mit bsub kann auch ein Skript gestartet werden, das mehrer parallele und sequentielle Anwendungen nacheiander ausführt, wobei die parallelen MPI-Anwendungen über pam aufgerufen werden müssen. Hier ein Beispiel einer Skript-Datei skript1

#!/bin/sh
date
echo "Starten des ersten MPI-Anwendung"
pam -g sca_mpimon_wrapper hello_mpi
date
echo "Starten des zweitenMPI-Anwendung"
pam -g sca_mpimon_wrapper hello_mpi

 
Mit dem Kommando

bsub  -n 32 <weitere bsub_Optionen>  skript1

wird das Sript gestartet gestartet und führt die sequentiellen Kommandos auf einem Prozessor, die parallellen Anwendungen auf 32 Prozessoren aus.

Zusammenstellung wichtiger LSF-Kommandos


bqueues                         informiert über Eigenschaften und Belegung der Warteschlange, mit -l ausführlich
bhosts                            informiert über Zustand und Belegung der Rechnenknoten

lsload
                           informiert über verschiedene Maßzahlen zur Auslastung der Knoten-Ressourcen
                                          wie Zeitmittel über die Anzahl von laufenden Prozessen, CPU-Auslastung, Speichernutzung u. a. m.


bjobs                            informiert über den Zustand eigener Aufträge in LSF, mit -u all über Aufträge von allen Benutzern
bsub                               stellt einen Auftrag in die default-Warteschlange gwdg-pcpar
                                         und informiert über die von LSF vergebene Auftragsnummer <jobid>


bkill <jobid>       nimmt den Auftrag mit der Nummer <jobid> aus der Warteschlange oder beendet seine Ausführung

Nähere Erläuterungen zu allen LSF-Kommandos und ihrern Optionen sind über das man-Kommando erhältlich.



Das GWDG-Kommando  mpirun

Die GWDG stellt ein Skript mpirun zur Verfügung, das das bsub-Kommando für einzelne parallele Anwendungen mit den notwendigen Optionen  generiert. Das oben angegebene  Beispiel kann mit folgendem Aufruf von mpirun erzeugt werden:

mpirun -lsf -np 16 –npn 1 -M 1000000 -W 48:00 –x a.out

 
Eine vollständige Übersicht der für mpirun möglichen Optionen wird mit mpirun –h angezeigt:

ohaan@gwdu102> mpirun     
ATTENTION:
This command is a wrapper to the LSF queueing system (uScw
24-09-03)
if you want to use the SCALI mpirun, type /opt/scali/bin/mpirun
Usage :

mpirun <params> <mpimon-params> <progname> [options...]
  -lsf          : Submit job to LSF queueing system,
                : default output file is o.<jobid>
  -lsfparams <"params"> : Specify further LSF bsub parameters (except -R,
                : -n,-x,-M,-W) for more details on LSF options: man bsub
  -np <np>      : Total number of processes, default 2
  -npn <npn>    : Number of processes pr. node, default 2
  -q            : quiet, no mpimon printout
  -s            : mpimon statistics output
  -t            : test mode, no mpi program started
  -v            : Verbose
  -x            : use resources exclusivly
  -M <mmm>      : set memory limit (in KB)
  -W <HH:MM>    : set wallclock time limit (Hours:Minutes)
  -h|-?         : this output
All unknown parameters are passed to mpimon

Die Ausgabe von mpirun wird im Arbeitsverzeicnis in die Datei o.%J  (%J steht für die Auftragsnummer des mit mpirun erzeugten LSF-Jobs) geschrieben. Ein davon abweichender Name der Ausgabdatei kann mit der Optioin –lsfparams "-o <Name>" erzeugt werden.

Ohne die Option –lsf  läuft das mit mpirun gestartete Programm interaktiv, wenn LSF die benötigten Ressourcen bereitstellen kann, andernfalls bricht das Kommando ab.

In der der einfachsten Form kann eine parallele Anwendung also z. B. mit

 mpirun – np 8 a.out

gestartet werden.