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/7.3.0 cuda/10.0.130
# 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