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
-
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.
-
La commande
nvidia-smiva interroger toutes les cartes NVIDIA du noeud de calcul, pas seulement celles qui vous ont été allouées.