Cet article donne les instructions pour utiliser les GPU.
Nous ne traitons pas ici du modèle de programmation avec les GPU, la littérature disponible sur Internet est conséquente et suffisante.
Le cluster comporte plusieurs nœuds GPU :
gpu
gpu
peut être pré-empté (stoppé et resoumis) pour libérer des ressources.La section suivante détaille comment sélectionner le type de GPU désiré via slurm, ainsi que la pré-emption.
Vous devez donner le nom de la partition (gpu
) et le nombre de GPU. Les autres ressources à indiquer sont identiques aux exemples usuels de batch.
Pour demander une seule GPU :
#SBATCH --partition=gpu #SBATCH --gres=gpu
Pour demander 2 GPU
#SBATCH --partition=gpu #SBATCH --gres=gpu:2
Comme nous l'avons déjà vu, la partition possède des cartes de 3 types, K20
, K40m
et GTX1080Ti
.
Si vous voulez explicitement utiliser tel ou tel type de carte, précisez-le :
#SBATCH --partition=gpu #SBATCH --gres=gpu:GTX1080Ti:2
Seul le noeud commun node29
possède des K20
. En conséquence, si vous demandez des cartes de ce type, votre job sera placé sur un noeud ne faisant pas partie de partition privative, et il ne pourra donc pas être pré-empté – Mais K20 sont des cartes très anciennes…
Sur noeud GPU, vous pouvez utiliser en plus des GPU du parallélisme “classique”, par thread (OpenMP) ou avec MPI. Attention cependant, il faut garder des ressources pour la gestion des GPU .
Vous voudrez peut-être tester un code de façon interactive avant de soumettre de gros batchs. Cependant, le noeud frontal ne dispose pas de carte GPU… Vous pouvez demander à slurm l'ouverture d'un shell bash interactif sur la partition GPU avec une commande de la forme :
srun --partition=gpu --gres=gpu:1 --nodes=1 --ntasks-per-node=1 --time=01:00:00 --pty bash -i
Ajustez les ressources (nombre de GPU, nombre de taches ou de processeurs, temps, mémoire…) avec les mêmes options que pour un batch classique, en prenant en compte vos besoins. Si des ressources sont disponibles immédiatement dans la partition demandée, vous obtenez de suite un shell bash. S'il n'y a pas de ressource disponible, la commande vous laisse en attente…
La librairie Nvidia CUDA est installée. Versions disponibles :
Pour l'utiliser, vous devez charger le module nivida/cuda
, par exemple :
module load nvidia/cuda/10.0
sm_30
), mais supporte encore les GPU sm_35
(deprecated) → on peut l'utiliser pour compiler du code pour le noeud commun node29
La compilation d'un programme avec CUDA se fait sur le nœud frontal, avec les compilateurs CUDA (nvcc
)
Par défaut, nvcc
utilise le compilateur GNU gcc
pour la partie host. Vous pouvez compiler cette partie avec la suite Intel via l'option -ccbin=icc
Les documentations sont disponibles sur le site de NVidia, par exemple :