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 dans lesquelles les logiciels suivants sont installés : :
  * CUDA 9.0, 9.2 et 10
  * cuDNN 7.1 et 7.1.4
  * gcc 5.4 et cmake 3.5,
  * Miniconda pour python 2 et 3  accompagnés d’un ensemble de modules,
  * OpenCV (pour CPU et GPU)

Les images SINGULARITY (.SIF) prêtes à l'emploi sont disponbles sur /logiciels/containerCollections/

Frameworks disponibles :

Nom du conteneur OS CUDA CuDNN Tensorflow Keras Theano Pytorch
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    
pytorch.sif Ubuntu 18.04 9.0 7.1.2       0.4.0
pytorch_1.0.1.sif Ubuntu 18.04 10.0 7.4.2       1.0.1
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        

Pour en savoir plus sur les logiciels installés et disponibles dans chaque conteneur, nous vous invitons à consulter le fichier README dans les répertoires CUDA9 et CUDA10.

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.:

singularity exec /logiciels/containerCollections/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’, ‘64CPUNodes’ ou ‘GPUNodes’.

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
 
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
 
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 :

$ singularity shell /logiciels/containerCollections/CUDA9/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):

$ singularity shell /logiciels/containerCollections/CUDA9/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
 
srun singularity exec /logiciels/containerCollections/CUDA9/tf.sif $HOME/ENVNAME/bin/python "$HOME/shogun-script.py"
 
#OU, sous conda2
 
srun singularity exec /logiciels/containerCollections/CUDA9/tf.sif $HOME/conda/envs/ENVNAME/bin/python "$HOME/shogun-script.py"