Die Größe der meisten Simulationen von Festkörpern und Molekülen macht die Nutzung von Clustern nötig. Eine Arbeitsgruppe alleine kann die nötige Hardware nicht effizient benutzen. Deshalb gibt es an einigen Standorten große Rechencluster, die auch Rechnungen mit mehreren tausend Rechenkernen auf vielen Terabyte Arbeitsspeicher effizient möglich machen. Die Nutzung von vielen tausend Forschenden gleichzeitig sorgt hierbei für die nötige Effizienz. Gleichzeitig ist eine derart kritische Infrastruktur der Forschung auch ein beliebtes Ziel für Cyberangriffe und daher gut gesichert. Mit diesen Sicherheitsmaßnahmen zu arbeiten macht einige Arbeitsweisen nötig, die im Alltag meist unbekannt sind. Dieses Kapitel soll daher ergänzend zur Dokumentation der Universität Paderborn eine kurze Einführung und spezifische Anwendungsbeispiele geben.
Der Zugang ins Campusnetz der Universität Paderborn ist generell nur mit einer VPN Verbindung möglich.
Hierbei wurde auf die offene Lösung openvpn
gesetzt und der Ablauf kann auf der entsprechenden Wikiseite nachgelesen werden.
Nachdem eine VPN Verbindung hergestellt ist, erfolgt der Zugriff mittels ssh
.
Dabei wird eine interaktive Shell - wie die Kommandozeile auf dem eigenen PC - über das Internet aufgebaut.
Bei der Nutzung gibt es keinerlei Unterschiede zur herkömmlichen bash-Shell.
Auch hierzu gibt es eine Wikiseite.
Der Verbindungsaufbau erfolgt über folgenden Befehl.
ssh -t [BENUTZER]@fe.noctua2.pc2.uni-paderborn.de ssh noctua2
In das Feld [BENUTZER]
wird dabei der Benutzername des Paderborner Rechenzentrums eingetragen, der bei der Registrierung vergeben wurde.
Funktioniert die Verbindung wird nach dem Passwort gefragt.
Auf meinem Computer sieht das folgendermaßen aus.
ssh -t eprop2d4@fe.noctua2.pc2.uni-paderborn.de ssh noctua2
eprop2d4@fe.noctua2.pc2.uni-paderborn.de's password:
Sobald man nun das Passwort eingegeben hat, wird man mit einer Login-Node am Cluster verbunden.
==============================================================================
== Welcome to Noctua 2 HPC System at the ==
== Paderborn Center for Parallel Computing ==
==============================================================================
== Please read https://pc2.de/go/getting-started for a general overview of ==
== the system and the installed software. ==
== ==
== You can contact us via E-Mail at pc2-support@uni-paderborn.de. ==
== Please provide at least your project name and the name of this System ==
== (Noctua 2). ==
== We provide a FAQ list and known issues at https://pc2.de/go/faq to ==
== answer the most frequently asked questions. ==
==============================================================================
Last login: Mon Dec 18 10:41:22 2023 from 131.234.170.41
paderborn: ../~ $
Wir sind nun verbunden und können anfangen zu arbeiten.
Für verschiedene Verwendungszwecke stehen auf dem Cluster verschiedene Dateisysteme zur Verfügung. Eine genaue Übersicht gibt es wieder im Wiki.
Für uns besonders wichtig sind die Folgenden.
Das home-Verzeichnis ist ein kleiner privater Speicher für Nutzer. Die beiden anderen Verzeichnisse sind für die Arbeitsgruppe sichtbar und die Ressourcen geteilt. Dabei ist PC2DATA als Langzeitspeicher für wichtige Daten gedacht und PC2PFS als Dateisystem für die Rechnungen selbst.
In den Umgebungsvariablen \(PC2DATA und \)PC2PFS sind die Pfade gespeichert.
Ins Verzeichnis unseres Lehrstuhl navigiert man mit cd $PC2Data/hpc-prf-eprop2d
und cd $PC2PFS/hpc-prf-eprop2d
.
Dort sollten dann für die eigene Arbeit persönliche Verzeichnisse angelegt werden.
paderborn: ../hpc-prf-eprop2d $ ls
eprop2d1_Jan eprop2d4_Mia eprop2d7_Shridhar software
eprop2d2_Max eprop2d5_Richard eprop2d9_Stepan
Die Arbeit mit großen Rechenclustern gestaltet sich, im Vergleich zu Arbeitsplatzrechnern und Workstations, etwas komplizierter. Programme werden nicht mehr einfach auf der Kommandozeile ausgeführt. Stattdessen müssen alle Nutzer Ressourcen für eine Rechnung anfragen und warten, bis genügend Rechenkapazität frei wird. Für das Management wird meist ein Workloadmanager genutzt. In unserem Falle ist das Slurm.
Legen wir als Beispiel eine kleine Rechnung an.
Dazu navigieren wir zuerst in unser Arbeitsverzeichnis in $PC2PFS
und erstellen uns ein Projektverzeichnis.
paderborn: ../hpc-prf-eprop2d $ cd $PC2PFS/hpc-prf-eprop2d/eprop2d4_Mia
paderborn: ../eprop2d4_Mia $ mkdir Test_H2
paderborn: ../eprop2d4_Mia $ cd Test_H2/
Nun müssen wir ein Skript mit den Befehlen unserer Rechnung schreiben.
Wir wollen abinit mit einer Eingabedatei test_h2.abi
ausführen.
paderborn: ../Test_H2 $ cat run_noctua.sh
#!/bin/bash
srun abinit test_h2.abi >& log
Die meisten bekannten Codes zur Festkörper- und Molekülsimulation sind bereits vorinstalliert.
Allerdings sind nicht alle Programme gleichzeitig geladen.
Stattdessen ist die Programmbibliothek in Module organisiert, wobei man bei seinen Jobs die jeweils nötigen Programme lädt.
Auf der Wikiseite zum Softwarekatalog suchen wir nach Abinit und finden die zugehörige Informationsseite.
Wir müssen also das Modul chem/ABINIT/9.6.2-foss-2022a
laden, um abinit nutzen zu können.
Damit erweitert sich unser Skript zu
#!/bin/bash
module reset
module load chem/ABINIT/9.6.2-foss-2022a
srun abinit test_h2.abi >& log
Der Befehl module reset
verwirft alle vorher geladenen Module und verhindert so Konflikte.
Zum starten möchte der Workloadmanager einige Informationen zur Rechnung.
Wie viel Zeit soll reserviert werden? Wie viele Nodes (einzelne Computer im Cluster) sollen genutzt werden? Wie viele Kerne sollen pro Node reserviert werden?
#!/bin/bash
#SBATCH -t 2:00 <-- es werden 2 Minuten reserviert
#SBATCH --ntasks-per-node=8 <-- maximal 8 Prozesse
#SBATCH -N 1 <-- wir nutzen eine Node
#SBATCH -J "Abinit_Test" <-- Name des Jobs
# Wichtige Einstellungen zur Parallelisierung
export OMP_NUM_THREADS=8
export OMP_PLACES=cores
export OMP_PROC_BIND=true
module reset
module load chem/ABINIT/9.6.2-foss-2022a
srun abinit test_h2.abi >& log
So können wir mit dem Befehl sbatch run_noctua.sh
unseren ersten Job starten und mit squeue
den Status des Jobs beobachten.
paderborn: ../Test_Project $ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
6030796 normal Abinit_T eprop2d4 R 0:02 1 n2cn0275
Unser Jobskript ist weiterhin ein normales bash-Skript mit einigen Befehlen für unseren Workloadmanager.
Wir können die Funktionalität also auch wie gewohnt mit bash-Befehlen erweitern.
Als nützliches Beispiel schauen wir uns einen Konvergenztest für den acell
Parameter an.
#!/bin/bash
#SBATCH -t 2:00 <-- es werden 2 Minuten reserviert
#SBATCH --ntasks-per-node=8 <-- maximal 8 Prozesse
#SBATCH -N 1 <-- wir nutzen eine Node
#SBATCH -J "Abinit_Test" <-- Name des Jobs
# Wichtige Einstellungen zur Parallelisierung
export OMP_NUM_THREADS=8
export OMP_PLACES=cores
export OMP_PROC_BIND=true
module reset
module load chem/ABINIT/9.6.2-foss-2022a
# Convergence testing
echo "#ACELL HOMO" > homo_conv_acell.dat
for i in $(seq 10 2 40); do
sed -i "s/^acell 3\*[0-9]*/acell 3\*$i/" test.abi
srun abinit test.abi >& log
HOMO=$(grep HOMO test.abo | awk '{print $7}')
echo $i $HOMO >> homo_conv_acell.dat
done