HPC-Cluster

GPU-Jobs

Für Berechnungen mit GPUs steht eine ganze Reihe von Knoten mit NVIDIA-Karten zur Verfügung. Um die GPUs benutzen zu können, müssen Jobs eine oder mehrere GPUs reservieren. Dem Job stehen diese GPUs dann exklusiv zur Verfügung.

Im Jobscript muss die Anzahl und die Fähigkeiten der GPUs durch die entsprechenden Resourcenanforderungen spezifiziert werden. Die Anzahl wird mit der Resource gpus ausgewählt, für die Fähigkeiten gibt es die Resourcen cuda_compute_capabilty (kurz: ccc), gpu_mem und nvidia_rtx.

Die cuda_compute_capability ist ein numerischer Wert in Form einer Versionnummer, z.B. 3.1 oder 7.5. Sie wird von NVIDIA festgelegt und beschreibt die von der GPU untertützten CUDA-Features. Das Batchsystem interpretiert die Resource als Mindestanforderung, d.h. es wird eine GPU mit mindestens diesen Fähigkeiten zur Verfügung gestellt.

gpu_mem fordert eine GPU mit mindestens der angegebenen Menge an benutzbarem RAM an. Das kann relevant sein, wenn es mehrere GPU-Typen mit dem gleichen Chipsatz, aber verschieden viel RAM gibt, z.B. RTX6000 und RTX2080Ti.

nvidia_rtx=true fordert eine GPU an, die die NVIDIA Raytracing Extensions unterstützt. Das ist normalerweise nur notwendig, wenn man die GPU tatsächlich zum Rendern von Grafik benutzen möchte, ein heutzutage eher ungewöhnliches Einsatzszenario.

Im Jobscript muss dann (falls CUDA benutzt wird)  ein CUDA-Modul geladen werden. Eine Liste verfügbarer Modul-Versionen erhält man mit

module avail cuda

Das folgende Jobscript fordert 1 GPU mit mindestens CUDA Compute Capability 7.5 und 2GB RAM an, lädt ein CUDA-Modul und schreibt dann den Output des deviceQuery-Tools in die Ausgabedatei

#!/bin/bash --login
#$ -cwd
#$ -N gpu_example
#$ -j y
#$ -o gpu_example.out
#$ -l h_rt=120000
#$ -l gpus=1
#$ -l gpu_mem=2G
#$ -l ccc=7.5
#$ -m e
#$ -M meine.mail@adresse

module load cuda/10.2
deviceQuery