Notebook mania 2

La révolution Jupyter à l'aube de 2020


Réunion X/Stra, 13 décembre 2019


Matthieu Boileau
IRMA, CNRS, Université de Strasbourg

Introduction

Journées Mathrice, octobre 2015 à Orsay :


Mathrice
  • Thierry Dumont annonce l'entrée dans une nouvelle époque avec l'avènement des notebooks Jupyter : "mariage des technologies web, du développement et du calcul". C'était Notebook mania 1.
  • Quatre ans plus tard, où en est la révolution Jupyter ?

Si vous avez manqué Notebook mania 1

Jupyter pour Julia-Python-R.

Les points de départ :

  • le notebook Sage
  • le notebook ipython

Une brève chronologie

  • 2001 : lancement du projet IPython
  • 2006 : les notebooks Sage
  • 2011 : première version publiée du notebook IPython
  • 2011-2014 : création du projet Jupyter, ouvert à d'autres langages que Python
  • Eté 2017 : publication de Jupyterlab. Plus d'un million de notebooks Jupyter détectés sur github

L'histoire est racontée sur le blog de Fernando Perez et dans cet article de Karlijn Willems.

Les ingrédients de base

La couche web

  • tornado pour le serveur web
  • JQuery pour le javascript
  • Codemirror pour l'édition de code
  • MathJax pour le rendu LaTeX

La couche langage

Une multitude de noyaux :

  • les officiels : Python, Julia, R
  • les noyaux maintenus par la communauté : Sagemath, Cling (C++), Fortran, bash, go, etc.
  • Actuellement près de 140 noyaux communautaires ! (contre 50 à l'époque de Notebook mania 1)

Qu'est-ce qu'un notebook Jupyter ?

Une page web dynamique constituée d'une séquence de cellules de deux types :

  • cellules de texte : éditables
  • cellules de code : éditables et exécutables

On bénéficie de la techno web : texte riche, rendu des principaux formats de médias, aides en ligne, etc.

Cellules de texte

  • rendu de texte enrichi avec markdown : formattage, reconnaissance syntaxique
  • rendu $\LaTeX$ (avec MathJax)
$$e^{i\pi} + 1 = 0$$
  • images

© SNCF (source https://giphy.com)

  • vidéo/son

Note : Attention à l'ajout de contenu html/javascript qui peut créer des interactions non voulues, en particulier lors des conversions.

Cellules de code éditables et exécutables

  • le code est exécuté dans le langage du noyau
  • la sortie standard et l'erreur se fait sous la cellule
  • le compteur d'exécutions est incrémenté dans la colonne de gauche
  • avec les bibliothèques graphiques, on peut afficher et interagir avec des tracés !
In [ ]:
def dit_hopla():
    print("Hopla!")
dit_hopla()

Le compteur affiche In [*] pendant l'exécution :

In [ ]:
import time
time.sleep(2)  # attend 2 secondes
dit_hopla()

Pour les tracés, patience...

Fonctionnalités de base

Pour découvrir l'utilisation des notebooks, l'aide propose un tour guidé : Help > User interface tour.

Du point de vue utilisateur, on peut regrouper les fonctionnalités dans trois catégories :

  • Edition
  • Rendu et exécution
  • Conversion

Interaction avec le notebook

Deux modes (un peu comme dans vi) :

  • mode commande
  • mode édition

Mode édition

  • à la souris
  • au clavier : raccourcis très utiles (Help > Keyboard shortcuts)

Mode commande

  • pour se déplacer
  • pour sélectionner une ou des cellules
  • pour exécuter des cellules de code

Intérêt des notebooks pour les sciences

  • communication scientifique
  • reproductibilité
  • pédagogie
  • une interface vers des logiciels : SageMath, MatLab, codes maison, etc.
  • une chaîne de traitement documentée

Note : pour SageMath, les notebooks Sage sont désormais remplacés par les notebooks Jupyter.

Passage en revue des fonctionnalités

Le texte enrichi

Si j'écris :

```bash ls -al ```

la cellule markdown est rendue en bash :

ls -al

Maintenant :

```python def dit_hopla(): print("Hopla!") dit_hopla() ```

Rendu en python :

def dit_hopla():
    print("Hopla!")
dit_hopla()

Interopérabilité et ergonomie

Des magic commands en ligne et par cellule qui permettent d'interagir avec le système ou d'appeler d'autres langages.

In [ ]:
%lsmagic

Des exemples !

Calcul

Allons sur GPU avec PyOpenCL : orszag-tang_v100.ipynb

Traitement des données

Avec pandas : openaccessweek2019 en utilisant Binder

Enseignement des mathématiques

Un exemple très riche, le cours de Randall J. LeVeque :

On y trouve :

  • l'utilisation des widgets
  • le travail d'export de contenu dynamique vers un contenu statique propre
  • la compilation de notebooks comme chapitres d'un livre avec bookbook

Travailler en pratique avec les notebooks ?

C'est très beau, je veux travailler avec ! Comment fais-je ?...

Trois problématiques principales :

  • partager
  • convertir
  • exécuter

Mais pour quels besoins ? Enseignement ? Communication scientifique ? Calcul ? Voire calcul intensif ?

Partager

Tout est stocké dans un fichier au format texte json (y compris les sorties d'exécution) donc :

  • GitLab
  • GitHub
  • Intégration dans les sites webs : générateurs de sites statiques

Convertir

avec nbconvert, de nombreux exports sont disponibles :

  • page html
  • diaporama REVEAL.js (ce support en est un !)
  • pdf (traduit par pandoc en LaTeX puis compilé)

Le notebook peut être exécuté lors de l'export pour contenir la sortie des exécutions.

Un exemple de conversion

In [ ]:
%%bash
jupyter nbconvert --to html notebook-mania2.ipynb
ls -al notebook-mania2.html

qui produit le fichier notebook-mania2.html:

In [ ]:
import os, webbrowser
webbrowser.open_new_tab(f'file:///{os.getcwd()}/notebook-mania2.html');

Exécuter

Partage, conversion et publication peuvent être facilement assurés par une chaîne d'intégration continue telle que gitlab-ci : par exemple, ce notebook est publié sur https://boileau.pages.math.unistra.fr/notebook-mania2

Le morceau difficile, c'est l'exécution...

Les solutions

Le serveur jupyter local

Avantages :
  • pas de serveur/comptes/stockage à installer et à maintenir
  • chaque exécution est indépendante en terme de ressources
Inconvénients :
  • nécessite d'installer Jupyter côté utilisateur
  • pour Python, la suite Anaconda fait très bien ce travail pour toutes les plateformes (Windows, Mac, Linux) mais certaines dépendances spécifiques peuvent manquer
  • dès qu'on sort des distributions packagées, la diffusion se complique
  • on est limité par la ressource du poste utilisateur : CPU, mémoire, GPU, etc.

Le serveur Jupyterhub

Avantages :
  • l'utilisateur a uniquement besoin d'une connexion dans son navigateur
  • on assure une configuration matérielle et logicielle conforme aux besoins d'une session
Inconvénients :
  • L'effort pour maintenir un Jupyterhub robuste
  • Problème de l'accès concurrentiel aux ressources : le notebook est basé sur un usage interactif qui ne se prête naturellement à l'ordonnancement

logo Binder

Binder - https://mybinder.org

Basé sur repo2docker.

Avantages :
  • extrêmement souple : ajout des dépendances par fichiers requirements.txt, apt.txt, environment.yml ou même Dockerfile
  • gratuit (mais limité en temps et ressources) !
Inconvénients :
  • pas de persistance des données
  • ne gère que des notebooks publics

Un lien suffit pour tester cette présentation avec Binder.

CoCalc Logo

Cocalc - https://cocalc.com/

Avantages :
  • un très grand nombre de noyaux disponibles
  • des outils collaboratifs faciles à prendre en main
Inconvénients :
  • la ressource coûte cher
  • maintenu par petite équipe

$\implies$ La solution "riche".

logo colab

Google Colaboratory - https://colab.research.google.com

Avantages :
  • Même principe que cocalc mais entièrement gratuit
  • Accès à des ressources GPU (vGPU)
  • Les données sont hébergées sur Google Drive
  • Très facile à utiliser
Inconvénients :
  • Les données sont hébergées sur Google Drive
  • Les ressources de calcul sont limitées (mise en attente, limite de temps, etc.).

Usages avancés et évolution

Jupyterlab

  • Première publication à l'été 2017
  • destiné à remplacer le serveur jupyter classique
  • encore en consolidation : toutes les fonctionnalités des notebooks Jupyter classiques ne sont pas Jupyterlab

Un exemple : https://v100.math.unistra.fr

nbgrader

Deux modes

  • Mode local (récupération manuelle des formulaires)
  • Mode hébergé (avec JupyterHub)

Le principe

  • Encadrement de la solution par des balises
  • Auto vérification par des évaluations booléennes
  • Vérification manuelle avec possibilité d'anonymat

Les étapes

  1. Version enseignant
  2. Auto-génération de la version étudiant
  3. Publication de la version étudiant
  4. Récupération des soumissions (sans effort avec la version hébergée)
  5. Auto-évaluation
  6. Evaluation manuelle
  7. Commentaires écrits aux étudiants

La vidéo qui dit tout.

Les extensions

Elles sont nombreuses !

Attention

  • une extension dans votre instance locale n'est pas installée dans la distribution Jupyter de base et peut rendre plus difficile la distribution de vos notebooks.
  • toutes ne sont pas transférées dans Jupyterlab

Regrouper des notebooks

bookbook

  • Assembler chaque notebook comme le chapitre d'un livre
  • Références croisées entre notebooks
  • Numérotation des équations
  • Citations bibliographiques
  • export html avec animations
  • export pdf qualité impression
  • Un exemple de référence
  • Un autre exemple artisanal

Attention : projet en sommeil.

Jupyter book

logo jupyter book

  • un livre en ligne à base de notebooks
  • projet plus récent

Vers des applications web ?

Avec sa bibliothèque de widgets, Jupyter peut être vu également comme un atelier de fabrication d'applications web pour le calcul et le traitement des données.

En particulier, voila permet de transformer un notebook en une application web standalone.

Conclusion

  • Jupyter s'appuie sur la technologie du web pour l'intéractivité et la portabilité
  • Très large spectre de communautés scientifiques concernées
  • Un intérêt évident pour les mathématiques (enseignement et recherche)
  • Nécessite de posséder et de maîtriser un certain environnement matériel et logiciel
  • La planète Jupyter est pleine de promesses
Mathrice

Un Jupyterhub à l'Université de Strasbourg ?