1. Machine Learning sur des serveurs Jupyter avec GPU#

Utilisation de GPU sur un serveur jupyter/nbgrader

Les ressources de calcul HPC sur des serveurs de cours Jupyter/nbgrader sont partagées entre tous les utilisateurs. Il faut absolument en tenir compte lorsque que l’on execute un calcul d’IA computationnelle sur ces serveurs.

La majorité des outils d’IA utilisés sont optimisés pour utiliser au maximum toutes les ressources disponibles sur la machine, ce qui est optimal dans le cas d’un seul utilisateur par machine. Par contre dans un environnement de cours où toutes les ressources sont partagées entre tous les étudiants suivant le cours, cette stratégie est catastrophique et donc inutilisable. Pour pallier ce problème, il faut absolument mettre en place des stratégies pour le partage des ressources CPU et GPU et le partage de la mémoire du GPU dans l’environnement JupyterLab. Ces stratégies ont été décrite dans la présentation au JCAD en 2024[6]

Nous présentons dans la suite, leur mise en oeuvre dans un environnement de cours sous Jupyter/nbgrader, avec 2 utilisations:

  1. utilisation de notebook IPython pour le test et la mise au point des méthodes avec des calculs courts (< à 10 minutes)

  2. utilisation de script Python avec un système de batch (submit) pour des calculs plus longs, mais qui durent au maximum quelques heures (typiquement au maximum une heure)

  3. pour des applications qui nécessitent des temps de calcul plus long, il faut dans ce cas utiliser les ressources d’une centre de calcul HPC. Pour Lyon 1, vous pouvez demander des ressources HPC au P2CHPD[0] Demande d’accès au P2CHPD

1.1. Ressources disponibles#

Warning

Attention : le serveur fonctionne en mode partage de ressources entre tous les utilisateurs, contrairement à un centre de calcul HPC. Il est donc éssentiel que l’utilisateur connaisse les ressources disponibles et les ressources utilisées.

1.1.1. Ressources GPU#

Pour afficher les ressources GPU disponibles et utilisées, on dispose de 2 commandes Unix:

  1. nvidia-smi utilitaire nvidia pour afficher les GPU et les programmes utilisant les GPU

  2. nvidia-htop.py utilitaire qui affiche en plus le nom des utilisateurs des programmes

Pour les utiliser, il suffit:

  1. soit d’ouvrir un terminal et tapez le nom de la commande

  2. soit dans un notebook, dans une cellule python tapez la commande avec un ! devant: p.e.

!nvidia-smi 

1.1.2. Ressources disques (quota)#

L’espace disque de chaque utilisateur est limité et des quotas sont mis en place.

Pour connaitre ses quota disques, il suffit de tapez la commande suivante:

quota -vs

qui renvoie l’information sur les quotas en Mo

Disk quotas for user marc.buffat (uid 34645): 
Système fichiers   space   quota  limite  sursisfichiers   quota  limite  sursis
      /dev/vdb1    545M    600M    600M            2616       0       0   

space représente l’espace disque utilisé et quota la taille maximum autorisée.

Pour connaitre l’utilisation du disque sur son espace personnel, utiliser la commande

du --max-depth 1 -x -k ~/ | sort -rn

qui affiche la liste des dossiers avec leurs tailles en Ko, triés par taille.

557636	/home/pers/marc.buffat/
357148	/home/pers/marc.buffat/GPU
104496	/home/pers/marc.buffat/.cache
34332	/home/pers/marc.buffat/MGC2028LG1
17888	/home/pers/marc.buffat/MGC2028L
15684	/home/pers/marc.buffat/.local
11228	/home/pers/marc.buffat/.keras
10576	/home/pers/marc.buffat/IntroIA
2240	/home/pers/marc.buffat/MGC2005L

Ici la majorité de l’espace disque est utilisé par le répertoire GPU. En spécifiant dans la commande le nom de ce répertoire

du --max-depth 2 -x -k GPU | sort -rn

on obtiens la liste des fichiers avec leurs tailles en Ko

190644	GPU
181876	GPU/data/cifar-10-batches-py
181876	GPU/data
2764	GPU/.ipynb_checkpoints
28	        GPU/logs/fit
28	        GPU/logs

Dans ce cas le plus gros dossier est une base de données de machine learning cifar-10-batches-py

Enfin la commande interactive suivante ncdu (NCurses Disk Usage):

ncdu 

permet de naviguer dans votre système de fichiers en affichant leurs tailles avec les flèches du clavier.

Warning

Si vous manipulez des bases de données importantes avec vos étudiants, il faut partager ces bases de données dans l’espace dédié aux bases de données partagées (/data/DataBaseIA).
Si ces bases de données sont temporaires, il faut utiliser un espace temporaire pour stocker ces bases de données (/data/tmp).
Evitez donc de stocker vos bases de données dans votre espace personnel.

1.1.3. Ressources logicielles#

Deux environnements logiciels sont fournit par défaut:

  1. un environnement TensorFlow [Tensorflow, 2024]

  2. un environnement PyTorch [PyTorch, 2024]

Dans l’interface jupyterlab, vous pouvez choisir l’environnement lors de l’ouverture d’un notebook. En ligne de commande, dans un terminal il faut par contre sélectionner l’environnement Python choisi:

  1. pour TensorFlow, entrez la commande suivante:

source /var/lib/jupyterhub/venvs/tf/bin/activate
  1. pour PyTorch, entrez la commande suivante:

source /var/lib/jupyterhub/venvs/torch/bin/activate

Vous pouvez installer des bibliothèques particulières pour un cours dans le répertoire /lib du cours. Cela permet ensuite de les partager avec les étudiants.

1.1.4. Version des logiciels#

Pour avoir la version d’une bibliothèque python, il suffit de tapez la commande suivante

pip3 list | grep nom_bibliotheque

Versions des principales bibliothèques d’IA (debut 2025)

  1. tensorflow 2.16.1 (bibliothèque de ML optimisée pour GPU)

  2. tensorboard 2.16.2 (outil d’analyse pour l’apprentissage en ML)

  3. scikit-learn 1.6.1 (bibliothèque de ML générale)

  4. torch 2.6.0 (bibliothèque de ML optimisée pour GPU)

  5. pandas 1.4.3 (gestion de base de données)

  6. seaborn 0.13.2 (bibliothèque de tracé statistique)

  7. keras 3.8.0 (interface simplifiée pour du ML avec tensorflow ou torch)

  8. jax 0.4.30 (JAX Python library for accelerator-oriented array computation and program transformation optimized on GPU)

  9. pycuda 2024.1.2 (programmation CUDA avec python)

  10. julia 1.11.3 (Julia langage with CUDA)

1.1.5. Interface jupyterlab#

L’interface Jupyterlab permet l’accès aux différents outils disponibles:

  • pour Python: notebook et interpréteur avec tensorflow et pytorch,

  • autres langages: Julia, Octave (clone de matlab),

  • notebook C++/cling (interpéteur C++)

  • serveur X11/xpra pour exécuter des applications graphiques X11 (spyder, ..)

  • différents éditeurs dont un éditeur csv (base de données)

_images/jupyterlab.png