Graphical Processing Units (GPUs) sind spezialisierte Prozessoren, die mit ihren massiv parallele Architekturen bestimmte Operationen schneller ausführen können als CPUs. Man spricht deshalb auch von Beschleunigern (von denen GPUs nur eine Untergruppe sind). Der OMNI-Cluster verfügt über 10 Knoten mit insgesamt 24 GPUs vom Typ NVIDIA Tesla V100.

Damit ein Programm die GPUs nutzen kann, müssen geeignete Programmteile mit Hilfe entsprechender Bibliotheken (z.B. CUDA, OpenACC, OpenCL, OpenMP) erweitert werden.

Auf dieser Seite beschreiben wir, wie Sie für Ihre Jobs GPU-Knoten anfordern können. Außerdem ist beschrieben, welche Softwarebibliotheken zur Verfügung stehen, um Software für GPUs zu programmieren und wie Sie diese Bibliotheken einbinden.

Anfordern von GPU-Knoten auf OMNI

Um einen Knoten mit GPUs anzufordern, muss im Job-Skript die Queue (Partition) gpu angegeben werden. Zusätzlich muss auch die genaue Anzahl von benötigten GPUs über die Option --gres=gpu:<Anzahl> spezifiziert werden.

Die 24 GPUs auf dem OMNI-Cluster sind wie folgt auf die 10 GPU Knoten verteilt:

Node Anzahl
GPUs
gpu-node[001-004] 4
gpu-node[005-008] 1
gpu-node[009-010] 2

Beispiel Job-Skript-Header:

#!/bin/bash
#SBATCH --time=0:30:00
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=2
#SBATCH --partition=gpu
#SBATCH --gres=gpu:2
...

Damit fordern Sie einen GPU Knoten mit mindestens 2 GPUs aus der GPU-Queue an. Variieren Sie --gres=gpu:[1|2|4], je nachdem, wie viele GPUs sie für Ihren Anwendungsfall nutzen möchten. In der Slurm-Dokumentation finden Sie außerdem eine Reihe von weiteren Parametern, mit denen Sie die GPU-Nutzung steuern können.

GPU-Programmierung auf OMNI

Die meisten GPU-kompatiblen Module sind auf dem OMNI nicht sofort verfügbar (und z.B. nicht mit module avail sichtbar), weil sie in einem separaten Software-Stack, den GPU-Modulen, gruppiert sind. Dies ist aus Kompatibilitätsgründen notwendig. Um auf den GPU-Stack zu wechseln, müssen Sie den folgenden Befehl eingeben:

module load GpuModules

Wenn der GPU-Stack geladen ist, können Sie wie üblich mit module avail alle im GPU-Stack verfügbaren Module auflisten lassen.

Um auf den normalen Software-Stack zurück zu wechseln, geben Sie ein:

module unload GpuModules

Bitte denken Sie daran, dass Sie die Befehle zum Laden der Module auch in Ihren Jobskripten mit angeben müssen.

Aktualisiert um 15:19 am 8. Februar 2021 von Jan Steiner