Environnement de cours sous JupyterHub pour l'IA computationnelle¶

JCAD 2024 , Bordeaux 6 nov. 2024

Marc BUFFAT département-composante mécanique, Université Lyon 1

Introduction¶

Contexte professionnel¶

Enseignant en mécanique, modélisation numérique, calcul scientifique avec une expertise en mécanique des fluides et HPC

BesoinsMéthode
Besoin d'outils numériques adaptés à mes enseignements et mes étudiants Développement basé sur les besoins pédagogiques
Outils comme Matlab et Maple trop contraignants Utilisation de notebook Jupyter des 2015
Choix du langage Python Utilisation de Python dans ma recherche (HPC) dès 2010
Problématique environnementale Solution mutualisée éco-éfficiente

Problématique¶

Formation à l'utilisation "intelligente" des outils de l'IA en Sciences/Santé

  • Formation au "Machine Learning (ML)" pour les étudiants de Master2 en "Modélisation et Applications en Mécanique" (MAM)

  • Approche basée sur le calcul scientifique (méthode d'optimisation) et l'utilisation de Python

  • En cours/TP traitement d'applications concrètes nécessitant des ressources de calcul importantes

$\leadsto$ nécessité d'accès à des GPU et des bibliothèques optimisées

  • Mais la partie HPC ne représente qu'une partie des besoins (apprentissage)

    • Phase importante pour la constitution de la BD d'apprentissage
    • Phase importante d'analyse et de validation du modèle
    • Utilisation de la phase HPC en mode interactif

Solutions possibles¶

  1. un étudiant / un PC
  2. un étudiant / un container ou une VM sur un centre de calcul HPC
  3. les étudiants du cours partagent une VM de cours sur des infrastructures mutualisées avec un accès 24h/24h pendant tout un semestre.

Intérêt de la solution choisie¶

utilisation de VM sur des infra mutualisées avec un système de gestion de cours

  • mutualisation des ressources pour plusieurs cours ayant les mêmes besoins
  • accessible 24h/24h sur un semestre
  • accès simplifié à des BD communes, des librairies partagées
  • interaction enseignants / étudiants
  • évaluation des étudiants

problématique : utilisation et partage des ressources pour l'IA computationnelle (en particulier les GPU)

Description de la solution¶

Basée sur Logiciels libres que l'on peut étendre, adapter aux besoins et faire communiquer

Python Jupyter Flask Debian linux GitLab
  • Serveurs debian virtualisés avec un environnement virtuel python avec jupyterhub
  • Gestion de cours par année , par portail et par UE
  • Gestion de version (applications / cours .. ) avec GitLab à l'université

Basé sur l' EcoSystème Jupyter (pour l'éducation)

Ensemble d'outils open source pour l'informatique interactive et exploratoire, et une plate-forme interactive pour créer des récits informatiques

Large communauté internationale

  • Présentation JupyterCon (Paris mai 2023)

Application de gestion de cours¶

gestion cours

Infrastructure mise en place¶

Développement sur des serveurs virtualisées Debian + JupyterHub au dpt méca depuis 2015,

Dans le cadre du projet AMI INCLUDE, déploiement à Lyon 1 depuis 2022 puis à l'INSA en 2024

  • un IR Thomas DUPRIEZ (déploiement/adaptation)
  • une IE pédagogique Sarah Pollet (formation)

Infrastructure actuelle au CISR : gestion des VM avec KVM

  • 2x serveurs AMD 128 coeurs 512Go RAM (conso / serveur $\approx 300W$)
  • serveurs AMD 96 coeurs 768 Go RAM, 2 GPU AMD 2 x A40 ou 2 x A100

Bilan d'utilisation de la plateforme¶

site du projet https://jupyter.univ-lyon1.fr

  • à l'UCB Lyon 1 un serveur par année de formation

    (L1 ~ 1500 étudiants, L2 ~ 470 étudiants, L3 ~280 étudiants, M1 ~ 230 étudiants, M2 170 étudiants)

  • 7 portails (Méca, Physique, Chimie, Maths, Génie-électrique, Science de la terre, Info.)+ 1 transversal ($\leadsto$ ~3000 étudiants)

  • 31 cours (UE) ouverts avec ~ 90 enseignants dans les équipes pédagogiques

  • en 2024 1ere et 2nd année INSA de Lyon

Différentes utilisations de cette plateforme Jupyter¶

Exemples sur https://perso.univ-lyon1.fr/marc.buffat/

  1. en CM (cours) avec des notebooks de cours ( à trous)

  2. en TP à l'aide de notebooks de TP (avec de la programmation) avec des tests de validations

  3. TP virtuels (en mécanique des fluides: tube à choc, aérodynamique d'une aile

  4. évaluation des étudiants

  5. formation en IA avec GPU

  6. valorisation des ressources pédagogiques (notebook) avec l'écriture de livres de cours sous Jupyter-Book

    • Artificial Intelligence in Mechanical Engineering

Solution mise en place pour des formations en IA computationnelle¶

infrastructure matérielle serveurs AMD EPYC bisockets 256 coeurs / 796 Go mem avec ou sans GPU A40 ou A100

  1. machine virtuelle sans GPU

    • Nombre de coeurs: 64 cores / mémoire: 64 Gb
  2. machine virtuelle avec GPU gpu1-nbgrader

    • Nombre de coeurs: 28 cores / mémoire: 64 Gb

nvidia-smi

 Mon Oct 28 15:42:48 2024       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.256.02   Driver Version: 470.256.02   CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
|   0  NVIDIA A40          On   | 00000000:05:00.0 Off |                    0 |
|  0%   30C    P8    25W / 300W |     56MiB / 45634MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  NVIDIA A40          On   | 00000000:06:00.0 Off |                    0 |
|  0%   31C    P8    17W / 300W |      4MiB / 45634MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

Problème test¶

objectif: prédiction par Machine Learning du mouvement de système complexe

Modélisation du mouvement (chaotique) d'un pendule double

Méthode mise en oeuvre¶

  • création d'une base de données à partir de simulation
  • apprentissage supervisé à partir de cette base de données
    • utilisation de notebook avec PyTorch (Meta)
    • réseaux de neurones récurrents (LSTM) (série temporelle)
    • coût principal (en temps) est la phase d'apprentissage

Notebook Ipython: prediction IApendule_double

Test mono-utilisateur¶

Test sur une VM 2 x AMD EPYC 64 coeurs avec hyperthreading

  • CPU: 64 cores 62.78 Gb
  • Limite/utilisateur: c.SystemdSpawner.mem_limit = '15G' c.SystemdSpawner.cpu_limit = 10

limitation des ressources par utilisateur (serveur jupyter)

  • basé sur systemd spawner et cgroup
  • fonctionne bien pour les noyaux Python
  • permet de gérer les codes Python étudiants (qui sont très inventifs)

Exécution du notebook (phase apprentissage avec 100 iter. au lieu de 1000 )

  • ellapsed time: 380s soit 6 minutes
  • process time: 7689s soit 128 minutes (calcul multi-threadé x20)

Test multi-utilisateurs¶

VM avec AMD EPYC-Milan Processor 2. Ghz et 28 coeurs

  • un seul utilisateur: 5 minutes

    • Execution time: 291. s process time: 5773. s (x20)
  • 2 utilisateurs : 12 h

    • Execution time: 46129. s process time: 636682. s
    • Execution time: 46132. s process time: 635944. s
  • 3 utilisateurs : 25 h

    • Execution time: 92184. s process time: 844509. s
    • Execution time: 92172. s process time: 844128. s
    • Execution time: 92183. s process time: 844429. s

Bilan

  • Les bibliothèques d'IA sont optimisées pour utiliser par défaut toutes les ressources disponibles de la machine.

  • Jupyterhub avec systemd-spawner ne permet pas de limiter les ressources utilisées par ces bibliothèques.

$\Rightarrow$ Impossible d'utiliser telle quelle cette solution pour des cours "d'IA computationnelle" sur des serveurs de cours JupyterHub

Solution pour l'hyperthreading¶

On sort la phase d'apprentissage du notebook Python

  • gestion explicite du multi-threading en fixant num_threads
  • création d'une bibliothèque python apprentissageCPU.py
  • exécution hors du notebook de la phase d'apprentissage, -i.e. dans une cellule du notebook

    !python3 apprentissageCPU.py $model_file $nb_epochs $num_threads  

Test avec gestion explicite de l'hyperthreading¶

avec pytorch 2.0 et num_thread = 2

  1. avec 1 utilisateur
    • ellapsed time: 80s process time: 160s
  2. avec 10 utilisateurs
    • ellapsed time: 82s process time: 167s
  3. avec 20 utilisateurs
    • ellapsed time: 83s process time: 167s

Bilan :

dans un contexte multi-utilisateur (cours), pour des formations en IA Computationnelle sur un serveur de cours JupyterHub , il faut :

  • une gestion explicite des ressources
  • une formation des étudiants à l'utilisation de ces ressources

Cette approche plus formatrice qu'une approche sur des machines individuelles

Utilisation de VM avec GPU¶

utilisation de bibliothèques d'IA PyTorch ou PyCuda pour GPU

Problème gestion mémoire du GPU¶

  • libération de la mémoire uniquement à la fermeture de l'interpréteur
  • avec torch utilisation de 1.6 Go minimum sur le GPU
  • problème lors de l'utilisation de notebooks Ipython dans un contexte multi-utilisateur (cours)

Exécution sous la forme d'un code python de la partie apprentissage¶

création d'un script apprentissage.py (avec paramètre)

  • stockage sur disque (fichier) de la BD apprentissage
  • stockage sur fichier du modèle
  1. Utilisation de la fonction python exec():

    pble pas de changement d'interpréteur (donc pas de libération mémoire)

  2. Exécution du script dans un nouvel interpréteur

    !python3 apprentissage.py $model_file $nb_epochs $num_threads  
    
    

    c'est la solution retenue

Bilan d'utilisation en multi-utilisateurs¶

  1. cas d'un seul utilisateur
  • utilisation 1 cpu et 12% GPU et 1,254 Go mémoire
  • temps ellapsed: 105 s, process time: 104 s
  1. cas de 20 utilisateurs sur 2 GPU A40 (10 users / GPU)
  • utilisation de 20 cpu (sur 29) (à 100%) avec 48 Go mémoire / 61 Go (dispo.)
  • par GPU 100% mémoire 12,5 Go sur 45 Go (total 2 GPU)
  • temps ellapsed: 382s, process time: 378 s

Conclusion¶

Système de gestion de cours avec Jupyter Nbgrader

  • souplesse et adaptabilité de la solution
  • répond à des besoins pédagogiques variés (dans le cadre de cours)
  • utilisable pour de la formation en IA computationnelle
  • avec des notebooks IPython bien utilisés, i.e. couplés à un développement classique de bibliothèques sous jupyter lab
  • à condition d'avoir une formation des étudiants au calcul HPC et à la gestion des ressources disponibles

Questions ?¶

Quelques références:¶

  • version HTML de la présentation
  • site officiel : https://jupyter.org

  • plateforme Lyon 1 : https://jupyter.univ-lyon1.fr

  • Exemples de Notebook : https://perso.univ-lyon1.fr/marc.buffat

The END¶