Skip to content

Jobs avec GPU

Certains noeuds de calcul sont dotés de cartes GPU, de différentes générations. Dans SLURM, les cartes GPU doivent être reservées pour être disponible pour un job.

Les noeuds avec cartes gpu sont regroupés dans la partition gpu. Les ressources étant limitées, il faut nous demander expressement d'appartenir au groupe GPU pour y accéder.

Identifier les GPU disponibles

[monlogin@hpclogin01 ~]$ sinfo -N --partition=gpu -o "%N %f %G" | column -t
NODELIST       AVAIL_FEATURES             GRES
hpcdgx01       mpi,ht,broadwell,10g,v100  gpu:v100:8
hpcgpu01       mpi,ht,skylake,10g,p40     gpu:p40:2
hpcgpu02       nompi,ht,zen4,10g,h100     gpu:h100:4
hpcgpu03       nompi,ht,zen4,10g,h100     gpu:h100:4
hpcnode39      mpi,ht,broadwell,10g,t4    gpu:t4:1
iccfgpu01      mpi,noht,skylake,10g,p100  gpu:p100:1
igredgpu01     nompi,sapphire,10g,h100    gpu:h100:1
pascalgpu01    nompi,zen3,10g,a100        gpu:a100:1
piafgpu01      mpi,noht,skylake,10g,p100  gpu:p100:2
simatlabgpu01  mpi,zen3,10g,a100          gpu:a100:2
simatlabgpu02  nompi,sapphire,10g,h100    gpu:h100:1

Le type de GPU est identifié dans les features du noeud de calcul: t4, p40, a100, v100, h100... et le nombre de GPU par noeud est identifié par la ressource réservable (GRES) de type gpu (par exemple, le noeud hpcgpu01 dispose de 2 cartes NVIDIA P40).

Réserver des cartes GPU

Voici les options de la commande sbatch pour réserver une ou plusieurs cartes GPU dans vos jobs:

option SBATCH description
--gres=gpu:1 réservation d'une carte GPU sans contrainte de modèle
--gres=gpu:v100:1 réservation d'une carte GPU NVIDIA V100
--gres=gpu:a100:2 réservation de deux cartes GPU NVIDIA A100 sur le même noeud

Il ne faut pas oublier de préciser la partition: --partition=gpu.

Les cartes GPUs réservées pour votre job sont alors définies dans l'environnement d'exécution avec les variables SLURM_JOB_GPUS ou SLURM_STEP_GPUS (si vous avez utilisé srun). La variable GPU_DEVICE_ORDINAL est aussi définie:

Exemple:

[anmahul@hpclogin01 ~]$ srun --gres=gpu:h100:2 --partition gpu --pty -- bash
srun: job 7864405 queued and waiting for resources
srun: job 7864405 has been allocated resources

[anmahul@hpcgpu03 ~]$ env | grep GPU
SLURM_STEP_GPUS=1,2
GPU_DEVICE_ORDINAL=1,2

[anmahul@hpcgpu03 ~]$ nvidia-smi -L
GPU 0: NVIDIA H100 NVL (UUID: GPU-c18acc27-5d35-fe41-9b9c-8cc9beed476b)
GPU 1: NVIDIA H100 NVL (UUID: GPU-06864886-9df3-d8da-80e3-700850f1a354)
GPU 2: NVIDIA H100 NVL (UUID: GPU-ad9e6173-d0be-e33a-8974-e7be05de27ec)
GPU 3: NVIDIA H100 NVL (UUID: GPU-fd674a25-7d0f-70e0-bf16-213a12e2f18b)

Warning

  1. Votre carte GPU allouée n'a donc pas forcément l'id 0 ! Adaptez votre code pour bien utiliser l'id de la carte qui vous a été allouée par SLURM.

  2. La commande nvidia-smi va interroger toutes les cartes NVIDIA du noeud de calcul, pas seulement celles qui vous ont été allouées.