Retour d’expériences sur l'évaluation avec Jupyter¶

Octobre 2024

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

Introduction¶

Contexte personnel¶

Tombé jeune dans la marmite du logiciel libre et de Linux et fan des (Monty) "Python"

Richard Stallman GNU Monty-Python (silly walk) 1991 Noyau Linux 1992 (20x3"1/2)

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

Approche et Philosophie¶

  • Adaptation des outils à ma pédagogie et non l'inverse

    • expertise en informatique (ordinateur, programmation, HPC)
  • Approche KISS de la Philosophie d'Unix

    • Keep it Simple, Stupid
  • Suivre le ZEN du python

    • Simple is better than complex
In [1]:
import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Choix de la solution¶

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
  • Mise a jour automatique avec GitLab

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 avec une convention internationale annuelle JupyerCon

  • Présentation de la solution de gestion de cours à la JupyterCon (Paris mai 2023)

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)
  • un alternant Sylvère Kanapa : étude solution openstack pour la gestion des VM

Infrastructure actuelle au CISR : gestion des VM avec KVM

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

Bilan d'utilisation¶

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

Utilisation de la 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. écriture de livres de cours avec Jupyter-Book

  5. évaluation des étudiants

  6. formation en IA avec GPU

    Présentation au JCAD Nov. 2024, et au AICOMAS Paris Fev. 2025

Exemple de cours¶

Cours de L2: outils mathématiques et numériques (Python) pour la mécanique (6 ECTS)

  • serveur l2-nbgarder
  • utilisation des notebooks Jupyter
    1. pour le cours
    2. pour les TP
    3. pour les examens de TP
    4. pour un livre de cours avec JupyterBook
      • Jupyter-book : programmation scientifique avec Python

Attention j'utilise aussi le tableau et la craie, et je pousse mes étudiants à écrire des notes avec du papier et un crayon, et à venir en TP en salle informatique avec du papier et un crayon !!

Utilisations pédagogiques¶

L'approche pédagogique "learning by doing"

What comes first, "using" or "understanding"? The natural mode of learning is to first use, leading slowly to understanding. (Seymour Papert)

  1. Apprentissage d'une méthode (et pas d'un langage)
    • en privilégiant une approche algorithmique
    • et l'utilisant approche scientifique (rigueur, validation)
  2. Maîtrise de l'utilisation de l'informatique scientifique
    • pour du traitement de données
    • pour comprendre la modélisation et la simulation
    • pour l'analyse des données d'expériences ou de simulation
  3. Apprentissage pas forcement axé sur le développement de code

Utilisation de la plateforme pour l'évaluation des étudiants¶

Besoins pédagogiques¶

  1. aide pour les étudiants (validation du code)
  2. évaluation des TP des étudiants : notebook , code et compte rendus
  3. détection du plagiat
  4. notation automatique du code
  5. choix et évaluation d'exercices choisis dans une bibliothèque d'exercice (avec son test de validation)
  6. examen de TP sur ordinateur en condition contrôlée (i.e. sans accès internet)

Utilisation de tests dans un notebook¶

principe: inclure des tests dans la cellule sous le code à évaluer

  • principe des tests unitaires (bibliothèque unittest)
  • utilisation de la fonction python assert()

attention tests d'évaluation $\neq$ test de validation de code

  • le test ne doit pas fournir la solution !
  • test si les étudiants utilisent ou n'utilisent pas des fonctions de librairie
  • test les sorties graphiques (plot)
  • détection du plagiat entre étudiants
  • attention aux erreurs d'arrondies
  • l'imagination des étudiants est débordante $\leadsto$ boucle infinie, serveur jupyter en boucle

Exemple simple¶

In [2]:
# écrire une fonction calculant la moyenne géométrique de 3 nbres
import numpy as np
def moyenne_geo(a,b,c):
    val = (a*b*c)**(1./3)
    return val
In [3]:
assert(moyenne_geo(1,2,4) == 2.)
In [4]:
# test plus complet
def valide_moyenne_geo():
    a = 10*np.random.rand()
    b = 10*np.random.rand()
    c = 10*np.random.rand()
    return np.equal(moyenne_geo(a,b,c),(a*b*c)**(1./3))
In [5]:
assert(valide_moyenne_geo())
In [6]:
# autre version (peut etre mis dans une bib.)
def valide_exo(pge):
    for n in range(5):
        a = 10*np.random.rand()
        b = 20*np.random.rand()
        c = 30*np.random.rand()
        res = pge(a,b,c)
        if not np.equal(res,(a*b*c)**(1./3)) :
            print("Validation calcul moyenne geométrique")
            print("résultat faux pour a={} b={} c={}",ab,b,c)
            return False
    return True
In [7]:
assert(valide_exo(moyenne_geo))

Mise en oeuvre sur les serveurs nbgrader¶

Architecture d'un cours sur les serveurs Jupyter de Lyon 1

  • répertoire du cours
    • dossier source contient les notebooks pour les étudiants
      • dossier TP1 contient les fichiers pour le TP1
      • dossier TP2 ....
    • dossier lib bibliothèques pour le cours
    • dossier cours notebook documents du cours
    • dossier cours_html documentation

Menu nbgrader pour distribuer et récupérer les TP des étudiants

Interface Flask pour

  • gérer les cours
    • avec une Équipe pédagogique
    • avec une liste des étudiants
  • évaluer les étudiants
  • possibilité de configuration des cours par groupes

Type des cellules avec nbgrader

  • readonly, autograded answer, autograded test
  • définition de la solution

    • ### BEGIN SOLUTION
    • ### END SOLUTION
  • tests cachés

    • ### BEGIN HIDDEN TESTS
    • ### END HIDDEN TESTS

Tests de similarité:¶

  • objectifs : détection de plagiat entre étudiants
  • méthode pour le code : utilisation de l'indice de Levenstein et de l'indice de Jaccard pour tester la similarité entre tous les étudiants d'un cours
    • pour un notebook, on extrait le code des étudiants du fichier .ipynb
    • pour le code, on enlève les commentaires (ligne débutant par #) et les mots clés de python
  • méthode pour le texte : utilisation de SequenceMatcher()de difflib
    • L'idée de base derrière SequenceMatcher() est de trouver la plus longue sous-séquence contiguë correspondante (LCS) entre 2 textes (en enlevant des éléments : ligne vide, saut deligne, ..)
  • attention : c'est uniquement une indication !

Exemple 1 sur un notebook de test¶

mise en oeuvre de l'exemple précédent:

exercice:

  • écrire une fonction calculant la moyenne géométrique de 3 nombres

Notebook iPython :

  • test_validation.ipynb

test_validation

test_validation

Bilan d'analyse des soumissions des étudiants (cours test avec 4 étudiants)¶

bilan validation

Notation avec notation automatique, manuelle et des commentaires¶

exportation possible directe vers le système Tomuss (UCB Lyon 1) ou export en csv

bilan validation

Exemple 2¶

cours de L2 "outils numériques pour la mécanique : introduction à Python"

analyse de données pour la prédiction du réchauffement terrestre

  • TP_regression_lineaire.ipynb

cours MGC208L sur l2-nbgrader.univ-lyon1.fr

TP 05_TP_regression_linéaire:

  • https://l2-nbgrader.univ-lyon1.fr

Examens de TP¶

Objectifs

  • vérifier que les étudiants ont compris les TP et sont capable de refaire (sans documents) les petites programmes des TP
  • utilisation d'un ordinateur se connectant sur un serveur d'examen

Besoins

  • éviter la triche en se connectant sur internet
  • contrôler l'utilisation de l'ordinateur
  • examen en présentiel dans une salle avec des ordinateurs

solution

  • passage en mode plein écran en examen
  • log du passage en mode plein écran
  • log lorsque que l'on quitte se mode avec un message demandant de revenir en mode examen

serveur d'examen¶

  • serveur jupyter-exam

passage en mode examen (cours MGC2028L/EXAMPTP2)¶

Debut Examen

mode examen (cours MGC2028L/EXAMPTP2)¶

Debut Examen

quitte mode examen (cours MGC2028L/EXAMPTP2)¶

Debut Examen

log durant mode examen (cours MGC2028L/EXAMPTP2)¶

Debut Examen

Questions ?¶

quelques références:¶

  • https://jupyter.org

  • Teaching and Learning with Jupyter: https://jupyter4edu.github.io/jupyter-edu-book

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

The END¶