Accélérateurs
Le cluster HPC est équipé de 34 GPUs NVIDIA (2 RTX2080Ti, 10 A100 et 22 L40S). Ici vous trouverez
- comment réserver un GPU avec Slurm
- les limites s'appliquant aux jobs GPU
- les caractéristiques matérielles des GPUs
Réserver des GPUs
Pour assurer la disponibilité de ces ressources limitées, les nœuds avec accélérateurs sont uniquement destinés aux calculs sur GPU.
Plusieurs options permettent de réserver des GPUs :
Depuis la dernière mise à jour de Slurm (version 25.05.0) un bug touche les jobs multi-GPU.
Seul l'option --gpus semble fonctionner correctement - avec les autres options, Slurm alloue parfois moins de GPUs que demandés.
En attendant la résolution de ce bug, pour reserver plusieurs GPU par job, il faut obligatoirement utiliser l'option --gpus qui permet de spécifier le nombre total de GPUs par job.
Reserver des GPUs avec --gres
Pour réserver des GPUs avec l'option --gres il faut rajouter une ligne dans l'en-tête de votre script:
SBATCH --gres=gpu:<gpu-type>:<nombre>
où
<nombre>est le nombre par nœud. Il n'est pas nécessaire de spécifier le nombre. Par défaut,<nombre>est égal à 1.<gpu-type>peut êtreRTX2080,A100-80G,A100-HGX-80GouL40S(voir cette liste)- Non spécifié. Mais vous devez alors préciser l'option
--partition.
Les GPUs demandés avec --gres seront alloué au job sur chaque nœud.
Reserver des GPUs avec --gpus
La reservation des GPUs avec l'option --gpus est similaire
SBATCH --gpus=<gpu-type>:<nombre>
où
<nombre>est le nombre total de GPUs.<gpu-type>peut êtreRTX2080,A100-80G,A100-HGX-80GouL40S(voir cette liste)- Non spécifié. Une reservation avec
--gpus=2est équivalent à--gres=gpu:2décrit ci-dessus.
Le nombre de GPUs demandés avec --gpus est le total requis pour le job.
Partitions GPU
En raison de leurs différences importantes les cartes sont repartis en deux partitions.
- la partition
gpuairegroupe les cartes conçues pour l'intelligence artificielle et plus généralement des calculs en précision simple ou mixte (max 32-bit). - la partition
gpu64regroupe les cartes équipés de cœurs de calcul double précision (FP64).
Si votre calcul se fait en double précision (FP64) il faut utiliser les cartes A100 (partition gpu64)
Il est important de choisir le GPU (ou la partition) qui convient le mieux à vos calculs. Pour vous aider à faire un choix pertinent, vous trouverez ci-dessous les caractéristiques des GPUs présents dans le cluster. Si vous n'êtes pas certain quelle carte choisir pour vos calculs, écrivez-nous à hpc@univ-lille.fr.
En résumé, une demande de ressources GPU doit spécifier
- ou le type de GPU (
--gresou--gpus) - ou la partition cible (
--partition) - ou bien les deux, si compatible.
Par exemple
--gres= | --gpus= | --partition= | Ressource demandée |
|---|---|---|---|
| gpu:1 | 1 | gpu64 | A100-80G ou A100-HGX-80GB |
| gpu:2 | 2 | gpuai | 2x(RTX2080 ou L40S) |
| gpu:1 | 1 | gpuai, gpu64 | GPU indifférent |
| gpu:RTX2080 | RTX2080 | - | RTX2080 |
| gpu:RTX2080 | RTX2080 | gpuai | RTX2080 |
| gpu:1 | 1 | - | requête invalide (ni type, ni partition) |
| - | - | gpu64 | requête invalide (gres/gpu non spécifié) |
| gpu:L40S | L40S | gpu64 | requête invalide (incompatible) |
Par exemple, pour réserver un nœud GPU avec une carte Nvidia RTX2080Ti :
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --time=00:05:00
#SBATCH --job-name=GPU
#SBATCH --mem=1G
#SBATCH --gres=gpu:RTX2080:1
...
Les demandes de ressources doivent être conformes aux limites imposées sur les partitions GPU (voir section QoS).
Quality-of-Service (QoS)
Les jobs qui demandent des ressources GPU sont automatiquement placés dans la partition gpu.
Les limites qui s'appliquent aux jobs dans cette partition sont différentes du reste du cluster.
Les limites dépendent du QoS (Quality of Service) avec lequel le job est soumis.
Par défaut, le QoS gpu-default est utilisé et l'utilisateur n'a pas à le spécifier.
Afin de changer les limites imposées par défaut, il faut spécifier l'utilisation du QoS gpu-big dans l'en-tête du script Slurm :
#SBATCH --qos=gpu-big
| QoS | gpu-default | gpu-big | gpu-small |
|---|---|---|---|
| Limites par job | |||
| Walltime | 48 heures-GPU | 384 heures-GPU | 2 heures-GPU |
| GPUs | 1 | 8 | 1 |
| Mémoire | 128G | max | 128G |
| CPUs | 16 | max | 16 |
| Limites par utilisateur | |||
| GPUs | 16 | 8 | max |
| Jobs (soumis + actifs) | 100000 | 20 | 100000 |
La durée maximale est exprimée en heures-GPU : pour le QoS gpu-big cela signifie que la durée maximale d'un job mono-GPU est de 384 heures, tandis que les jobs avec 2, 4, 8 GPUs ne pourront pas dépasser une durée de 192, 96, 48 heures respectivement.
Les cartes accélératrices
Le cluster est équipé de 34 GPUs NVIDIA de 4 modèles différents:
| Modèle | GeForce RTX2080 Ti | A100 80GB PCIe | A100-SXM4-80GB | L40S |
|---|---|---|---|---|
| Ressource (gres) | RTX2080 | A100-80G | A100-HGX-80G | L40S |
| Nœuds | 1 (turing-07-02) | 1 (ampere-d06-01) | 1 (golgoth-d06-01) | 11 (ares-c02-[01-06],ares-d02-[01-05]) |
| GPUs/nœud | 2 | 2 | 8 | 2 |
| CPU | 2x20 cœurs (Intel Xeon® Gold 6148) | 2x16 cœurs (Intel Xeon® Silver 4314) | 2x64 cœurs (AMD EPYC™ 7763) | 2x24 cœurs (AMD EPYC™ 9254) |
| Mémoire (CPU) | 320 Go | 256 Go | 4 To | 386 Go |
Pour se faire une idée des capacités de chaque carte sans rentrer dans les détails techniques, le tableau suivant montre la puissance crête théorique (en téraFLOPS) selon le type d'opérations.
| Modèle | GeForce RTX2080 Ti | A100 80GB-PCIe | A100 80GB-SXM4 | L40S |
|---|---|---|---|---|
| CUDA core téraFLOPS | ||||
| FP64 (précision double) | 0.42 | 9.7 | 9.7 | 1.4 |
| FP32 (précision simple) | 13.4 | 19.5 | 19.5 | 91.6 |
| FP16 (demi-précision) | 26.9 | 78 | 78 | 91.6 |
| Tensor core téraFLOPS | ||||
| FP64 | - | 19.5 | 19.5 | - |
| TF32 | - | 156 | 156 | 183 |
| FP16 | 107 | 312 | 312 | 366 |
| BFloat16 | - | 312 | 312 | 366 |
| FP8 | - | - | - | 733 |
Il en ressort clairement que les gpu:RTX2080 et gpu:L40S ne sont pas adaptés aux calculs scientifiques en double précision.
Si votre calcul se fait en double précision (FP64) il faut utiliser les cartes A100.
En effet, les cartes gpu:RTX2080 et gpu:L40S sont des GPUs IA qui n'ont pas été conçus pour le calcul scientifique en double précision. Comme le montre le tableau suivant, chaque "Streaming multiprocessor" de ces cartes n'embarque que 2 cœurs FP64 qui ont été inclus uniquement par souci de compatibilité.
| Modèle | GeForce RTX2080 Ti | A100 80GB-PCIe | A100 80GB-SXM4 | L40S |
|---|---|---|---|---|
| Microarchitecture | Turing (TU102) | Ampere (GA100) | Ampere (GA100) | Ada (AD102) |
| CUDA compute capability | 7.5 | 8.0 | 8.0 | 8.9 |
| #Transistors | 18.6 millards | 54.2 millards | 54.2 millards | 76.3 millards |
| Streaming multiprocessors (SM) | 68 | 108 | 108 | 144 |
| FP32 CUDA cores | 4352 (64/SM) | 6912 (64/SM) | 6912 (64/SM) | 18176 (128/SM) |
| FP64 CUDA cores | 172 (2/SM) | 3456 (32/SM) | 3456 (32/SM) | 288 (2/SM) |
| TensorCores | 544 (8/SM) - Gen2 | 432 (4/SM) - Gen3 | 432 (4/SM) - Gen3 | 568 (4/SM) - Gen4 |
| Mémoire | 11 Go GDDR6 | 80 Go HBM2 | 80 Go HBM2 | 48 Go GDDR6 |
| Bande passante mémoire GPU (Go/s) | 616 | 1935 | 2039 | 864 |
| L2 Cache | 5.5 Mo | 40 Mo | 40 Mo | 96 Mo |
| L1 Cache | 96 ko/SM | 192 ko/SM | 192 ko/SM | 128 ko/SM |
Les schémas suivants illustrent les "Streaming multiprocessors" des GPUs de type Turing (TU102), Ampere (GA100) et Ada (AD102). La différence la plus notable est la présence de cœurs FP64 pour les calculs en double précision dans l'architecture Ampere.


