Installation des Slurm Workload Managers + GUI

Slurm ist ein kostenloser Open-Source-Job-Scheduler dessen Aufgabe als Controller es ist, alle möglichen Arten von Rechenaufgaben an sogenannte Nodes (welche zuvor an den Controller angemeldet wurden) zu delegieren, zu priorisieren und dabei die vorhandenen Hardware-Ressourcen im Auge zu behalten.
In diesem Beitrag möchte ich euch zeigen, wie ihr den Slurm-Dienst samt grafischer Oberfläche sview aufsetzt und eine Worker-Node daran anschließt.

Vorwort

Eigentlich wird Slurm im Zuge einer „High-Performance-Computing“-Umgebung eingesetzt. Da mir allerdings das Kleingeld für die entsprechende Hardware fehlt, werde ich die folgenden Installations- und Konfigurationsschritte lediglich anhand zweier virtueller Maschinen zeigen. Diese beiden virtuelle Maschinen tragen die folgenden Namen:
slurmctl – Slurm Controller
slurmnode – Slurm Node

Feste IP-Adressen sind auf beiden Maschinen nicht unbedingt notwendig, aber auch nicht verkehrt. Ebenso wenig sind FQDNs ein muss. In jedem Fall müssen sich die Maschinen jedoch gegenseitig im Netzwerk finden und ihre Namen über DNS auflösen können.
Die Authentifizierung wird über Munge erfolgen.
Die Betriebssystem-Grundlage der Maschinen wird jeweils ein Ubuntu Server 24.04 sein.
Falls weitere Besonderheiten während der Installation/Konfiguration anfallen, werde ich nochmal explizit darauf eingehen.

Installation des Slurm-Controllers

Wie eingangs erwähnt, wird die Slurm-Controller Maschine nachfolgenden Beispiel slurmctl heissen.
Wir beginnen mit der Installation der Slurm-Controller-Applikation samt Munge-Authentifizierungsdienst auf dem primären Controller (slurmctl). Slurm kann entweder direkt über die APT-Paketverwaltung installiert oder von der Hersteller-Seite (https://slurm.schedmd.com/quickstart_admin.html) bezogen werden. Die Nutzung der Variante der Hersteller-Seite wird zwar empfohlen, im folgenden nutze ich dennoch die der APT-Paketverwaltung:

sudo apt install slurm-wlm munge libmunge-dev

Als nächstes erstellen wir das Herzstück der Slurm-Konfiguration, nämlich die slurm.conf. Diese liegt standardmäßig unter /etc/slurm/slurm.conf (die folgende Konfiguration ist lediglich ein minimales Beispiel welches unser Setup umfasst). Wir wechseln also in die Datei …

sudo nano /etc/slurm/slurm.conf

… und füllen diese mit folgenden Inhalt:

ClusterName=slurm_cluster
ControlMachine=slurmctl
SlurmdPort=6818
SlurmctldPort=6817
AuthType=auth/munge
CryptoType=crypto/munge
MpiDefault=none
ProctrackType=proctrack/pgid
ReturnToService=1
SlurmdTimeout=300
SlurmdLogFile=/var/log/slurmd.log
StateSaveLocation=/var/spool/slurmctld
SlurmdSpoolDir=/var/spool/slurmd
SwitchType=switch/none
TaskPlugin=task/affinity
#NodeName=slurmnode State=UNKNOWN
#PartitionName=debug Nodes=slurmnode Default=YES MaxTime=INFINITE State=UP

Hinweis:
Grundsätzlich ist es innerhalb dieser slurm.conf-Datei auch möglich mit IP-Adressen der jeweiligen Maschinen zu arbeiten. Diese sollten dann aber natürlich auch über statische IP-Adressen verfügen.

Innerhalb dieser slurm.conf sind die unteren beiden Zeilen auskommentiert. Das ist beabsichtigt und wichtig, damit der primäre Slurm-Controller gleich überhaupt erstmal problemlos starten kann (da ja die Node noch fehlt). Doch bevor der Dienst gestartet wird, erstellen wir noch einen Ordner und belegen diesen mit den entsprechenden Berechtigungen:

sudo mkdir -p /var/spool/slurmctld
sudo chown slurm:slurm /var/spool/slurmctld

Falls noch kein Munge-Schlüssel unter /etc/munge/munge.key vorhanden ist, generieren wir außerdem noch einen:

sudo create-munge-key

Damit sollte unter /etc/munge/ eine munge.key-Datei erstellt worden sein. Diese passen wir nun noch mit den richtigen Berechtigungen an:

sudo chown munge:munge /etc/munge/munge.key
sudo chmod 400 /etc/munge/munge.key

Dann starten wir den Slurm-Dienst (achtet dabei auf die vorgegebene Reihenfolge, also erst den Munge-Dienst starten, dann Slurm): …

### Start und Hinzufügung zum Autostart der Munge Authentifizierung
sudo systemctl start munge
sudo systemctl enable munge

### Start und Hinzufügung zum Autostart des Slurm-Dienstes
sudo systemctl start slurmctld.service

Hinweis:
Falls es während des Starts von slurmctl zu Problemen kommen sollte, lässt sich der Dienst auch interaktiv im Debugging-Modus samt Bildschirmausgabe starten:

sudo slurmctld -Dvvvv

… und kommentieren im Anschluss die unteren beiden Zeilen der slurm.conf wieder ein, sodass diese hinterher so aussieht:

ClusterName=slurm_cluster
ControlMachine=slurmctl1
BackupController=slurmctl2
SlurmdPort=6818
SlurmctldPort=6817
AuthType=auth/munge
CryptoType=crypto/munge
MpiDefault=none
ProctrackType=proctrack/pgid
ReturnToService=1
SlurmdTimeout=300
SlurmdLogFile=/var/log/slurmd.log
StateSaveLocation=/var/spool/slurmctld
SlurmdSpoolDir=/var/spool/slurmd
SwitchType=switch/none
TaskPlugin=task/affinity
NodeName=slurmnode State=UNKNOWN
PartitionName=debug Nodes=slurmnode Default=YES MaxTime=INFINITE State=UP

Installation der Slurm-Node

Auf der Slurm-Node installieren wir eine leicht abweichende Variation der Pakete:

sudo apt install slurmd munge libmunge-dev libpmix-dev

Da (wie weiter oben bereits erwähnt) jede Slurm-Maschine dieselbe slurm.conf und denselben Munge-Authentifizierungsschlüssel benötigt, kopieren wir nun die beiden benötigten Dateien vom Controller zur Node:

### Kopieren des Munge-Schlüssels vom Controller zur Node
scp /etc/munge/munge.key slurmnode:/etc/munge/munge.key

### Kopieren der slurm.conf vom Controller zur Node
scp /etc/slurm/slurm.conf slurmnode:/etc/slurm/slurm.conf

Jetzt starten wir auch hier auf der Node den Slurm-und den Munge-Dienst:

systemctl start slurmd
systemctl enable slurmd

systemctl start munge
systemctl enable munge

Da die Node nun vorbereitet ist, wechseln wir nochmal zum Controller und starten dort den Slurm-Dienst einmal neu:

sudo systemctl restart slurmctld.service

Hat alles funktioniert, sollte die Node nun über folgenden Befehl auffindbar sein (vom Controller aus ausführen):

scontrol show node

Ausführung der Jobs

Damit hätten wir alle Vorbereitungen getroffen, um unseren ersten Job auszuführen.
Um dies zu tun und dabei explizit unsere eben hinzugefügte Node zu adressieren, setzen wir den folgenden Befehl ein:

sbatch --nodelist=slurmnode ./test.sh

Wählt anstelle dieser ./test.sh das entsprechende Shell-Skript aus, welches ausgeführt werden soll. Die Ausführung sollte dann in etwa so bestätigt werden …

Sofern uns mehrere Nodes zur Verfügung stehen, können wir den Job auch an gleich mehrere Nodes adressieren:

sbatch --nodelist=slurmnode1,slurmnode2,slurmnode3 ./test.sh

Neben nodelist gibt es noch einige weitere Parameter bei der Ausführung der Jobs. Diese lassen sich auch in einer vorgefertigten Slurm-Skript Datei zusammenfassen. Ein solches Skript könnte so aussehen:

#!/bin/bash

SBATCH --job-name=slurmjob            ### Name des Slurm-Jobs, der hinterher in den Job-Listen auftaucht
SBATCH --output=slurmjob.out          ### Die Standardausgabe (stdout) des Jobs wird in die Datei slurmjob.out geschrieben
SBATCH --error=slurmjob.err             ### Die Standardfehlerausgabe (stderr) des Jobs wird in die Datei slurmjob.err geschrieben
SBATCH --nodelist=slurmnode           ### Wie bereits erwähnt, werden hier die Nodes zur Job-Abarbeitung angegeben
SBATCH --ntasks=1                               ### Anzahl der Tasks bzw. Prozesse, die für die Jobs erforderlich sind
SBATCH --constraint=mylabel            ### Auswahl der Nodes anhand des angegebenen Labels
SBATCH --exclude=slurmnode3         ### Ausschluss der angegebenen Nodes

./test.sh                                                  ### Angabe des Jobs der abgearbeitet werden soll

Wir können die laufenden Jobs auch überprüfen:

squeue

Installation der grafischen Oberfläche sview

Vorneweg sei gesagt: Die grafische Oberfläche sview für Slurm kommt mit einem großen Nachteil daher. Sie benötigt einen installierten X-Server. Um sview also verwenden zu können, installieren wir uns eine beliebige Oberfläche, wie z.B. Gnome, auf dem Controller:

sudo apt install ubuntu-desktop

Außerdem installieren wir dann natürlich noch sview:

sudo apt install sview

Im Anschluss ist ein Neustart des Systems angeraten:

sudo reboot

Nachdem das System wieder gestartet und der Login (über die grafische Oberfläche!) erfolgt ist, können wir über ein Terminal …

sview

sview aufrufen.

Von dort lassen sich die Dinge in Slurm nun auch grafisch verwalten, unter anderem lassen sich die Job-Listen einsehen …

… Node Werte anpassen …

… Nodes hinzufügen …

… Jobs steuern …

… und noch vieles mehr!

Fazit

Die Installation und Einrichtung des Slurm Workload Manager samt Node ist dank der Einbindung in den Standard Ubuntu Repositories schnell erledigt. Dafür sind hier und da noch einige Anpassungen und die Installation einiger zusätzlicher Pakete vonnöten. Die Verwendung der Version der Hersteller-Seite wird empfohlen.
Wer es etwas grafischer mag, installiert sich dazu noch sview, eine grafische Oberfläche vorausgesetzt (oder zumindest einen installierten X-Server auf dem jeweiligen Controller).

Bildquellen:
Bild von Mohamed Hassan auf Pixabay

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen