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 | #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 Anwendugsfall nutzen möchten.
GPU-Programmierung auf OMNI
Nach dem Login werden per default der OpenHPC Software Stack, mit vielseitigen Tools und Bibliotheken für das wissenschaftliche Rechnen, und auf Wunsch installierte Anwendungssoftware im OMNI Software Stack geladen. Daneben existiert ein weiterer Software Stack der vom Bright Cluster Manager zur Verfügung gestellt wird. Dieser enthält neben den GPU Kompilern auch Pakete mit GPU-Unterstützung unter anderem für den Anwendungsbereich des Maschinellen Lernens. Nach dem Laden des GPU-Module Stacks sind die anderen Software Stacks nicht mehr sichtbar, damit es nicht zu Kompatibilitätsproblemen kommt.
Laden des GPU-Module Stacks:
module load GpuModules
Damit werden folgende Komponenten per Default in Ihre Umgebung geladen:
$ module list
Currently Loaded Modules:
1) shared 6) openblas/dynamic/0.3.7 11) nccl2-cuda10.1-gcc/2.7.8
2) slurm/omni/20.02.6 7) protobuf3-gcc/3.8.0 12) gcc5/5.5.0
3) python36 8) cudnn7.6-cuda10.1/7.6.5.32 13) tensorflow2-py36-cuda10.1-gcc/2.0.0
4) ml-pythondeps-py36-cuda10.1-gcc/3.3.0 9) hdf5_18/1.8.21
5) keras-py36-cuda10.1-gcc/2.3.1 10) cuda10.1/toolkit/10.1.243
Eine Übersicht aller Module, die Ihnen unter GpuModules aus dem Bright Cluster Manager Maschine Learning Stack zur Verfügung stehen können Sie sich mit module avail
anzeigen lassen.
Nach dem Entladen des Modules steht Ihnen der OpenHPC und OMNI Software Stack ohne GPU-Unterstützung wieder zur Verfügung. Das Kommando dazu ist:
module unload GpuModules
Bitte denken Sie daran, entsprechende Befehle zum Laden und Ändern der Module im Jobsskript mit anzugeben und GPUs im Jobskript anzufordern (siehe oben).