Inhalt


Übersicht

Bash Basics

Noctua2

Einführung

Zugriff auf das Cluster

Dateisysteme

Simulationen mit Abinit

Orbitale plotten

Dark Mode

Simulationen auf dem Noctua2-Cluster

Einführung

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.

Zugriff auf das Cluster

VPN

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.

SSH

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.

Dateisysteme

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

Simulationen mit Abinit

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

Konvergenztest auf Noctua2

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