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
- Ο αριθμός των GPUs που έχουμε δεσμεύσει δίνεται από την παράμετρο
$SLURM_GPUS
.
Προσοχή!
Η παράμετρος --gres
είναι απαραίτητη για την υποβολή εργασιών στα gpu
και ampere
partitions.
Παράδειγμα χρήσης¶
GPU Partition¶
- Driver Version: 535.183.06
- Latest CUDA Version: 12.4
- modules:
- gcc/13.2.0-iqpfkya
- cuda/12.4.0-zk32gam
Θα χρησιμοποιήσουμε ένα από τα NVIDIA cuda-samples που παρουσιάζουν τα features του CUDA Toolkit.
Μπορούμε να κάνουμε clone από το NVIDIA github repository τα cuda samples
στην έκδοση v12.4
ως εξής:
Clone NVIDIA cuda-samples
# git clone https://github.com/NVIDIA/cuda-samples.git --branch v12.4 cuda-samples-v12.4
Για να υποβάλουμε την εργασία στο 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/13.2.0-iqpfkya cuda/12.4.0-zk32gam
# change to the cuda sample directory
cd ~/cuda-samples-v12.4/Samples/1_Utilities/deviceQuery
# compile and run deviceQuery
make
./deviceQuery
Για την υποβολή της εργασίας χρησιμοποιούμε την εντολή:
# sbatch DeviceQuery-gpu.sh
Με την εντολή squeue
μπορούμε να ελέγξουμε την εξέλιξη της εργασίας και εφόσον έχει εκκινήσει μπορούμε να παρακολουθούμε την έξοδό της, με την εντολή:
# tail -f slurm-*.out
Ampere Partition¶
- Driver Version: 535.183.06
- CUDA Version: 12.4
- modules:
- gcc/13.2.0-iqpfkya
- cuda/12.4.0-zk32gam
Θα χρησιμοποιήσουμε ένα από τα NVIDIA cuda-samples που παρουσιάζουν τα features του CUDA Toolkit.
Μπορούμε να κάνουμε clone από το NVIDIA github repository τα cuda samples
στην έκδοση v12.4
ως εξής:
Clone NVIDIA cuda-samples
# git clone https://github.com/NVIDIA/cuda-samples.git --branch v12.4 cuda-samples-v12.4
Για να υποβάλουμε την εργασία στο Ampere 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 gcc/13.2.0-iqpfkya cuda/12.4.0-zk32gam
# change to the cuda sample directory
cd ~/cuda-samples-v12.4/Samples/1_Utilities/deviceQuery
# compile and run deviceQuery
make
./deviceQuery