Utilisation des GPU

Utilisation des frameworks de Machine Learning et Deep Learning

Des frameworks de « machine learning » sont disponibles sur Osirim sous forme de conteneurs.

Afin de permettre l’utilisation de plusieurs versions de Cuda/CuDNN/Python et éviter les problèmes de dépendances et les conflits entre librairies de machine learning, chaque framework s’exécute dans un conteneur dédié. Bien que Docker soit la solution de conteneurisation la plus répandue, nous utilisons sur Osirim Singularity, solution de conteneurisation adaptée aux clusters de calcul. https://www.sylabs.io/docs/

Les images Singularity (.SIF) des frameworks sont bâties sur des images Ubuntu 16.04 et 18.04 et sont disponbles sur /logiciels/containerCollections/

Frameworks disponibles :

Nom du conteneur OS CUDA CuDNN Tensorflow Keras Theano Pytorch Contents
CUDA 9                
keras-tf.sif Ubuntu 16.04 9.0 7.1.2 1.12.0 2.2.4      
keras-th.sif Ubuntu 16.04 9.0 7.1.2   2.2.4 1.0.3    
pytorch.sif Ubuntu 16.04 7.5 5.1       0.2.0  
pytorch_1.0.1.sif Ubuntu 16.04 9.0 7.4.2       1.0.1  
tf.sif Ubuntu 16.04 9.0 7.1.2 1.12.0        
th.sif Ubuntu 16.04 9.2 7.1.2     1.0.3    
vanilla_9.0.sif Ubuntu 16.04 9.0 7.1.2          
vanilla_9.2.sif Ubuntu 16.04 9.2 7.1.2          
CUDA 10                
keras-tf.sif Ubuntu 18.04 10.0 7.1.4 1.13.1 2.2.4      
keras-tf-NGC-19-07.sif Ubuntu 18.04 10.1 7.6.1 1.14.0 2.2.5     Release Notes
tf2-NGC-19-11-py3.sif Ubuntu 18.04 10.2 7.6.5 2.0.0 2.3.1     Release Notes
tf1-NGC-20-03-py3.sif Ubuntu 18.04 10.2 7.6.5 1.15.2 2.4.3     Release Notes
tf2-NGC-20-03-py3.sif Ubuntu 18.04 10.2 7.6.5 2.1.0 2.4.3     Release Notes
pytorch.sif Ubuntu 18.04 9.0 7.1.2       0.4.0  
pytorch-NGC-19-07.sif Ubuntu 18.04 10.1 7.6.1       1.2.0 Release Notes
pytorch-NGC-19-11-py3.sif Ubuntu 18.04 10.2 7.6.5       1.4.0 Release Notes
pytorch-NGC-20-03-py3.sif Ubuntu 18.04 10.2 7.6.5       1.5.0 Release Notes
tf.sif Ubuntu 18.04 10.0 7.1.4 1.13.1        
vanilla_10.0.sif Ubuntu 18.04 10.0 7.1.4          
CUDA 11                
tf1-NGC-20-06-py3.sif Ubuntu 18.04 11.0 8.0.1 1.15.2 2.4.3     Release Notes
tf2-NGC-20-06-py3.sif Ubuntu 18.04 11.0 8.0.1 2.2.0 2.4.3     Release Notes
pytorch-NGC-20-06-py3.sif Ubuntu 18.04 11.0 8.0.1       1.6.0 Release Notes

L’exécution d’un conteneur singularity s’effectue via la commande ‘singularity exec’ suivie de l’image du conteneur et du traitement à exécuter dans le conteneur.:

module purge
module load singularity/3.0.3
singularity exec /logiciels/containerCollections/CUDA10/tf.sif $HOME/mon_code.sh

A noter que les variables d’environnement de l’utilisateur sont disponibles dans les conteneurs ainsi que les répertoires /users /projets et /logiciels
 

Utiliser les frameworks dans un Batch Slurm :

Les frameworks disponibles ont la capacité de s’exécuter sur CPUs ou GPUs. Vous pouvez donc exécuter les conteneurs avec Slurm sur n’importe quelle partition d’OSIRIM: ‘24CPUNodes’, '48CPUNodes', ‘64CPUNodes’, ‘GPUNodes' ou 'RTX6000Node'.

Dans les exemples ci-dessous, nous souhaitons tirer parti des GPUs, et exécutons les traitements sur la partition ‘GPUNodes’. Pour indiquer à Slurm que nous souhaitons utiliser des GPUs, 2 paramètres sont à mentionner impérativement :

#SBATCH --gres=gpu:1  (le nombre de cartes que l’on souhaite utiliser, 4 max par serveur)
#SBATCH --gres-flags=enforce-binding

 

Exemples d'utilisation des frameworks Tensorflow et Keras :

Contenu de slurm_job_tf.sh pour l’exécution de Tensorflow :

#!/bin/sh

#SBATCH --job-name=GPU-Tensorflow-Singularity-Test
#SBATCH --output=ML-%j-Tensorflow.out
#SBATCH --error=ML-%j-Tensorflow.err
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --partition=GPUNodes
#SBATCH --gres=gpu:1
#SBATCH --gres-flags=enforce-binding

module purge
module load singularity/3.0.3 
srun singularity exec /logiciels/containerCollections/CUDA10/tf.sif python2 "$HOME/tf-script.py"

Exécution : [bob@co2-slurm-client ~]$  sbatch slurm_job_tf.sh

Contenu de slurm_job_ke.sh pour l’exécution de Keras sur theano :

#!/bin/sh

#SBATCH --job-name=GPU-keras-Singularity-Test
#SBATCH --output=ML-%j-keras.out
#SBATCH --error=ML-%j-keras.err
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --partition=GPUNodes
#SBATCH --gres=gpu:1
#SBATCH --gres-flags=enforce-binding

module purge
module load singularity/3.0.3
srun singularity exec /logiciels/containerCollections/CUDA9/keras-th.sif python3 "$HOME/tf-script.py"

Exécution : [bob@co2-slurm-client ~]$  sbatch slurm_job_ke.sh

 

Installation de packages supplémentaires :

Les conteneurs Singularity encapsulent des frameworks spécifiques de Deep Learning et Machine Learning sous les deux versions de python 3 et 2. Mais il se peut que vous souhaitiez utiliser des bibliothèques non disponibles par défaut dans les conteneurs mis à votre disposition.

Pour installer des packages complémentaires, vous pouvez pour cela utiliser virtualenv, pip ou conda.

  • Pour Python 2 utilisez les logiciels suivants : conda2, pip2 et virtualenv2
  • Pour Python 3 utilisez les logiciels suivants : conda3, pip3 et virtualenv3

Voici ci-dessous la procédure à suivre :

Tout d’abord, vous devez créer un environnement virtuel à partir de votre $HOME directory, en ouvrant un shell dans le conteneur :


$ module purge
$ module load singularity/3.0.3
$ singularity shell /logiciels/containerCollections/CUDA10/tf.sif

(tf.sif) → $ virtualenv2 --system-site-packages $HOME/ENVNAME
## Ou par CONDA,
(tf.sif) → $ conda2 create -n ENVNAME python=2.7

Le paramètre --system-site-packages vous permettra d’utiliser dans le virtualenv tous les packages déjà installés avec le python utilisé pour installer le vrtualenv (Python 2 dans l’exemple).

Ensuite, une fois l’environnement virtuel créé, vous pouvez installer les packages voulus (exemple avec le package Shogun de Reinforcement Learning Package):


$ module purge
$ module load singularity/3.0.3
$ singularity shell /logiciels/containerCollections/CUDA10/tf.sif
(tf.sif) → $ conda2 activate  ENVNAME
(tf.sif) → $ conda2 install -c conda-forge shogun

Enfin, vous pouvez utiliser les nouveaux packages dans vos traitements à partir d’un job SLURM :

Exécution : [bob@co2-slurm-client ~]$  sbatch slurm_job_shogun.sh

Contenu de slurm_job_shogun.sh :

#!/bin/sh
 
#SBATCH --job-name=GPU-shogun-Singularity-Test
#SBATCH --output=ML-%j-shogun.out
#SBATCH --error=ML-%j-shogun.err
 
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --partition=GPUNodes
#SBATCH --gres=gpu:4
#SBATCH --gres-flags=enforce-binding
 
module purge
module load singularity/3.0.3
srun singularity exec /logiciels/containerCollections/CUDA10/tf.sif $HOME/ENVNAME/bin/python "$HOME/shogun-script.py"
 
#OU, sous conda2
 
srun singularity exec /logiciels/containerCollections/CUDA10/tf.sif $HOME/conda/envs/ENVNAME/bin/python "$HOME/shogun-script.py"