An unserem Lehrstuhl wird ein aus 40 Rechenknoten bestehendes Cluster betrieben. Dieses ist sowohl für Studierende, welche am Lehrstuhl Abschluss- bzw. Projektarbeiten anfertigen, sowie für die Mitarbeiter des Lehrstuhls zugänglich. Für die faire Zuteilung von Ressourcen wird innerhalb des Clusters die Scheduling-Software OpenPBS eingesetzt.
Eigene Software kann im Home-Verzeichnis installiert und verwendet werden. Falls eigene Software nicht ausschießlich im Home-Verzeichnis installiert werden kann, so kann hierfür ein Singularity Containern betrieben werden (siehe unten).
Verfügbare Server
HOST | CPU | RAM | NVRAM | HDD | SSD | ETHERNET | INFINIBAND |
---|---|---|---|---|---|---|---|
node21 - node38 | 2x Xeon E5-2697v2 (12x 2,7 Ghz) | 128 GB | - | - | 128 GB | 1 Gbit/s | 56 Gbit/s |
node63 - node64 | Xeon E3-1220 (4x 3,1 GHz) | 32 GB | - | 1 TB | 240 GB | 1 Gbit/s | 56 Gbit/s |
node65 - node72 | Xeon E5-1650 (6x 3,5 GHz) | 64 GB | - | 1 TB | 240 GB | 1 Gbit/s | 56 Gbit/s |
node73 - node80 | Xeon E5-1650 (6x 3,5 GHz) | 64 GB | - | 1 TB | 480 GB | 1 Gbit/s | 56 Gbit/s |
node81 - node82 | Xeon Silver 4216 (16x 2,1 GHz) | 64 GB | - | 1 TB | 480 GB | 10 Gbit/s | 100 Gbit/s |
node83 - node84 | Xeon Gold 5218 (16x 2,3 GHz) | 64 GB | 128 GB | 2 TB | 480 GB | 1 Gbit/s | 100 Gbit/s |
Zugang
Der Zugang zum Cluster erfolgt per ssh
über einen Login-Knoten (sollipulli) mit der IP-Adresse 134.99.70.210
auf Port 22
.
Um einen Zugang zum Cluster zu erhalten, ist die Erzeugung eines SSH-Schlüsselpaars notwendig. Dies geht mit dem Befehl ssh-keygen
.
Eine passphrase muss nicht angegeben werden.
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/schoettner/.ssh/id_rsa. Your public key has been saved in /home/schoettner/.ssh/id_rsa.pub.
Anschließend muss der erzeugte öffentliche Teil des Schlüsselpaar id_rsa.pub
(im Beispiel oben) mit der Bitte einen Account anzulegen an unseren Administrator Dr. Michael Braitmeier per E-Mail gesendet werden. Sobald Ihr Account erstellt wurde, erhalten Sie eine Benachrichtigung und können sich am Cluster mithilfe des privaten Keys id_rsa
einloggen. Den privaten Key sollten sie geheim halten.
Das Einloggen sehen Sie im nachstehenden Beispiel. Der Benutzername ist ihr Nachname klein geschrieben und Umlaute ausgeschrieben.
ssh schoettner@134.99.70.210 -i id_rsa
Interaktive Sessions
Nach dem Login auf dem Cluster ist es möglich eine interaktive Session auf einem der Rechenknoten zu starten. Beim Starten jeder Session ist die Angabe der benötigten Ressourcen notwendig, sodass der Scheduler einen geeigneten Knoten zuweisen kann. Der folgende Aufruf startet eine interaktive Session, welche einen CPU-Kern, 4 Gigabyte Arbeitsspeicher, eine 56 Gbit/s InfiniBand Karte sowie eine Stunde Rechenzeit benötigt.
student@sollipulli:~$ qsub -I -l ncpus=1,mem=4gb,nic_type=ib56,walltime=01:00:00 qsub: waiting for job 82.openpbs.bscluster to start qsub: job 82.openpbs.bscluster ready student@node80:~$
Die folgenden Parameter können beim Starten eines OpenPBS Jobs zusätzlich angegeben werden.
PARAMETER | BESCHREIBUNG |
---|---|
nic_type=eth | Frage einen Knoten mit einer Ethernet Netzwerkkarte an |
nic_type=ib40 | Frage einen Knoten mit einer 40 Gbit/s InfiniBand Netzwerkkarte an |
nic_type=ib56 | Frage einen Knoten mit einer 56 Gbit/s InfiniBand Netzwerkkarte an |
nic_type=ib100 | Frage einen Knoten mit einer 100 Gbit/s InfiniBand Netzwerkkarte an |
cpu_family=e3 | Frage einen Knoten mit einem Intel Xeon Prozessor der E3 Familie an |
cpu_family=e5 | Frage einen Knoten mit einem Intel Xeon Prozessor der E5 Familie an |
cpu_family=silver | Frage einen Knoten mit einem Intel Xeon Silver Prozessor an |
memory_type=nvram | Frage einen Knoten mit einem NVRAM Speicher an |
Achtung
Sollten die angegebenen Ressourcen durch die innerhalb der Session ausgeführten Programme überschritten werden, so wird die Session automatisch beendet. Aus diesem Grund ist es wichtig die Ressourcen im Vorfeld geeignet zu wählen.
Verteilte Jobs
Das OpenPBS System unterstützt die Möglichkeit Jobs auf mehreren Hosts parallel auszuführen, um bspw. ein verteiltes System aufzusetzen. Ein beispielhaftes Jobskript, welches zwei Hosts zur Ausführung nutzt und hierbei den Ausführungsort unterscheidet, könnte folgendermaßen aussehen.
#!/bin/bash #PBS -l select=1:ncpus=4:mem=8gb+1:ncpus=1:mem=4gb #PBS -l place=scatter pbsdsh bash my_script.sh
Die Angabe von place=scatter
bewirkt, dass die innerhalb der ersten Zeile angegebenen Ressourcen auf verschiedene Hosts verteilt werden. Nachdem die Ressourcen des Jobs verfürbar sind, wird das Jobskript auf dem ersten Knoten gestartet, von wo aus ein weiteres Skript mittels des pbsdsh
Befehls auf allen beteiligten Knoten (inklusive des ersten) ausgeführt wird. Dieser Befehl ist blockierend und kehrt erst zurück, wenn alle Knoten den angegebenen Befehl bearbeitet haben.
# Erster Knoten if [ "${PBS_NODENUM}" == "0" ]; then echo "Erster Knoten" fi # Zweiter Knoten if [ "${PBS_NODENUM}" == "1" ]; then echo "Zweiter Knoten" fi
Im auszuführenden Skript kann mittels der Umgebungsvariable PBS_NODENUM
der Host, auf welchem das Skript aktuell ausgeführt wird, unterschieden werden.
Singularity Container
VERSION • 3.7.0
Sofern Software benötigt wird die nicht auf dem Cluster installiert ist und sich nicht im Home-Verzeichnis installieren lässt, weil beispielsweise Root-Rechte benötigt werden, so kann ein Singularity-Container verwendet werden. Hierzu ist es vorerst notwendig einen Container zu bauen. Eine Anleitung findet sich innerhalb der offiziellen Dokumentation. Da das Bauen von Containern ausschließlich mit root
-Rechten möglich ist, muss dies außerhalb des Clusters geschehen.
Alternativ ist es möglich den Container mittels eines Remote Builders in der Sylabs Cloud zu bauen. Hierfür wird ein entsprechender Account benötigt.
Nachdem der Container gebaut und auf das Cluster übertragen wurde, kann er mit den folgenden Befehlen gestartet werden.
student@node80:~/containers$ singularity shell my_custom_container.sif Singularity>
Der standarmäßig gesetzte Prompt Singularity>
kann durch setzen der SINGULARITYENV_PS1
Umgebungsvariable angepasst werden. Das folgende Beispiel ergänzt zu Anfang den Namen des Containers. Die Umgebungsvariable kann auch in ~/.bashrc
gesetzt werden.
student@node80:~/containers$ export SINGULARITYENV_PS1='(${SINGULARITY_NAME/.sif/}) \[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' student@node80:~/containers$ singularity shell my_custom_container.sif (my_custom_container) student@node80:~/containers$
Home-Directory / NFS
Die Daten in Ihrem Homeverzeichnis werden über das Network File System (NFS) bereitgestellt. Die Daten werden nicht durch ein Backup gesichert. Zudem ist zu beachten, dass unsere NFS-Dateisystemversion keine Sperren auf Dateien anbietet. Letzteres kann dazu führen, dass manche Software nicht ausführbar / installierbar ist, obwohl dies zu Hause auf dem Laptop geklappt hat. Das Problems mit Locks ist selten, aber falls es auftritt nicht sofort erkennbar, daher dieser Hinweis.
NVRAM
Unter Linux wird NVRAM über das Dateisystem bereitgestellt und die Anwendungen können dann Dateien mit mmap
in den Adressraum einblenden. Auf den Knoten die NVRAM haben wird der Zugriff im Dateisystem durch das Verzeichnis /mypmemfs
bereitgestellt. Hier kann jeder Benutzer Dateien erzeugen und seine Dateien lesen, schreiben und loeschen (die Berechtigungen entsprechend denen im /tmp
Verzeichnis).
Der Persistent Memory Development Kit (PMDK) mit gcc etc. wird durch folgenden Singularity Container bereitgestellt: /software/container/pmem.sif
. Um diesen zu nutzen kann eine Shell im Container gestartet werden. Hierbei ist es wichtig, dass /mypmemfs
mit dem Bind-Parameter gemountet wird.
student@node83:~$ singularity shell --bind /mypmemfs pmem.sif
Wenn Sie diesen Container erweitern möchten können Sie sich die Datei /software/container/definitions/pmem.def
herunterladen und zu Hause einen eigenen erweiterten Container zusammenbauen. Dies geht nicht direkt auf dem Cluster.