Jobs GPU

Les jobs GPU sont à accès restreint. Vous devez contacter votre czar pour avoir accès à ce type de job.
Les jobs demandant l'accès aux machines GPU doivent utilisés ceux-ci de la manière la plus efficace possible.
En effet, les GPU monopolisés par un job inefficace sont perdus pour les jobs en ayant réellement besoin.
Pour vérifier si votre job utilise bien les GPU :

  • nvidia-smi vous permet de visualiser l'efficacité de vos jobs interactifs en temps réél.
  • Le cartouche de fin de job (dans le fichier d'output) vous donne des métriques liées à son efficacité sur toute la durée du job.


Ces jobs sont soumis sur CentOS 7 et la plateforme consiste en 2 types de GPU :

  • 10 Dell C4130 avec 4 GPU et 16 coeurs CPU par machine :
    • 2 Xeon E5-2640v3 (8c @2.6 Ghz)
    • 128 GB RAM
    • 2 Nvidia Tesla K80 → 4 GPU Nvidia GK210 avec 12 GB DDR5
    • InfiniBand entre les noeuds
  • 6 Dell C4140 avec 4 GPU et 20 coeurs CPU par machine :
    • 2 Xeon Silver 4114 (10c @2.2 GHz)
    • 4 NVidia Tesla V100 PCIe → 4 GPU Nvidia avec 32 GB HBM2
    • Pas d'InfiniBand


Les environnements CUDA 10.1 et OpenCL 1.2 sont disponibles dans /opt/cuda-10.1 .

CUDA est mis régulièrement à jour, mais on garde toujours disponible la version n-1 pour répondre à des besoins spécifiques. Actuellement, CUDA 9.2 est disponible dans /opt/cuda-9.2.
Pour bénéficier de logiciels indisponibles sur la ferme de calcul, ou utiliser une version antérieure, le CC-IN2P3 propose la solution de virtualisation Singularity.

Si vous devez utiliser des bibliothèques CUDA ou OpenCL, précisez dans votre script :

  • bash :
 if ! echo ${LD_LIBRARY_PATH} | /bin/grep -q /opt/cuda-10.1/lib64 ; then
       LD_LIBRARY_PATH=/opt/cuda-10.1/lib64:${LD_LIBRARY_PATH}
 fi
  • csh :
 if ($?LD_LIBRARY_PATH) then
       setenv LD_LIBRARY_PATH /opt/cuda-10.1/lib64:${LD_LIBRARY_PATH}
 else
       setenv LD_LIBRARY_PATH /opt/cuda-10.1/lib64
 endif
Cette page est dédiée uniquement à la syntaxe de soumission des jobs sur GPU. Pour une documentation plus générale sur l'utilisation su système de batch GE suivre ce lien.


Pour soumettre un job GPU, vous devez spécifier la queue GPU (par exemple “-q mc_gpu_long”), le nombre de GPUs requis (par exemple “-l GPU=2”, jusqu'à 4 GPUs sont disponibles par machine) et l'environnement multicoeurs dédié (“-pe multicores_gpu 4”).
Vous devez aussi préciser le type de GPU que vous souhaitez utiliser avec le complexe GPUtype. Les valeurs possibles pour ce complexe sont : K80 et V100 (par exemple : “-l GPUtype=K80”).

En résumé les options de qsub sont :

> qsub -l GPU=<number_of_gpus> -l GPUtype=<gpu_type> -q <QueueName> -pe multicores_gpu 4 ...  

Les queue batch disponibles sont :

  • mc_gpu_medium,
  • mc_gpu_long,
  • mc_gpu_longlasting (accès restreint).

La variable “CUDA_VISIBLE_DEVICES” est définie automatiquement. Exemple :

> qsub -l GPU=2 -l GPUtype=K80 -q mc_gpu_long -pe multicores_gpu 4 ... 

Les soumissions de jobs multicœurs doivent obligatoirement demander exactement 4 CPU (-pe multicores_gpu 4) pour être exécutables. Cependant, cette requête ne contraint pas le job, il peut donc utiliser réellement plus ou moins de 4 CPU, selon son besoin ; veuillez seulement éviter d'occuper tous les CPU d'une machine (16) si vous n'en utilisez pas tous les GPU.

Pour soumettre un job GPU parallèle, vous devez spécifier :

  • la queue:
    -q pa_gpu_long 
  • le nombre de GPU souhaités par machine
    -l GPU=x, avec 1 ≤ x ≤ 4
  • l'environnement openmpigpu_4 qui va vous servir à déterminer le nombre de machines voulues :
    -pe openmpigpu_4 x, avec x = (4 * le nombre de machines que vous souhaitez utiliser)
  • le type de GPU disponible pour les jobs parallèles est uniquement K80 :
    -l GPUtype=K80


Votre script doit contenir certaines directives propres à OpenMPI (dont le lancement de MPIEXEC), qui sont précisées dans la section jobs parallèles.

Les options sont donc :

> qsub -l GPU=<number_of_gpus_per_node> -l GPUtype=K80 -q pa_gpu_long -pe openmpigpu_4 <number_of_machines_times_4> ...

La queue disponible est pa_gpu_long (accès restreint, nécessite une demande de votre czar pour être autorisé).

Exemple :

> qsub -l GPU=3 -l GPUtype=K80 -q pa_gpu_long -pe openmpigpu_4 8 mon_script_pour_2_noeuds_et_6_GPU.sh


Les jobs GPU interactifs sont lancés avec la commande qlogin (avec les mêmes options que celles de qsub pour les jobs batch) et en choisissant la queue mc_gpu_interactive.

En résumé les options de qlogin sont :

> qlogin -l GPU=<number_of_gpus> -l GPUtype=<gpu_type> -q mc_gpu_interactive -pe multicores_gpu 4 

Exemple :

> qlogin -l GPU=1 -l GPUtype=V100 -q mc_gpu_interactive -pe multicores_gpu 4 

Les soumissions de jobs interactifs doivent obligatoirement demander exactement 4 CPU (-pe multicores_gpu 4) pour être exécutables.

Pour compiler votre code CUDA, vous devriez vous connecter sur la machine GPU interactive avec par exemple la ligne de commande suivante:

> qlogin -l GPU=1 -l GPUtype=K80 -q mc_gpu_interactive -pe multicores_gpu 4

ensuite vous serez connecté en SSH sur la machine, et là vous pourrez compiler votre code avec le compilateur nvcc:

/opt/cuda-10.1/bin/nvcc

Une fois le code compilé, nous vous conseillons de sortir de la machine interactive et soumettre vos jobs d'une cca avec qsub.

  • jobs_gpu.txt
  • Dernière modification: 2019/05/09 12:22
  • par David BOUVET