Outils pour utilisateurs

Outils du site


gpu:utilisation

Voir cette page sous forme de diaporama.

Utilisation de GPU

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.

Noeuds GPU

Le cluster comporte un nœud GPU accessible à tous les utilisateurs sans restriction (node29), voir ici sa configuration.

Notez que ses 3 cartes graphiques NVidia K20m sont basées sur l'architecture Kepler, GPU sm_35

D'autres nœuds GPU sont également à disposition (58, 63-65) : tout le monde peut les utiliser mais votre job pourra être tué (et resoumis à slurm) si le laboratoire propriétaire du noeud utilisé en a besoin.

Environnement de développement

Librairie CUDA

La librairie Nvidia CUDA est installée. Versions disponibles :

  • 5.0
  • 6.5
  • 7.0
  • 7.5
  • 10.0
  • 11.2

Pour l'utiliser, vous devez charger le module nivida/cuda, par exemple :

module load nvidia/cuda/10.0

Compatibilité des versions

  • CUDA 11.2 ne supporte plus la compilation pour architecture Kepler générique (sm_30), mais supporte encore les GPU sm_35 (deprecated) → on peut l'utiliser pour compiler du code pour le noeud commun node29
  • CUDA 10 ne supporte pas GCC > 7

Compilation

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

Documentations

Les documentations sont disponibles sur CALI (pour les anciennes versions de CUDA) :

Ou sur le site de NVidia, par exemple :

Slurm et GPU

Partition GPU

Les noeuds GPU sont dans une partition nommée gpu.

Chaque noeud est déclaré avec le type de GPU qu'il possède :

  • K20m pour node29
  • K40 pour node58
  • GTX1080Ti' pour node[63-65]

Cette partition possède les caractéristiques suivantes :

  • un noeud ne peut être utilisé à un instant donné que par un seul job
  • le temps maximal d'exécution est de 2 jours

Calcul GPU et OpenMP / MPI

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 .

Exemple de batch Slurm

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

Si vous voulez explicitement utiliser tel ou tel type de carte, précisez-le :

#SBATCH  --partition=gpu
#SBATCH  --gres=gpu:K20m:2
Cette façon de faire vous permet aussi, en précisant K20m, d'être sûr que le job ne sera pas tué, car seul le noeud commun node29 possède des K20m, votre job ne pourra donc pas être pré-empté – Mais K20m sont des cartes très anciennes…

Démarrer un shell interactif

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…

gpu/utilisation.txt · Dernière modification: 2022/09/14 18:06 de montap01