IT-Service der Fakultät für Physik
print

Sprachumschaltung

Navigationspfad


Inhaltsbereich

Rechencluster

Auf dieser Seite finden Sie die allgemeine Informationen zur Benutzung der Rechenclustersoftware SLURM.

Für standortspezifische Informationen zu den verschiedenen Rechenclustern besuchen Sie bitte die entsprechenden Unterseiten.

Grundlagen

Die Rechencluster werden von Simple Linux Utility for Resource Management (SLURM) verwaltet. Es handelt sich hierbei um einen mächtigen Scheduler, der es erlaubt viele Workstations und Clustermaschinen als Rechen-Cluster zu betreiben. Für die Benutzer bedeutet dies, dass Batch-Jobs an diesen Cluster geschickt und verwaltet werden können und sie sich nicht um einzelne Maschinen kümmern müssen.

Slurm ist eine moderne Ressourcenverwaltungssoftware für heterogene, verteilte Rechnernetze.

Im Grunde führt Slurm folgende Schritte aus, um eine sinnvolle Ressourcenverwaltung zu erreichen:

  • Nimmt Jobs von der Außenwelt an. Jobs sind Anfragen nach Rechenressourcen von Nutzern.
  • Setzt den Job auf eine Warteliste, bis er ausgeführt werden kann.
  • Gibt einen Job von der Warteliste an eine Ausführeinheit weiter.
  • Verwaltet laufende Jobs.
  • Speichert die Ausgabe des ausgeführten Jobs, wenn dieser fertig ist.

Folglich brauchen Sie sich nicht darum kümmern, welche Maschine Sie im Einzelfall nutzen, lassen sie einfach Slurm entscheiden. Slurm wird dabei die Rechenlast gleichmäßig auf alle Hosts verteilen.

ANMERKUNG: Berechnungen direkt auf einer der Ausführeinheiten durchzuführen, ohne Slurm zu nutzen, ist schlechte Manier. Slurm wird Ihren laufenden Job nicht erkennen und einen Job eines anderen Nutzers starten. Beide werden mit Sicherheit langsamer laufen. Dies kann zu Systemabstürzen und Datenverlust führen.

 

Sichere Benutzung der Rechencluster

Wichtiger Hinweis: Clusterjobs schicken normalerweise Status-Mails (Job gestartet, Job beendet, Job abgebrochen usw). Nachdem die Cluster tausende Rechenkerne zur Verfügung stellen, kann man problemlos mehrere tausend Mails produzieren!! Falls Sie eine Mail-Weiterleitung nach extern eingerichtet haben, gefährdet dies ernsthaft das Mailsystem der Fakultät. Im schlimmsten Fall (wie schon passiert) können 2000 Mailaccounts - einschließlich derer von Professoren, Dekanen und Vize-Präsidenten - deswegen keine Emails mehr verschicken.

Falls Ihre Statusmails unseren Mailservern Probleme bereiten, wird Ihr Account umgehend deaktiviert.

CLUSTERMAILS NICHT WEITERLEITEN!

Weiterleitungen sollten allgemein eigentlich nur in Ausnahmefällen und ausschließlich intern genutzt werden. Falls Sie jedoch trotzdem eine Weiterleitung nutzen, richten Sie unbedingt einen Filter ein!
Das können Sie zum Beispiel wie folgt machen:

Auf Horde einloggen: webmail.physik.uni-muenchen.de

Den Reiter 'Mail' und dann links 'Folder Actions' anklicken, um einen neuen Ordner zu erstellen, der beliebig benannt werden kann (z.B. Slurm Info).

Über Mail -> Filters -> New rule einen neuen, entsprechenden Filter erstellen:

-> Rule Name ist beliebig (z.B. Slurm Filter)
-> 'ALL of the following' auswählen
-> From matches (with placeholders) slurm@*.theorie.physik.uni-muenchen.de
-> and subject contains SLURM
-> Deliver to folder.. -> Slurm Info
-> 'Stop checking if this rule matches?' auswählen
-> Save

Bitte versichern Sie sich, dass der Slurm Filter unter 'Existing Rules' ÜBER der Weiterleitung (Forward) steht.
Wenn dies nicht der Fall ist, kann die Reihenfolge durch einfaches Drag & Drop verändert werden.

 



Slurm Kurzanleitung

Jobs schreiben

Technisch handelt es sich bei einem Job um eine einfache ausführbare Datei. Hierfür bieten sich Bash-Skripte an, da in ihnen einfach Direktiven an den Scheduler übergeben werden können, zum Beispiel:

#!/bin/bash
#
#SBATCH --job-name=MeinJob
#SBATCH --comment="Diese Beschreibung hilft meinen Job zu verstehen"
#SBATCH --begin=20:00
#SBATCH --mem=2048
#SBATCH --time=12:00:00
#SBATCH --mail-type=ALL
#SBATCH --mail-user=<ihre-email-adresse>
#SBATCH --workdir=/lokales/output/verzeichnis/slurm-intro
#SBATCH --output=/lokales/output/verzeichnis/slurm-intro/slurm.%j.%N.out
#SBATCH --ntasks=1
#SBATCH --constraint=Sandy
# ...

Am Ende folgt der Aufruf der eigentlichen Hauptprogramme:

echo "Hallo Welt!"
sleep 15

echo -n "I'm on Host "
hostname

echo -n "It's now "
date 

 Erklärung der verschiedenen SLURM-Optionen:

  • --job-name=MeinJob
    Name des Jobs in der Queue ist "MeinJob"
  • --comment="Diese Beschreibung hilft meinen Job zu verstehen"
    Kleiner Kommentar, damit die Admins wissen, was der Job genau macht
  • --begin=20:00
    Der Job soll erst um 20 Uhr starten
  • --mem=2048
    Die benötigte Speichergröße in MByte, die der Job zur Laufzeit nutzen sollte (Jobs, die dieser Einschränkung nicht folgen werden aber auch nicht gelöscht). Dieser Wert dient dem Queueing-System lediglich der Einschätzung welche und wie viele Jobs einem Knoten zugewiesen werden können, bevor seine Speicherkapizität ausgelastet ist. Da es sich hierbei nur um einen Hilfswert handelt gibt es keine Garantie dafür, dass der Job tatsächlich diesen maximalen Speicher zugewiesen bekommt, Überwachungsscripte wären dafür notwendig.
  • --time=12:00:00
    Limit für die beanspruchte CPU-Zeit sind 12 Stunden
  • --mail-type=ALL
    Jede Änderung des Job-Status löst eine E-Mail Benachrichtigung aus (start, failure, end, ...)
  • --mail-user=<ihre-email-adresse>
    E-Mail Adresse, an welche die E-Mail Benachrichtigungen gesendet werden
  • --workdir=/lokales/output/verzeichnis/slurm-intro
    Setzt das Arbeitsverzeichnis - hier wird das Script tatsächlich ausgeführt
  • --output=/lokales/output/verzeichnis/slurm-intro/slurm.%j.%N.out
    Die Datei in die die Standard-Ausgabe (die normalerweise in der Konsole ausgegeben wird) umgeleitet wird. %j ist hierbei die Job-ID, %N der Name des Knotens.
  • --ntasks=1
    Der Job benötigt einen Kern
  • --constraint=Sandy
    Der Job soll auf "Sandy" (Bridge) Maschinen laufen

Dieses Script schreibt lediglich wo und wann es ausgeführt wurde in die Standard-Ausgabe (in diesem Fall nach --output umgeleitet).

WICHTIGE BEMERKUNG:
Das Arbeitsverzeichnis (und Ausgabeverzeichnis) müssen bereits vorhanden sein bevor das Script an die Queue geschickt wird, da der Auftrag sonst unmittelbar abgebrochen wird! Das bedeutet, dass Sie VORHER alle Arbeits- und Ausgabeverzeichnisse angelegt haben sollten!
(die Fehlermeldung ist recht unspezifisch in diesem Fall; behalten Sie das also im Hinterkopf!) 

Achten Sie bitte ausserdem auf die Auswahl des optimalen Arbeitsverzeichnis je nach geschriebener Datenmenge und ausführendem Host.

Wenn in einem Slurm job das Modulsystem geladen werden soll, muss SLURM im Skript zuerst mit dem Modulsystem bekanntgemacht werden.
Dazu nutzt man das Kommando "source /etc/profile.d/modules.sh".

Jobs starten

Die Interaktion mit dem Cluster erfolgt über Benutzer-Befehle des SLURM-Moduls. Bevor also irgendetwas mit dem Cluster gemacht werden kann, muss für die Benutzer-Shell das SLURM-Modul geladen werden. Dies geschieht mit dem Befehl

module load slurm
module load slurm/16.05.2 (Theorie)

(Siehe auch: Modulsystem)

Erst jetzt stehen SLURM-Kommandos (siehe unten) und die zugehörigen man-pages zur Verfügung. Die aktuelle Shell ist nun für die Interaktion mit dem Cluster vorbereitet.

Wurden die gewünschten Optionen für den Job wie oben vorgeschlagen in ein bash-Skript geschrieben, dann reduziert sich das Senden an die Queue zum Beispiel lediglich auf den Befehl:

Max.Mustermann@cipXY:~$ sbatch myjob.sh
Submitted batch job 3

Die Ergebnisse der Berechung werden schliesslich (soweit nicht anders im Script angegeben) in das aktuelle Arbeitsverzeichnis des Jobs geschrieben. Dort wird von SLURM die Datei "slurm-%jobid.out" angelegt, wobei %jobid durch die entsprechende ID des Jobs aus squeue ersetzt wird. 

Jobs verwalten

Um den Status des Clusters zu überprüfen kann ganz einfach der Befehl sinfo ausgeführt werden:

Max.Mustermann@cipXY:~$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
cip up infinite 1 alloc cip2-1
cip up infinite 24 idle cip[51-56],cip2-[2-19]

Hier kann man sehen, dass der Beispiel-Job von oben nur die Resourcen von einem Rechner (cip2-1) beansprucht. Den genauen Status der Queue und gegebenenfalls den Status des eigenen Jobs kann man mit squeue betrachten:

Max.Mustermann@cipXY:~$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
3 cip myjob.sh Ben.Utzer R 0:17 1 cip2-1 

Die Ausgabe dieses Befehls liefert auch die Job-ID Ihres Jobs, über welche man den Job mit SLURM-Kommandos ansprechen kann. So können zum Beispiel mit Hilfe von scancel beliebige Signale an die Prozesse des Jobs gesendet werden:

scancel --signal=SIGNAL_NAME %jobid

oder die Jobs gleich abgebrochen werden:

scancel %jobid

 

Kommandoübersicht

Grundlegende SLURM-Kommandos (siehe dazu auch den SLURM Quickstart Guide):

  • sinfo
    Zeigt den Clusterstatus an
  • squeue
    Zeigt den Status der Jobs in der Queue (running, pending, ...) ab
  • sbatch
    Kommando um Batch-Jobs an die Queue zu senden
  • scancel
    Kommando um Jobs abzubrechen
  • scontrol
    Mächtiges "general purpose" Kommando um Jobs und ihre Stati anzuzeigen (und administrativ den Clusterstatus zu ändern)
    z.B. scontrol show job <jobID>.
  • sview
    Grafisches Tool um Informationen über den Cluster und die Jobs anzuzeigen.

Servicebereich

Aktuelle Meldungen