Linux-Cluster (rzcluster)

no/neinStudierende yes/jaBeschäftigte yes/jaEinrichtungen no/neinstud. Gruppen

rzcluster (2016)

Für serielle und moderat parallele Berechnungen betreibt das Rechenzentrum einen separaten Linux-Cluster (rzcluster). Dieses System besteht zurzeit aus 142 Knoten mit teilweise unterschiedlichen Prozessortypen und insgesamt 1948 Cores. Die Hauptspeicherausstattung der Knoten reicht von 32GB bis zu 256GB. Zur Durchführung von parallelen Berechnungen sind ein Teil der Batchknoten zusätzlich zur Gigabit-Ethernet Vernetzung mit einem InfiniBand-Netzwerk ausgestattet.


 

Für Informationen zum neuen BeeGFS Dateisystem siehe hier .

 

Hardware

1 Vorrechner (Login-Knoten)

  • zwei 6-Core Intel Xeon X5650 Prozessoren (2,7GHz)
  • 48GB Hauptspeicher

 

142 Rechenknoten (Batch-Knoten)

  • Hauptspeicherausstattung: 32GB bis 256GB
  • unterschiedliche Prozessoren (AMD und Intel)
  • teilweise mit einem InfiniBand-Netzwerk verbunden (QDR) 

 

Betriebssystem

  • Scientific Linux 6.x

 

Rechnerzugang

Benutzerkennung

  • Zur Beantragung einer Benutzerkennung für den rzcluster füllen Sie bitte den Antrag auf Nutzung eines Hochleistungsrechners aus (bitte den Punkt Linux-Cluster (rzcluster) ankreuzen) und schicken Sie diesen an das Rechenzentrum.

Zugangsrechner

  • Berechnungen auf dem rzcluster sollen hauptsächlich im Batchbetrieb durchgeführt werden. Auf dem Vorrechner sollen nur kurze interaktive Arbeiten (z.B. Programmübersetzungen, Tests von Skripten und Programmen) ausgeführt werden. Falls Sie für Ihre Berechnungen jedoch längere interaktive Rechenzeiten und/oder viel Hauptspeicher benötigen sollten, setzen Sie sich bitte vorab mit uns in Verbindung.
  • Der Zugang zum Vorrechner rzcluster.rz.uni-kiel.de ist nur über eine SSH-Verbindung aus dem uni-internen Netzwerk möglich:

    ssh -X <username>@rzcluster.rz.uni-kiel.de

  • Das voranstehende Dollarzeichen symbolisiert dabei stets den Kommandozeilenprompt und ist nicht Teil der Eingabe!
  • Mit der Option -X (großes X) wird das X11-Forwarding aktiviert.
  • Für das Einloggen von einem Windows-Rechner aus eignen sich als SSH-Clients zum Beispiel die Programme Putty, X-Win32 oder MobaXterm sowie WinSCP zum Transferieren von Daten.

 

Dateisysteme

Auf dem rzcluster stehen jedem Nutzer verschiedene Dateisysteme mit unterschiedlichen Aufgaben zur Verfügung:

Home-Verzeichnis

  • erreichbar über die Umgebungsvariable $HOME
  • global verfügbares Dateisystem mit einer täglichen Datensicherung
  • Verzeichnis für Skripte, Programmcodes und kleinere Ergebnisdateien

 

Work-Verzeichnis

  • global verfügbare Dateisysteme ohne Datensicherung
  • Für jeden Benutzer existiert ein Work-Verzeichnis, wobei die jeweiligen Work-Verzeichnisse zur besseren Perfomance auf unterschiedliche Dateisysteme verteilt sind. Für neu eingerichtete Benutzerkennungen wird automatisch ein Verzeichnis auf dem parallelen BeeGFS Dateisystem /work_beegfs angelegt.
  • Batchberechnungen sollten nur in diesem Verzeichnis durchgeführt werden.

 

Lokaler Plattenplatz

  • Über die Umgebungsvariable $TMPDIR steht auf jedem Batch-Knoten lokaler Plattenplatz zur Verfügung.
  • Besonders I/O-intensive Berechnungen sollten immer auf diesem Verzeichnis durchgeführt werden.
  • Achtung: Der lokale Plattenplatz steht nur während einer laufenden Batch-Berechnung zur Verfügung, d.h. alle dort befindlichen Daten werden nach Beendigung der Berechnung automatisch gelöscht.

 

Tape-Library

  • Aktuell nicht mehr benötigte Dateien sollten auf dem zusätzlichen Dateisystem /nfs/tape_cache/<userid> (nur auf dem Login-Knoten verfügbar) ausgelagert werden. Die hier abgelegten Dateien werden nach einiger Zeit auf Band geschrieben; sie können jedoch jederzeit vom Login-Knoten aus auf das Home- bzw. Work-Verzeichnis zurück kopiert werden.
  • nicht für das Speichern von vielen kleinen Dateien geeignet; Erstellen von tar-Dateien. Falls eine große Anzahl von Dateien gepackt werden soll, empfehlen wir Dateigrößen im Bereich von 3GB und 50GB. Eine einzelne tar-Datei sollte jedoch nicht größer als 1TB sein.
  • langsame Zugriffsgeschwindigkeiten, daher möglichst kein direktes Arbeiten mit Dateien im /nfs/tape_cache-Verzeichnis (Kopieren Sie diese Dateien vor der Weiterverarbeitung (z.B. entpacken) erst wieder zurück auf das Work-Verzeichnis)
  • Datentransfer zu bzw. vom tape_cache-Verzeichnis darf nicht mit dem rsnyc-Kommando erfolgen

 

Software

Compiler

  • Für die Programmübesetzung von seriellen und parallelen Programmen stehen auf dem rzcluster mehrere Compiler zur Verfügung:
    • gnu-Compiler: gfortran, gcc und g++
    • Intel-Compiler: ifort, icc und icpc (Initialisierung mit dem Kommando module load intel16.0.0 )
    • Portland-Compiler: pgf90, pgcc und pgCC (Initialisierung mit dem Kommando module load pgi16.161 )

 

MPI-Parallelisierung

  • Für die Entwicklung und Durchführung von MPI-parallelisierten Programmen steht auf dem rzcluster die Intel-MPI Umgebung zur Verfügung.
  • Initialisierung der Intel-MPI Umgebung: module load intelmpi16.0.0
  • Compileraufrufe
    • mpiifort, mpiicc und mpiicpc (Nutzung des Intel-Compilers)
    • mpif90, mpigcc und mpigxx (Nutzung des gnu-Compilers)
  • Durchführung von knotenübergreifenden Berechnungen:
    • Für knotenübergreifende MPI-Berechnungen müssen die beteiligten Batchknoten ohne Passwortabfrage miteinander kommunizieren können. Um dieses zu erreichen, müssen von jedem Benutzer einmalig die beiden folgenden Schritte auf dem Login-Knoten des Systems durchgeführt werden:
      1. Erzeugen eines Schlüsselpaares mit dem Kommando:
        ssh-keygen -t rsa  (Anfragen bitte nur mit Return bestätigen)
      2. Kopieren des öffentlichen Schlüssels mit dem Kommando:
        cp $HOME/.ssh/id_rsa.pub $HOME/.ssh/authorized_keys

 

Bibliotheken

  • netcdf, hdf5, fftw, mkl, ...

 

Anwendersoftware

  • Tubomole, Python, R, SPSS, Matlab, ...
  • Für das Programmpaket Matlab stehen aus lizenzrechtlichen Gründen unterschiedliche Installationen für CAU-Angehörige und GEOMAR-Mitarbeiter zur Verfügung. Letztere laden bitte vor der Benutzung das entsprechende Module mit der Endung _geomar .

 

Module-Konzept

  • Compiler, Bibliotheken, Software und spezielle Tools werden auf dem rzcluster über ein Module-Konzept bereitgestellt, das systemweit einheitlich ist und auch auf den Batch-Knoten zur Verfügung steht.
  • Einen Überblick über die installierten Programme gibt das folgende Kommando:

    module avail

  • Weitere Befehle zur Softwarenutzung:
    Kommando Erklärung
    module load <name> Lädt das Modul mit dem Namen <name>,
    d.h. alle Einstellungen, die für die Nutzung des
    spezifizierten Programmes notwendig sind werden vorgenommen
    module unload <name> Entfernt das Modul, d.h. alle Einstellungen werden rückgängig gemacht.
    module list Listet alle Module auf, die derzeit geladen sind.
    module show <name> Zeigt an, welche Einstellungen durch das Modul vorgenommen werden.

 

Batch-Verarbeitung

Zur Resourcenverwaltung wird auf dem rzcluster das Batchsystem Slurm eingesetzt: http://slurm.schedmd.com/ .

Batchklassen

Für interaktive und reguläre Batch-Berechnungen sind auf dem rzcluster derzeit folgende Batchklassen eingerichtet:

Batchklasse (Slurm Partition) Max. Rechenzeit (Walltime) Max. Hauptspeicher Max. Coreanzahl pro Knoten Knotenbeschreibung
express 3 Stunden 32-48GB 8-12 AMD und Intel-Westmere
small 24 Stunden 32-48GB 8-12 AMD und Intel-Westmere
medium 240 Stunden 32-48GB 8-12 AMD und Intel-Westmere
long 480 Stunden 32-48GB 8-12 AMD und Intel-Westmere
test (max. 2 Knoten pro Job) 30 Minuten 32-256GB 4-48 Verschiedene Typen
  • Vom Benutzer sollte stets eine konkrete Walltime mit der Slurm-Direktive --time=[hh:mm:ss] angegeben werden. Wird keine Walltime angegeben, wird die maximale Walltime gesetzt.
  • Zusätzlich existieren weitere Batchklassen, für deren Nutzung eine extra Validierung erforderlich ist (angus, fermion, fobigmem, focean, ikmb_a, msb und spin). Hier gibt es keine Beschränkung der Walltime, die default Walltime beträgt hier 48 Stunden.
  • Die Batchklasse wird mit der Slurm-Direktive --partition=<partition> angefordert, für Beispiele siehe unten.
  • Die AMD-Knoten sind mit 8 Cores und 32GB Hauptspeicher ausgestattet, die Intel-Westmere-Knoten mit 12 Cores und 48GB Hauptspeicher.
  • Um Batch-Berechnungen explizit auf die Intel-Westmere-Knoten zu schicken, kann die zusätzliche Slurm-Direktive --constraint=westmere verwendet werden.

 

Durchführung von Batch-Berechnungen

Für die Durchführung einer Berechnung im Batchbetrieb ist es notwendig, dass der Benutzer dem Batchsystem nicht nur mitteilt, welches Programm ausgeführt werden soll, sondern es müssen dem System zusätzlich auch die für die Berechnung notwendigen Ressourcen (insbesondere Rechenzeit und Speicherbedarf) mitgeteilt werden. Diese Ressourcenangaben werden zusammen mit dem eigentlichen Programmaufruf in ein Batch- oder Jobskript geschrieben und anschließend mit dem Befehl

sbatch <jobscript>

an das Batchsystem übergeben (das Dollarzeichen symbolisiert hier und im Folgenden den Kommandozeilenprompt).

  • Jedes Batch-Skript beginnt mit der Direktive  #!/bin/bash in der ersten Zeile. Die darauffolgenden Zeilen enthalten die Direktive #SBATCH gefolgt von einer Resourcenanforderung oder einer anderen Information, für Beispiele siehe unten.
  • Die wichtigsten Job-Parameter sind in der folgenden Tabelle zusammengestellt.

 

Job-Parameter

Erklärung Parameter
Batch-Skript Direktive #SBATCH
Batchklasse (Slurm Partition) --partition=<partition> oder -p <partition>
Name des Jobs --job-name=<jobname> oder -J <jobname>
Stdout-Datei --output=<filename> oder -o <filename>
Stderr-Datei --error=<filename> oder -e <filename>
Stdout und Stderr in dieselbe Datei --output=<filename> oder -o <filename>
(default wenn --error nicht angegeben wird)
Anzahl der angeforderten Knoten --nodes=<n> oder -N <n>
Anzahl der (MPI) Prozesse pro Knoten --tasks-per-node=<m>
Anzahl der Cores/CPUs pro Knoten oder pro Slurm Task --cpus-per-task=<m> oder -c <m>
Hauptspeicher (in MB) --mem=<memory>
... in GB --mem=1G
Rechenzeit (Walltime) --time=[hh:mm:ss] oder -t [hh:mm:ss]
Zum Verhindern eines Requeuing (z.B. bei einem Knotenabsturz) --no-requeue
Email Addresse --mail-user=<address>
Email Benachrichtigungen --mail-type=BEGIN
  --mail-type=END
  --mail-type=FAIL
  --mail-type=ALL
Verwendung eines Knoten-Features --constraint=<feature>
Verwendung eines "Quality of Service" (nur für Spezialknoten)

--qos=<quality-of-service> 
(angus, fermion, fobigmen, focean, ikmb_a, msb oder spin)

 

  • Für eine interaktive Nutzung der Batch-Knoten ohne X11-Unterstützung gibt es momentan zwei Möglichkeiten:
    1. Für eine interaktive Berechnung, in der der Kommandozeilenprompt des Login-Knotens erhalten bleibt und nur Kommandos mit einem vorangestellten srun (z.B., srun hostname ) auf dem Batch-Knoten ausgeführt werden sollen, verwendet man den Befehl salloc:

      salloc --nodes=1 --cpus-per-task=1 --time=00:10:00 --partition=small

    2. Für eine interaktive Berechnung, in der alle Kommandos auf dem Batch-Knoten ausgeführt werden sollen, verwendet man den Befehl srun:

      srun --pty --nodes=1 --cpus-per-task=1 --time=00:10:00 --partition=small /bin/bash

 

Kommandos zur Jobkontrolle

Erklärung Kommando
Abgabe einer Batch-Berechnung (Job) sbatch <jobscript>
Löschen eines wartenden oder laufenden Jobs scancel <jobid>
Auflisten aller Jobs im System squeue
Auflisten der eigenen Jobs squeue -u <userid>
Statusanzeige für einen spezifischen Job squeue -j <jobid>
Details für einen spezifischen Job scontrol show job <jobid>
Weitere Informationen zu den Batch-Klassen sinfo

 

  • Detaillierte Resource-Informationen über einen laufenden Job können mit dem Befehl sstat -j <jobid>.batch angezeigt werden.

 

Umgebungsvariablen

Erklärung Umgebungsvariabe
Job ID $SLURM_JOBID
Job Name $SLURM_JOB_NAME
Mit dem Job verbundene Kennung $SLURM_JOB_USER
Verzeichnis aus dem der Job abgeschickt wurde $SLURM_SUBMIT_DIR
Liste der verwendeten Knoten $SLURM_NODELIST

 

  • In Slurm ist es ist nicht notwendig mit dem cd-Kommando in das Verzeichnis $SLURM_SUBMIT_DIR zu wechseln, da Jobs automatisch das Verzeichnis nutzen, aus dem der Job abgeschickt wurde.
  • Die Umgebungsvariable $TMPDIR für den Zugriff auf die lokalen Platten eines Batch-Knotens hat die folgende Struktur: /scratch/SlurmTMP/$SLURM_JOB_USER.$SLURM_JOBID .
  • Wichtig: Bei Jobabgabe werden alle Umgebungsvariablen, die momentan in der Konsole definiert sind, an das Batchsystem und damit an den Job weitergereicht. Dies erscheint auf den ersten Blick als sehr nützlich, kann jedoch dazu führen, dass dasselbe Batch-Skript sich unterschiedlich verhält, je nach den gesetzten Umgebungsvariablen. Um dieses Problem zu vermeiden, kann man die folgende Direktive zusätzlich einbinden: #SBATCH --export=NONE .

 

 

Batch-Skript Vorlagen

  • Beispiel für eine serielle Berechnung:
    #!/bin/bash
    #SBATCH --job-name=test
    #SBATCH --output=test.out
    #SBATCH --error=test.err
    #SBATCH --nodes=1
    #SBATCH --tasks-per-node=1
    #SBATCH --cpus-per-task=1
    #SBATCH --mem=1000
    #SBATCH --time=01:00:00
    #SBATCH --partition=small
    
    export OMP_NUM_THREADS=1
    ./test.ex
  • Beispiel für eine shared-memory Berechnung (Thread- oder OpenMP-Parallelisierung):
    #!/bin/bash
    #SBATCH --job-name=test
    #SBATCH --output=test.out
    #SBATCH --error=test.err
    #SBATCH --nodes=1
    #SBATCH --tasks-per-node=1
    #SBATCH --cpus-per-task=8
    #SBATCH --mem=10000
    #SBATCH --time=01:00:00
    #SBATCH --partition=small
    
    export OMP_NUM_THREADS=8
    ./test.ex
    
  • Beispiel für eine parallele knotenübergreifende MPI Berechnung:
    #!/bin/bash
    #SBATCH --job-name=test
    #SBATCH --output=test.out
    #SBATCH --error=test.err
    #SBATCH --nodes=2
    #SBATCH --tasks-per-node=12
    #SBATCH --cpus-per-task=1
    #SBATCH --mem=10000
    #SBATCH --time=01:00:00
    #SBATCH --partition=small
    
    export OMP_NUM_THREADS=1
    module load intelmpi16.0.0
    mpirun -np 24 ./test.ex
    
  • Beispiel für eine parallele knotenübergreifende Hybridberechnung (MPI+OpenMP):
    #!/bin/bash
    #SBATCH --job-name=test
    #SBATCH --output=test.out
    #SBATCH --error=test.err
    #SBATCH --nodes=2
    #SBATCH --tasks-per-node=6
    #SBATCH --cpus-per-task=2
    #SBATCH --mem=10000
    #SBATCH --time=01:00:00
    #SBATCH --partition=small
    
    export OMP_NUM_THREADS=2
    module load intelmpi16.0.0
    mpirun -np 12 ./test.ex
  • Beispiel für einen Job Array:
    #!/bin/bash
    #SBATCH --job-name=test
    #SBATCH --array 0-9
    #SBATCH --output test-%A_%a.out
    #SBATCH --nodes=1
    #SBATCH --tasks-per-node=1
    #SBATCH --cpus-per-task=1
    #SBATCH --mem=1000
    #SBATCH --time=00:10:00
    #SBATCH --partition=small
    
    echo "Hi, I am step $SLURM_ARRAY_TASK_ID in the array job $SLURM_ARRAY_JOB_ID"


Support und Beratung

HPC-Support-Team: hpcsupport@rz.uni-kiel.de
Verantwortliche Ansprechparter am Rechenzentrum:
Siehe unter HPC-Support und Beratung.