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:
utilisation de notebook IPython pour le test et la mise au point des méthodes avec des calculs courts (< à 10 minutes)
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)
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:
nvidia-smi
utilitaire nvidia pour afficher les GPU et les programmes utilisant les GPUnvidia-htop.py
utilitaire qui affiche en plus le nom des utilisateurs des programmes
Pour les utiliser, il suffit:
soit d’ouvrir un terminal et tapez le nom de la commande
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:
un environnement TensorFlow [Tensorflow, 2024]
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:
pour TensorFlow, entrez la commande suivante:
source /var/lib/jupyterhub/venvs/tf/bin/activate
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)
tensorflow 2.16.1 (bibliothèque de ML optimisée pour GPU)
tensorboard 2.16.2 (outil d’analyse pour l’apprentissage en ML)
scikit-learn 1.6.1 (bibliothèque de ML générale)
torch 2.6.0 (bibliothèque de ML optimisée pour GPU)
pandas 1.4.3 (gestion de base de données)
seaborn 0.13.2 (bibliothèque de tracé statistique)
keras 3.8.0 (interface simplifiée pour du ML avec tensorflow ou torch)
jax 0.4.30 (JAX Python library for accelerator-oriented array computation and program transformation optimized on GPU)
pycuda 2024.1.2 (programmation CUDA avec python)
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)
