Dokumentation des ZIVclusters


Performance des Clusters

HPL: High-Performance Linpack Benchmark für Distributed-Memory Computer. Dieser Benchmark wird auch für die Erstellung der Top500-Liste verwendet.


 xSeries335 2.4 GHz
32bit Umgebung

Intel SR1400 3.6 GHz
64bit Umgebung

Knoten
Rmax (GFlops)
Rpeak (GFlops)
Rpeak/Rmax x 100
Rmax (GFlops)
Rpeak (GFlops)Rpeak/Rmax x 100
4
19.2
14.03
73.1
28.8
24.94
86.6
8
38.4
28.69
74.7
57.6
49.90
86.6
16
76.8
55.71
72.5
115.2
97.35
84.5
24
115.2
82.40
71.5
-
-
-
32
153.2
108.30
70.5
-
-
-
36
172.8
120.30
69.6
-
-
-
40
192.0
135.60
70.6
-
-
-
49
235.2
162.30
69.0
-
-
-
64
307.2
208.60
67.9
-
-
-
90
432.0
289.70
67.1
-
-
-


Plattenplatz

Für alle Benutzer stehen insgesamt etwa 3.2 TB Plattenplatz im GPFS (General Parallel File System) zur Verfügung. Sämtlicher Plattenplatz ist als temporär anzusehen: Benutzerdaten, die nicht mehr benötigt werden, sollten vom Benutzer selbst gesichert und anschließend gelöscht werden. Eine langfristige Archivierung von Daten seitens des ZIV findet nicht statt. Daten von abgelaufenen Benutzerkennungen, die vom Benutzer "vergessen" wurden, werden bei Bedarf gelöscht. Daten von Benutzern, die seit mehr als einem Jahr inaktiv waren, können nach Vorwarnung des Benutzers gelöscht werden, wenn der Benutzer der Aufforderung zum Aufräumen nicht nachkommt.


TORQUE/Maui Batch System

Für die Verteilung von Rechenjobs auf dem Cluster sorgen das Batch System TORQUE sowie der Scheduler Maui. Ein manuelles Starten von Programmläufen auf den Rechenknoten am Batch Sytem vorbei ist ebenso wenig  gestattet wie längere Rechnungen auf den Headnodes. Solche "streunenden" Prozesse werden ohne Vorwarnung vom Administrator beendet.

Batch-Jobs

Grundsätzlich sollten Batch-Jobs nur vom Headnode (head0102) aus abgeschickt werden. Batch-Jobs, die von Rechenknoten aus abgeschickt werden (zum Beispiel rekursiv innerhalb eines anderen Jobs) werden automatisch in eine Warteschleife von einigen Stunden geschickt, innerhalb der sie vom Scheduler nicht für die Ausführung berücksichtigt werden.

Für ein reibungsloses Funktionieren des Batch-Systems ist es erforderlich, dass die Kommunikation zwischen allen Knoten mittels ssh ohne Passwortabfrage erfolgen kann. Dazu sollte man als Benutzer einmal ssh-keygen -t dsa aufrufen mit den Defaults (id_dsa und id_dsa.pub, keine Eingabe bei der Passphrase), und anschliessend den Inhalt der Datei $HOME/.ssh/id_dsa.pub in die Datei $HOME/.ssh/authorized_keys kopieren.

Zurzeit sind sechs Queues konfiguriert. Die jeweils aktuelle Konfiguration des Batch-Servers und der Queue kann man mit dem Befehl qmgr -c "print server" abfragen.

  1. bigq (32bit)
    • resources_available.ncpus = 92
    • resources_max.nodect = 80
    • resources_min.nodect = 2
    • cput = 160:00:00, walltime = 160:00:00
    • priority = 50
  2. smallq (32bit)
    • resources_available.ncpus = 92
    • resources_max.nodect = 80
    • resources_min.nodect = 2
    • cput = 48:00:00, walltime = 48:00:00
    • priority = 100
  3. testq (default, 64bit, tagsüber von 8-22 Uhr)
    • resources_available.ncpus = 16
    • resources_max.nodect = 16
    • cput = 0:30:00, walltime = 0:30:00
    • priority = 149
  4. nightq (64bit, nachts von 22-8 Uhr)
    • resources_available.ncpus = 16
    • resources_max.nodect = 16
    • cput = 2:00:00, walltime = 2:00:00
    • priority = 149
  5. serialq (für Single-CPU-Jobs, 64bit)
    • resources_available.ncpus = 8
    • resources_max.nodect = 1
    • cput = 48:00:00, walltime = 48:00:00
    • priority = 40
    • resources_default.neednodes = nomyri
  6. expressq (32bit)
    • resources_available.ncpus = 1
    • resources_max.nodect = 1
    • cput = 1:00:00, walltime = 1:00:00
    • priority = 200

Die expressq dient zum Debuggen von Programmen, Komprimieren von Dateien, für Compilerläufe und ähnlich CPU-intensive Tätigkeiten, die ansonsten den Headnode zu stark belasten könnten. Die Queues bigq und smallq sind ausschließlich für parallele Jobs nutzbar.  Wichtig ist bei diesen beiden parallelen Queues, dass man die Eigenschaft "myri" oder "nomyri" explizit angeben kann, je nachdem, ob man Myrinet (MPICH-gm) benötigt oder mit Ethernet (MPICH-p4) auskommt. Die Queue serialq ist für serielle Programme vorgesehen und hat daher kein Myrinet. Zusammengefasst: die Angabe der Eigenschaft "myri" oder "nomyri" ist bei den Queues smallq und bigq  ratsam (aber nicht zwingend vorgeschrieben), bei allen anderen Queues darf die Eigenschaft dagegen nicht angegeben werden!

 

Serielle Rechenjobs

Ein Beispiel für ein PBS-Skript (beispiel.pbs), hier ein Single-Prozessor-Job:

#PBS -o head0102:/gpfs/u/username/output.dat
#PBS -l walltime=10:00:00,nodes=1,nice=19
#PBS -A username
#PBS -M username@uni-muenster.de
#PBS -m ae
#PBS -q serialq@head0101.cluster.uni-ms
#PBS -N Jobname
#PBS -j oe
/gpfs/u/username/a.out

Die Zeilen bedeuten:

  1. Name der Standard-Ausgabedatei
  2. erwartete Rechenzeit (10 Stunden), Anzahl der Knoten (hier: 1 Knoten mit 2.5GB Hauptspeicher),  Nice-Level
  3. Benutzerkennung
  4. E-Mail Adresse des Benutzers
  5. E-Mail Benachrichtigung bei Job abort und end
  6. Name der Queue
  7. Name des Jobs
  8. Zusammenführen von Standard-Output und Standard-Error in eine einzige Datei
  9. Aufruf des kompilierten Programmes, Shellskripts etc.

Mit man pbs_resources kann man nachsehen, welche Ressourcenangaben in Zeile 2 möglich sind. Unter anderem kann man z.B. mit der Option -l nodes=node0442 explizit einen bestimmten Knoten anfordern.

Das Beispielskript kann man abschicken mit:

[username@head0102 username]$ qsub beispiel.pbs
332.head0101.cluster.uni-ms

Der Status des PBS-Jobs lässt sich abfragen mit:


[username@head0102 username]$ qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
332.head0101 Jobname username 00:36:32 R smallq

Eine interaktive Shell kann man starten mit qsub -I. Möchte man von dort aus X11-Programme starten, muss man die Option -X angeben.

Grundsätzlich sollte man bei Fragen zu PBS zuerst die man page von PBS (man pbs) lesen.

Parallele Rechenjobs

Zum Kompilieren von MPI-Programmen sollten nach Möglichkeit mpif77, mpif90, mpicc und mpiCC verwendet werden (siehe man pages).

MPI-Programme werden innerhalb des Batch-Skripts mit dem Shell-Skript mpirun gestartet. Die Anzahl der Rechenknoten wird z.B. mit mpirun -np angegeben, allerdings sollte man mpirun mitteilen, auf welchen Knoten der Job gerechnet werden soll. Dabei ist die interne PBS-Umgebungsvariable $PBS_NODEFILE hilfreich. Ein entsprechender Batch-Job könnte beispielsweise so aussehen:

#PBS -o head0102:/gpfs/u/username/parallel/output.dat
#PBS -l walltime=10:00:00,nodes=8:myri,nice=19
#PBS -A username
#PBS -M username@uni-muenster.de
#PBS -m ae
#PBS -q smallq@head0101.cluster.uni-ms
#PBS -N Jobname
#PBS -j oe

cd parallel
cp $PBS_NODEFILE job_nodefile
mpirun -np 8 -machinefile $PBS_NODEFILE a.out

Man beachte die Angabe der Ressource walltime anstelle von cput. Die Angabe eines Limits der CPU-Zeit bei MPI-Jobs macht nämlich keinen Sinn, da hierbei nur die verbrauchte CPU-Zeit des Skripts mpirun gemessen würde. Außerdem wurde in der Anforderung der Rechenknoten

Da es unterschiedliche Rechnerarchitekturen in unserem Cluster gibt, liegen die MPI-Bibliotheken in zwei Versionen vor:

  • 32bit: unter /gpfs/a/mpich_intel_gm32
  • 64bit: unter /gpfs/a/mpich_intel_gm64

Diese sind jeweils mit dem Intel Compiler (Version 8.1) kompiliert worden. Entsprechend findet man auf 64bit-Knoten (alle Knoten der Queue "testq") auch zwei Versionen der GM-Bibliotheken und zwei Versionen der Intel-Compiler:

  • 32bit: GM unter /usr/local/gm/lib, Compiler unter /opt/intel/fc und /opt/intel/cc
  • 64bit: GM unter /usr/local/gm/lib64, Compiler unter /opt/intel/fce und /opt/intel/cce

Bei Verwendung der 64bit-Umgebung muss man seine persönlichen Pfad-Einstellungen in .bashrc ändern, also etwa so:

if [ "$HOSTTYPE" == "x86_64" ]; then
   export PATH=/gpfs/a/mpich_intel_gm64/bin:$PATH
   export LD_LIBRARY_PATH=/usr/local/gm/lib64:/gpfs/a/mpich_intel_gm64/lib:$LD_LIBRARY_PATH
   source /etc/profile.d/ifortevars.sh
   source /etc/profile.d/iccevars.sh
fi


Ansonsten steht natürlich jedem Benutzer frei, auch auf 64bit-Knoten mit der 32bit-Umgebung zu arbeiten.

Für den Fall, dass gerade kein Myrinet zur Verfügung steht, gibt es auch eine Ethernet-Version von MPICH (MPICH-p4). Diese ist unter dem Verzeichnisbaum /gpfs/a/mpich_intel_p4_32 installiert und ist für 32bit-Programme geeignet. Möchte man diese Version nutzen, muss man sowohl beim Aufruf der Compiler-Frontends als auch von mpirun jeweils den vollständigen Pfad angeben. Alternativ kann man natürlich auch die Umgebungsvariablen PATH und LD_LIBRARY_PATH in der eigenen $HOME/.bashrc anpassen. Eine Besonderheit bei der Verwendung von MPICH-p4 liegt in einer Kollision der Shared Library libguide.so von MKL und der Intel Compiler, die beim Kompilieren mit den MPICH-p4 Compiler-Frontends zutage tritt. MPICH-p4-Programme lassen sich zunächst problemlos mit der MKL verlinken, verweigern dann allerdings mit "Symbol lookup error" den Dienst. Als Workaround sollte man hier statt -lguide die statische Version der MKL-Bibliothek verwenden, also  /opt/intel/mkl/8.0.2/lib/32/libguide.a.


Benutzerhandbücher


Linksammlung


Stand: 02.02.2009