Science des données avec JupyterLab
Docker et JupyterLab sont deux outils puissants qui peuvent améliorer votre flux de travail en science des données. Dans ce guide, vous apprendrez à les utiliser ensemble pour créer et exécuter des environnements de science des données reproductibles. Ce guide est basé sur Supercharging AI/ML Development with JupyterLab and Docker.
Dans ce guide, vous apprendrez à :
- Exécuter un serveur Jupyter personnel avec JupyterLab sur votre machine locale
- Personnaliser votre environnement JupyterLab
- Partager votre notebook et votre environnement JupyterLab avec d'autres scientifiques des données
Qu'est-ce que JupyterLab ?
JupyterLab est une application open source construite autour du concept d'un document de notebook computationnel. Il permet de partager et d'exécuter du code, de traiter des données, de visualiser, et offre une gamme de fonctionnalités interactives pour créer des graphiques.
Pourquoi utiliser Docker et JupyterLab ensemble ?
En combinant Docker et JupyterLab, vous pouvez bénéficier des avantages des deux outils, tels que :
- La conteneurisation garantit un environnement JupyterLab cohérent sur tous les déploiements, éliminant les problèmes de compatibilité.
- JupyterLab conteneurisé simplifie le partage et la collaboration en supprimant la nécessité d'une configuration manuelle de l'environnement.
- Les conteneurs offrent une évolutivité pour JupyterLab, prenant en charge la distribution de la charge de travail et la gestion efficace des ressources avec des plateformes comme Kubernetes.
Prérequis
Pour suivre ce guide, vous devez installer la dernière version de Docker Desktop.
Exécuter et accéder à un conteneur JupyterLab
Dans un terminal, exécutez la commande suivante pour exécuter votre conteneur JupyterLab.
$ docker run --rm -p 8889:8888 quay.io/jupyter/base-notebook start-notebook.py --NotebookApp.token='my-token'
Voici les parties notables de la commande :
-p 8889:8888
: Mappe le port 8889 de l'hôte au port 8888 du conteneur.start-notebook.py --NotebookApp.token='my-token'
: Définit un jeton d'accès plutôt que d'utiliser un jeton aléatoire.
Pour plus de détails, consultez les options du serveur Jupyter et la référence CLI de docker run.
Si c'est la première fois que vous exécutez l'image, Docker la téléchargera et l'exécutera. Le temps de téléchargement de l'image dépendra de votre connexion réseau.
Une fois l'image téléchargée et exécutée, vous pouvez accéder au conteneur. Pour accéder au conteneur, dans un navigateur web, naviguez vers localhost:8889/lab?token=my-token.
Pour arrêter le conteneur, dans le terminal, appuyez sur ctrl
+c
.
Pour accéder à un notebook existant sur votre système, vous pouvez utiliser un montage de liaison. Ouvrez un terminal et changez de répertoire vers l'emplacement de votre notebook existant. Ensuite, exécutez la commande suivante en fonction de votre système d'exploitation.
$ docker run --rm -p 8889:8888 -v "$(pwd):/home/jovyan/work" quay.io/jupyter/base-notebook start-notebook.py --NotebookApp.token='my-token'
$ docker run --rm -p 8889:8888 -v "%cd%":/home/jovyan/work quay.io/jupyter/base-notebook start-notebook.py --NotebookApp.token='my-token'
$ docker run --rm -p 8889:8888 -v "$(pwd):/home/jovyan/work" quay.io/jupyter/base-notebook start-notebook.py --NotebookApp.token='my-token'
$ docker run --rm -p 8889:8888 -v "/$(pwd):/home/jovyan/work" quay.io/jupyter/base-notebook start-notebook.py --NotebookApp.token='my-token'
L'option -v
indique à Docker de monter votre répertoire de travail actuel sur /home/jovyan/work
à l'intérieur du conteneur. Par défaut, le répertoire racine de l'image Jupyter est /home/jovyan
et vous ne pouvez accéder ou enregistrer des notebooks que dans ce répertoire du conteneur.
Vous pouvez maintenant accéder à localhost:8889/lab?token=my-token et ouvrir les notebooks contenus dans le répertoire monté par liaison.
Pour arrêter le conteneur, dans le terminal, appuyez sur ctrl
+c
.
Docker a aussi des volumes, qui sont le mécanisme préféré pour persister les données générées et utilisées par les conteneurs Docker. Alors que les montages de liaison dépendent de la structure de répertoires et du système d'exploitation de la machine hôte, les volumes sont entièrement gérés par Docker.
Enregistrer et accéder aux notebooks
Lorsque vous supprimez un conteneur, toutes les données de ce conteneur sont supprimées. Pour enregistrer des notebooks en dehors du conteneur, vous pouvez utiliser un volume.
Exécuter un conteneur JupyterLab avec un volume
Pour démarrer le conteneur avec un volume, ouvrez un terminal et exécutez la commande suivante :
$ docker run --rm -p 8889:8888 -v jupyter-data:/home/jovyan/work quay.io/jupyter/base-notebook start-notebook.py --NotebookApp.token='my-token'
L'option -v
indique à Docker de créer un volume nommé jupyter-data
et de le monter dans le conteneur à /home/jovyan/work
.
Pour accéder au conteneur, dans un navigateur web, naviguez vers localhost:8889/lab?token=my-token. Les notebooks peuvent maintenant être enregistrés sur le volume et seront accessibles même si le conteneur est supprimé.
Enregistrer un notebook sur le volume
Pour cet exemple, vous utiliserez l'exemple du jeu de données Iris de scikit-learn.
-
Ouvrez un navigateur web et accédez à votre conteneur JupyterLab à l'adresse localhost:8889/lab?token=my-token.
-
Dans le Lanceur, sous Notebook, sélectionnez Python 3.
-
Dans le notebook, spécifiez ce qui suit pour installer les paquets nécessaires.
!pip install matplotlib scikit-learn
-
Sélectionnez le bouton de lecture pour exécuter le code.
-
Dans le notebook, spécifiez le code suivant.
from sklearn import datasets iris = datasets.load_iris() import matplotlib.pyplot as plt _, ax = plt.subplots() scatter = ax.scatter(iris.data[:, 0], iris.data[:, 1], c=iris.target) ax.set(xlabel=iris.feature_names[0], ylabel=iris.feature_names[1]) _ = ax.legend( scatter.legend_elements()[0], iris.target_names, loc="lower right", title="Classes" )
-
Sélectionnez le bouton de lecture pour exécuter le code. Vous devriez voir un nuage de points du jeu de données Iris.
-
Dans le menu supérieur, sélectionnez Fichier, puis Enregistrer le notebook.
-
Spécifiez un nom dans le répertoire
work
pour enregistrer le notebook sur le volume. Par exemple,work/mynotebook.ipynb
. -
Sélectionnez Renommer pour enregistrer le notebook.
Le notebook est maintenant enregistré dans le volume.
Dans le terminal, appuyez sur ctrl
+ c
pour arrêter le conteneur.
Maintenant, chaque fois que vous exécutez un conteneur Jupyter avec le volume, vous aurez accès au notebook enregistré.
Lorsque vous exécutez un nouveau conteneur, et que vous exécutez à nouveau le code de traçage des données, il devra exécuter !pip install matplotlib scikit-learn
et télécharger les paquets. Vous pouvez éviter de réinstaller les paquets à chaque fois que vous exécutez un nouveau conteneur en créant votre propre image avec les paquets déjà installés.
Personnaliser votre environnement JupyterLab
Vous pouvez créer votre propre environnement JupyterLab et le construire dans une image en utilisant Docker. En construisant votre propre image, vous pouvez personnaliser votre environnement JupyterLab avec les paquets et les outils dont vous avez besoin, et vous assurer qu'il est reproductible et partageable.
Créer un Dockerfile
Pour créer votre propre image JupyterLab, vous devez créer un Dockerfile. Un Dockerfile est un fichier texte qui contient des instructions pour construire une image Docker.
-
Créez un nouveau répertoire et, dans ce répertoire, créez un fichier nommé
Dockerfile
. -
Spécifiez les instructions suivantes dans le
Dockerfile
.# syntax=docker/dockerfile:1 FROM quay.io/jupyter/base-notebook # Install the necessary packages RUN pip install matplotlib scikit-learn
Pour plus d'informations sur la création de Dockerfiles, consultez la référence Dockerfile.
Construire et exécuter l'image
-
Pour construire l'image, ouvrez un terminal et naviguez vers le répertoire contenant votre
Dockerfile
. Ensuite, exécutez la commandedocker build
suivante.$ docker build -t my-jupyter-image .
-
Exécutez le conteneur en utilisant l'image que vous venez de construire.
$ docker run -p 8889:8888 -v jupyter-volume:/home/jovyan/work my-jupyter-image start-notebook.py --NotebookApp.token='my-token'
Le conteneur démarre maintenant avec les paquets préinstallés, vous évitant ainsi de les réinstaller à chaque fois.
-
Accédez au conteneur, ouvrez votre notebook et exécutez à nouveau le code.
Le code s'exécutera sans avoir besoin de télécharger les paquets. Vous pouvez maintenant ajouter n'importe quelle bibliothèque Python dont vous avez besoin à votre Dockerfile.
Partager votre environnement JupyterLab
Une fois que vous avez votre environnement personnalisé, vous pouvez le partager avec d'autres en publiant l'image sur Docker Hub. N'importe qui peut alors tirer votre image et exécuter un conteneur avec votre environnement JupyterLab personnalisé et tous les notebooks que vous avez inclus dans l'image. Cela facilite la collaboration sur des projets de science des données et garantit que tout le monde travaille dans le même environnement.
Pour publier votre image sur Docker Hub, vous devez avoir un compte Docker et être connecté à Docker Desktop.
-
Dans un terminal, exécutez la commande
docker login
. -
Entrez votre nom d'utilisateur et votre mot de passe Docker Hub.
-
Une fois connecté, vous devez étiqueter votre image avec votre nom d'utilisateur Docker Hub.
$ docker tag my-jupyter-image your-username/my-jupyter-image
Remplacez
your-username
par votre nom d'utilisateur Docker Hub. -
Poussez l'image sur Docker Hub.
$ docker push your-username/my-jupyter-image
Remplacez
your-username
par votre nom d'utilisateur Docker Hub.
Maintenant, n'importe qui peut tirer votre image et exécuter un conteneur avec votre environnement JupyterLab personnalisé.
Conclusion
Dans ce guide, vous avez appris à utiliser Docker pour exécuter, personnaliser et partager des notebooks Jupyter. Vous avez appris à exécuter des conteneurs JupyterLab, à personnaliser votre environnement et à partager votre environnement avec d'autres. Vous pouvez maintenant utiliser Docker et JupyterLab ensemble pour créer des environnements de science des données reproductibles et partageables.
Pour en savoir plus sur les sujets abordés dans ce guide, consultez les ressources suivantes :