SLURM Batch-System

Vorgehensweise zur Nutzung des HPC-Clusters

Auf dem HPC-Cluster des Rechenzentrums wird zur Annahme und Bearbeitung von Rechenjobs das freie Batchsystem SLURM eingesetzt.

Dazu muss jeder Nutzer seinen Rechenjob in einem bash-Skript mit speziellen SLURM-Direktiven formulieren. Mit den unten näher beschriebenen Direktiven fordert der Nutzer insbesondere Hardware-Ressourcen (Anzahl der Rechenkerne, Laufzeit, Speicher) an. Diese Informationen werden vom Batchsystem genutzt um den Job zu starten, sobald die benötigten Ressourcen im Cluster frei geworden sind.

Die Arbeitsschritte zur Durchführung einer Simulationsrechnung auf dem HPC-Cluster sind dabei typischerweise wie folgt:

  • Erstellen des Rechenmodells (z.B. Matlab-Skript oder Ansys-Case) und ggf. grafisches Preprocessing auf dem eigenen Arbeitsplatzrechner.
  • Vertrautmachen mit den Kommandozeilenzeilen-Optionen des Programmes z.B. durch einen kurzen Testlauf auf einem Linux-Rechner.
  • Kopieren der Eingabedaten mit scp ins eigene Linux-Homeverzeichnis der RZ-Rechner oder auf den Fileserver des HPC-Clusters /work (je nach Größe der Daten).
  • Login z.B. auf dem Login-Knoten bombus.rz.tu-harburg.de mit ssh und Erstellen eines Batchskriptes.
  • Abschicken des Batchskriptes mit dem Befehl sbatch <skriptname> . Hilfreich können auch die Befehle squeue, scancel und sview sein, siehe unten.
  • Warten bis der Job durchgerechnet ist.
  • Zurückkopieren der Ergebnisse auf den Arbeitsplatzrechner.
  • Auswerten der Ergebnisse und evntl. grafisches Postprocessing.


Wichtige Befehle

sbatch: Absenden von Batch-Jobs

Der Befehl sbatch dient dem Abschicken von Batchjobs. Hardware-Ressourcen werden über die #SBATCH-Direktiven definiert.
  • Bitte achten Sie unbedingt darauf, dass Sie genau die Ressourcen anfordern, die Ihr Skript später benötigt.
      • Wenn Sie 8 Rechenkerne anfordern und Ihr Programm nur seriell rechnet laufen 7 Kerne idle.
      • Wenn Sie nur einen Rechenkern anfordern und Ihr Programm 8-fach parallelisiert bremsen Sie sich und andere Nutzer auf dem Rechenknoten aus.
  • Bei der walltime sollten Sie dagegen großzügig sein. Hat Ihr Job 100 Stunden Rechenzeit angefordert aber nur 50 Stunden benötigt, so wird die Hardware sofort für den nächsten Job freigegeben.
  • Das Cluster ist in verschiedene Partitionen eingeteilt. Bitte geben Sie die passende Partition an.

SBATCH Option Beispiel Bemerkung
-p [ether|ib|gpu] -p ether Weist den Job einer Partition zu.
--ntasks --ntasks 32 Anzahl der MPI-Prozesse.
--cpus-per-task --cpus-per-task 8 Fordert die angegebene Zahl an Rechenkernen pro Task an.
--mem --mem 50000 Für speicherintensive Jobs kann Speicher (in MB) reserviert werden.
--time --time 4:00:00 Reserviert die Hardware-Ressourcen für die angebene Zeitdauer.
--gres --gres gpu:1 Reserviert generische Hardware-Ressourcen (hier: eine GPU in der gpu-Partition).
--mail-type [BEGIN|END|FAIL|REQUEUE|ALL] --mail-type FAIL Definiert, ob und wann eine Benachrichtungsmail an den Nutzer verschickt werden soll.
--mail-user --mail-user name@tuhh.de E-Mailadresse des Nutzers für Benachrichtungsmails.

squeue: Jobs anzeigen

Der Befehl squeue listet die wartenden und laufenden Jobs auf. In der Manpage zu squeue finden sich vielfältige Möglichkeiten zur Ausgabeformatierung, insbesondere zur Ausgabe der erwarteten Startzeit und der Priorisierung des Jobs.

scancel: Jobs löschen

Mit scancel lassen sich eigene wartende und laufende Jobs löschen.

sview: grafisches Frontend

Alle Aufgaben können auch mit Hilfe des graphischen Frontends sview erledigt werden.


Umgebungsvariablen in SLURM

Oft möchte man zur Laufzeit des Batchskriptes auf Werte zugreifen, die beim Absenden des Batchjobs noch nicht bekannt sind, wie z.B. die Job ID.
Zu diesem Zweck bietet SLURM eine Reihe von Umgebungsvariablen an auf die zur Joblaufzeit zugegriffen werden kann.
Die wichtigsten sind:

Umgebungsvariable Wert
SLURM_JOBID laufende Nummer des aktuellen Jobs
GPU_DEVICE_ORDINAL IDs der zugewiesenen GPUs


Modul-System

Die Anwendungssoftware und die Softwareentwicklungstools auf dem HPC-Cluster sind über das Module-System zu erreichen. Eine Übersicht über die installierten Softwareversionen liefert das Kommando module avail.


Mit dem Subkommando module load kann eine bestimmte Software initialisiert werden, d.h. die Umgebungsvariablen werden so gesetzt, dass der Programmaufruf direkt über den Befehl erfolgen kann. So erlaubt z.B. module load matlab/2014a den Aufruf der Matlab-Version 2014a direkt über den Befehl matlab.

Mit module unload können gewählte Module wieder entfernt werden.


Beispielskripte

SMP-paralleler Job

Mit dem folgenden Skript möchten wir eine Abaqus-Berechnung durchführen. Da FEM-Programme nicht sehr gut parallelisieren und oftmals intensives I/O aufweisen, fordern wir 8 Kerne auf einem Rechner der ether-Partition an. Um unser Programm nicht durch langsames I/O auszubremsen rechnen wir auf der lokalen Festplatte unter /usertemp.

#!/bin/bash
#SBATCH -p ether
#SBATCH --ntasks 1
#SBATCH --cpus-per-task 8
#SBATCH --time=12:00:00

# Module initialisieren und Modul fuer Abaqus laden
. /etc/profile.d/module.sh
module load abaqus

# Lokales Arbeitsverzeichnis anlegen
# grp und id ist an die Unix-Gruppe und Nutzername anzupassen !
MYWORKDIR=/usertemp/grp/id/$SLURM_JOBID
mkdir $MYWORKDIR

# Kopiere die Eingabedaten aus dem Verzeichnis, aus dem das Skript abgeschickt wurde,
# in das Arbeitsverzeichnis.
cp $SLURM_SUBMIT_DIR/Beispiel.inp $MYWORKDIR

# Ins Arbeitsverzeichnis wechseln und Rechnung starten
cd $MYWORKDIR
abaqus job=Beispiel input=Beispiel cpus=8 interactive

# Wichtige Ergebnisse zuruecksichern.
cp -r Beispiel.* $SLURM_SUBMIT_DIR

# Aufraeumen.
rm -rf $MYWORKDIR

exit
Man beachte, dass /usertemp auf den Login-Knoten und jedem Rechenknoten lokale (d.h. unterschiedliche) Verzeichnisse sind.

Deshalb werden die Eingabedaten erst zur Laufzeit des Jobs aus einem Netzwerkverzeichnis (z.B. dem Homeverzeichnis) auf die lokale Festplatte des Rechenknotens kopiert und die Ausgabedateien nach der Abaqus-Rechnung wieder dorthin zurückkopiert.

MPP-paralleler Job

Mit dem folgenden Skript möchten wir eine MPI-parallele Berechnung mit dem Programm my_program starten. Da das Programm knotenübergreifend rechnet nutzen wir als Arbeitsverzeichnis den Bereich unter /work.

#!/bin/bash
#SBATCH -p ib
#SBATCH --ntasks 32
#SBATCH --cpus-per-task 1
#SBATCH --time=12:00:00

# Module initialisieren und Modul fuer Intel (wegen Intel MPI) laden
. /etc/profile.d/module.sh
module load intel

# Arbeitsverzeichnis im BeeGFS-Netzwerkdateisystem anlegen
# grp und id ist an die Unix-Gruppe und Nutzername anzupassen !
MYWORKDIR=/work/grp/id/$SLURM_JOBID
mkdir $MYWORKDIR

# Kopiere die Eingabedatei aus dem Homeverzeichnis in das Arbeitsverzeichnis
cp ~/Meine_Rechnung/eingabedatei $MYWORKDIR
cd $MYWORKDIR

# Erzeuge Hostfile, in dem steht wohin der Job verteilt werden soll
srun -l hostname | awk '{print $2}' | sort > hostfile_$SLURM_JOBID

# Rechnung starten
mpirun -np 32 -machinefile hostfile_$SLURM_JOBID my_program

# Alle Ausgabedaten zurueck ins Homeverzeichnis sichern.
cp -r * ~/Meine_Rechnung/

# Aufraeumen.
rm -rf $MYWORKDIR

exit

GPU-Job

Mit dem folgenden Skript möchten wir eine Berechnung mit dem Programm gromacs mit 8 CPU-Kernen und einer Grafikkarte starten. In der Umgebungsvariable GPU_DEVICE_ORDINAL steht, welche Grafikkarte uns zugewiesen wurde.

#!/bin/bash
#SBATCH -p gpu
#SBATCH --ntasks 1
#SBATCH --cpus-per-task 8
#SBATCH --gres gpu:1
#SBATCH --time 12:00:00

# Module initialisieren und Modul fuer Gromacs laden
. /etc/profile.d/module.sh
module load gromacs/4.6.5-gpu

# Lokales Arbeitsverzeichnis anlegen
# grp und id ist an die Unix-Gruppe und Nutzername anzupassen !
MYWORKDIR=/usertemp/grp/id/$SLURM_JOBID
mkdir $MYWORKDIR

# Kopiere die Eingabedatei aus dem Homeverzeichnis in das Arbeitsverzeichnis
cp ~/Gromacs_Rechnung/* $MYWORKDIR

# Ins Arbeitsverzeichnis wechseln und Rechnung starten
cd $MYWORKDIR
mdrun_mpi -ntomp 8 -gpu_id $GPU_DEVICE_ORDINAL -v -s a.tpr -o a.trr -c a.pdb -e a.edr -g a.log

# Alle Ausgabedaten zurueck ins Homeverzeichnis sichern.
cp * ~/Gromacs_Rechnung/

# Aufraeumen.
rm -rf $MYWORKDIR

exit

Ansprechpartner

Fragen, Anregungen? Wenden Sie sich an die Ansprechpartner zum wissenschaftlichen Rechnen im RZ!