Ceci est une ancienne révision du document !
Cet article donne les instructions pour utiliser le noeud 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 un nœud GPU accessible à tous les utilisateurs, voir ici sa configuration.
Notez que ses 3 cartes graphiques NVidia K20m sont basées sur l'architecture Kepler, GPU sm_35
La librairie Nvidia CUDA est installée. Versions disponibles :
Pour information, version du driver (pilote noyau) : 460.32.03
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 CALI (pour les anciennes versions de CUDA) :
Ou sur le site de NVidia, par exemple :
Le noeud GPU est dans une partition distincte de slurm nommée gpu
.
Le fait que la partition soit différente ne vous permet pas d'avoir un job « à cheval » entre ce noeud et un autre noeud du cluster : les ressources allouées par slurm pour un job sont obligatoirement dans une et une seule partition.
Cette partition possède les caractéristiques suivantes :
Sur le 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 ( détailler).
Pour placer un job sur le noeud GPU, 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