Journées Mathrice, Montpellier, 27-29 mars 2018

Mathrice

Notebook-mania 2

La révolution Jupyter en 2018


Jupyter

Matthieu Boileau

IRMA, CNRS, Université de Strasbourg


Licence Creative Commons

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".
  • Deux 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 plus de 100 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
    Mathrice
  • 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 say_hello():
    print("Hello!")
say_hello()

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

In [ ]:
import time
time.sleep(2)
say_hello()

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 say_hello(): print("Hello") say_hello() ```

Rendu en python :

def say_hello():
    print("Hello")
say_hello()

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 : ../patapon/stvenant.ipynb

Traitement des données

Avec pandas : ../cours-python/07-pandas.ipynb extrait de ce cours.

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 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.

Exécuter

Partage, conversion et publication peuvent être facilement assurés par une chaîne d'intégration continue telle que gitlab-ci (cf. exposé GitLab Pages).

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

Mybinder

Basé sur repo2docker.

Avantages :

  • extrêmement souple : ajout des dépendances par fichiers requirements.txt, apt.txt, environment.yml ou même Dockerfile
  • actuellement une instance gratuite (limitée en temps) !

Inconvénients :

  • pas de persistance des données

Cette présentation avec binder : https://mybinder.org/ Binder

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 une plus petite équipe

$\implies$ La solution "riche".

Usages avancés et évolution

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

Assembler

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

Vers des applications web ?

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

Cf. l'exemple shallow_water de R. J. Leveque.

Jupyterlab

  • Première publication à l'été 2017
  • destiné à remplacer le serveur jupyter classique

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 semble pleine de promesses...
Mathrice

Prêts à décoller ?