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

GPU εργασίες

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

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

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

Πλήθος gpu ανά job

Με την παράμετρο --partition καθορίζουμε σε ποιά ουρά (partition) θέλουμε να δρομολογηθεί ένα job και με την παράμετρο --gres πόσες GPU κάρτες θέλουμε να δεσμευτούν από τον scheduler (slurm) για αυτό το job. Στο παρακάτω παράδειγμα για το job μας θα γίνει allocate μία gpu στο gpu partition (άρα μία Tesla P100)

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

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

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

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

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

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

Θα χρησιμοποιήσουμε ένα από τα παραδείγματα (samples) του CUDA Toolkit. Για το σκοπό αυτό διαμορφώνουμε κατάλληλα το περιβάλλον και αντιγράφουμε τα δεδομένα εισόδου του παραδείγματος deviceQuery:

# module load gcc/10.2.0 cuda/11.1.0
# cp -r $CUDA_SAMPLES/1_Utilities/deviceQuery .

Στην συνέχεια μεταφερόμαστε στον φάκελο deviceQuery και κάνουμε compile το deviceQuery.cpp:

# cd deviceQuery
# make

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

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

nvidia-smi
./deviceQuery

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

# sbatch DeviceQuery.sh

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

# tail -f slurm-*.out