Μετάβαση στο περιεχόμενο

GPU εργασίες

Μία σύντομη εισαγωγή στην CUDA και στη χρήση GPU, υπάρχει εδώ.

Στην υπολογιστική συστοιχία "Αριστοτέλης" υπάρχουν δύο (2) ουρές (partitions) κατάλληλες για παραγωγικές GPU εργασίες:

  • το gpu partition το οποίο αποτελείται από δύο κόμβους με μία κάρτα NVIDIA Tesla P100 σε κάθε κόμβο και
  • το ampere partition το οποίο αποτελείται από έναν κόμβο με οχτώ κάρτες NVIDIA A100.

Πλήθος GPUs ανά εργασία

  • Με την παράμετρο --partition καθορίζουμε σε ποιά ουρά (partition) θέλουμε να δρομολογηθεί μία εργασία.
  • Η παράμετρος --gres καθορίζει μία λίστα από Generic RESources που χρειάζεται να δεσμευθούν για μία εργασία. Έτσι, επιλέγουμε πόσες GPU κάρτες θέλουμε να δεσμευτούν από τον scheduler (slurm) για αυτή την εργασία.

Στο παρακάτω παράδειγμα, θα γίνει allocate για την εργασία μας, μία gpu στο gpu partition (άρα μία Tesla P100):

#SBATCH --partition=gpu
#SBATCH --gres=gpu:1

Στο partition gpu δεν μπορούμε να εκμεταλευτούμε ταυτόχρονα (από την ίδια εργασία) περισσότερες από μία GPU κάρτες εκτός και αν η εργασία μας παραλληλίζεται με MPI οπότε μπορούμε να αξιοποιήσουμε δύο (2) κάρτες ως εξής:

#SBATCH --partition=gpu
#SBATCH --nodes=2
#SBATCH --gres=gpu:1

Στην ουρά ampere μπορούμε να αξιοποιήσουμε από την ίδια εργασία μέχρι και οχτώ κάρτες (χωρίς να είναι απαραίτητη η παραλληλοποίηση με MPI). Στο παρακάτω παράδειγμα θα γίνουν allocate δύο GPUs (A100) κάρτες για την εργασία μας:

#SBATCH --partition=ampere
#SBATCH --gres=gpu:2

Προσοχή!

Η παράμετρος --gres είναι απαραίτητη για την υποβολή εργασιών στα gpu και ampere partitions.

Παράδειγμα χρήσης

GPU Partition

  • Driver Version: 460.32.03
  • CUDA Version: 11.2
  • modules:
  • gcc/10.2.0
  • cuda/11.1.0

Θα χρησιμοποιήσουμε ένα από τα NVIDIA cuda-samples που παρουσιάζουν τα features του CUDA Toolkit. Μπορούμε να κάνουμε clone από το NVIDIA github repository τα cuda samples στην έκδοση v11.1 ως εξής:

Clone NVIDIA cuda-samples

# git clone https://github.com/NVIDIA/cuda-samples.git --branch v11.1 cuda-samples-v11.1

Για να υποβάλουμε την εργασία στο GPU partition μπορούμε να χρησιμοποιήσουμε το παρακάτω script (έστω DeviceQuery-gpu.sh):

#!/bin/bash
#SBATCH --job-name=DeviceQuery
#SBATCH --nodes=1
#SBATCH --partition=gpu
#SBATCH --gres=gpu:1
#SBATCH --time=10:00

nvidia-smi

# load the required modules
module load gcc/10.2.0 cuda/11.1.0

# change to the cuda sample directory
cd cuda-samples-v11.1/Samples/deviceQuery

# compile and run deviceQuery
make
./deviceQuery

Για την υποβολή της εργασίας χρησιμοποιούμε την εντολή:

# sbatch DeviceQuery-gpu.sh

Με την εντολή squeue μπορούμε να ελέγξουμε την εξέλιξη της εργασίας και εφόσον έχει εκκινήσει μπορούμε να παρακολουθούμε την έξοδό της, με την εντολή:

# tail -f slurm-*.out

Ampere Partition

  • Driver Version: 535.154.05
  • CUDA Version: 12.2
  • modules:
  • centos8
  • gcc/11.2.0
  • cuda/12.2.0

Για την NVIDIA A100 υποστηρίζεται έως και η έκδοση 12.2 του cuda toolkit. Επομένως, μπορούμε να κάνουμε clone από το NVIDIA github repository τα cuda samples στην έκδοση v12.2 ως εξής:

Clone NVIDIA cuda-samples

# git clone https://github.com/NVIDIA/cuda-samples.git --branch v12.2 cuda-samples-v12.2

Για να υποβάλουμε την εργασία στο GPU partition μπορούμε να χρησιμοποιήσουμε το παρακάτω script (έστω DeviceQuery-ampere.sh):

#!/bin/bash
#SBATCH --job-name=DeviceQuery
#SBATCH --nodes=1
#SBATCH --partition=ampere
#SBATCH --gres=gpu:2
#SBATCH --time=10:00

nvidia-smi

# load the required modules
module load centos8 gcc/11.2.0 cuda/12.2.1

# change to the cuda sample directory
cd cuda-samples-v12.2/Samples/deviceQuery

# compile and run deviceQuery
make
./deviceQuery