Aller au contenu principal

Accélérateurs

Le cluster HPC est équipé de 34 GPUs NVIDIA (2 RTX2080Ti, 10 A100 et 22 L40S). Ici vous trouverez

Réserver des GPUs

Attention

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 :

BUG

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>

  • <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 être
    • RTX2080,A100-80G,A100-HGX-80G ou L40S (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>

  • <nombre> est le nombre total de GPUs.
  • <gpu-type> peut être
    • RTX2080,A100-80G,A100-HGX-80G ou L40S (voir cette liste)
    • Non spécifié. Une reservation avec --gpus=2 est équivalent à --gres=gpu:2 dé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 gpuai regroupe 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 gpu64 regroupe les cartes équipés de cœurs de calcul double précision (FP64).
attention

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 (--gres ou --gpus)
  • ou la partition cible (--partition)
  • ou bien les deux, si compatible.

Par exemple

--gres=--gpus=--partition=Ressource demandée
gpu:11gpu64A100-80G ou A100-HGX-80GB
gpu:22gpuai2x(RTX2080 ou L40S)
gpu:11gpuai, gpu64GPU indifférent
gpu:RTX2080RTX2080-RTX2080
gpu:RTX2080RTX2080gpuaiRTX2080
gpu:11 -requête invalide (ni type, ni partition)
-- gpu64requête invalide (gres/gpu non spécifié)
gpu:L40SL40Sgpu64requê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
QoSgpu-defaultgpu-biggpu-small
Limites par job
Walltime48 heures-GPU384 heures-GPU2 heures-GPU
GPUs181
Mémoire128Gmax128G
CPUs16max16
Limites par utilisateur
GPUs168max
Jobs (soumis + actifs)10000020100000

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èleGeForce RTX2080 TiA100 80GB PCIeA100-SXM4-80GBL40S
Ressource (gres)RTX2080A100-80GA100-HGX-80GL40S
Nœuds1 (turing-07-02)1 (ampere-d06-01)1 (golgoth-d06-01)11 (ares-c02-[01-06],ares-d02-[01-05])
GPUs/nœud2282
CPU2x20 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 Go256 Go4 To386 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 TiA100 80GB-PCIeA100 80GB-SXM4L40S
CUDA core téraFLOPS
FP64 (précision double)0.429.79.71.4
FP32 (précision simple)13.419.519.591.6
FP16 (demi-précision)26.9787891.6
Tensor core téraFLOPS
FP64-19.519.5-
TF32-156156183
FP16107312312366
BFloat16-312312366
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.

attention

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èleGeForce RTX2080 TiA100 80GB-PCIeA100 80GB-SXM4L40S
MicroarchitectureTuring (TU102)Ampere (GA100)Ampere (GA100)Ada (AD102)
CUDA compute capability7.58.08.08.9
#Transistors18.6 millards54.2 millards54.2 millards76.3 millards
Streaming multiprocessors (SM)68108108144
FP32 CUDA cores4352 (64/SM)6912 (64/SM)6912 (64/SM)18176 (128/SM)
FP64 CUDA cores172 (2/SM)3456 (32/SM)3456 (32/SM)288 (2/SM)
TensorCores544 (8/SM) - Gen2432 (4/SM) - Gen3432 (4/SM) - Gen3568 (4/SM) - Gen4
Mémoire11 Go GDDR680 Go HBM280 Go HBM248 Go GDDR6
Bande passante mémoire GPU (Go/s)61619352039864
L2 Cache5.5 Mo40 Mo40 Mo96 Mo
L1 Cache96 ko/SM192 ko/SM192 ko/SM128 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.

turingSMampereSM
adaSM