Du notebook à Kubeflow Pipelines avec MiniKF et Kale

1. Introduction

Kubeflow est un kit d'outils de machine learning pour Kubernetes. Ce projet vise à simplifier le déploiement des processus de machine learning (ML) sur Kubernetes, et à les rendre portables et évolutifs. L'objectif est de proposer un outil permettant de déployer les meilleurs systèmes Open Source pour le ML sur des infrastructures diverses.

À quoi ressemble un déploiement Kubeflow ?

Un déploiement Kubeflow est :

  • Portable : compatible avec tous les clusters Kubernetes, qu'ils soient hébergés sur Google Cloud Platform (GCP), sur site ou auprès d'autres fournisseurs.
  • Évolutif : peut utiliser des ressources variables et n'est restreint que par le nombre de ressources allouées au cluster Kubernetes.
  • Composable : doté de service workers qui lui permettent de fonctionner hors connexion ou sur des réseaux de faible qualité.

Il s'agit d'un moyen d'organiser des microservices faiblement couplés dans une même unité et de les déployer à différents endroits (un ordinateur portable ou le cloud, par exemple).

Cet atelier de programmation vous expliquera comment créer votre propre déploiement Kubeflow à l'aide de MiniKF et comment exécuter un workflow Kubeflow Pipelines à partir d'un notebook Jupyter.

Objectifs de l'atelier

Dans cet atelier de programmation, vous allez créer un pipeline de science des données complexe avec Kubeflow Pipelines, sans utiliser de commandes CLI ni de SDK. Vous n'avez pas besoin de connaître Kubernetes ni Docker. À la fin de cet atelier, votre infrastructure comprendra les éléments suivants :

  • Une VM MiniKF (Mini Kubeflow) qui installe automatiquement :
  • Kubernetes (avec Minikube)
  • Kubeflow
  • Kale, un outil permettant de convertir des notebooks Jupyter à usage général en workflows Kubeflow Pipelines ( GitHub)
  • Arrikto Rok pour le versionnement et la reproductibilité des données

Points abordés

  • Installer Kubeflow avec MiniKF
  • Comment convertir vos notebooks Jupyter en pipelines Kubeflow sans utiliser de commandes CLI ni de SDK
  • Exécuter Kubeflow Pipelines à partir d'un notebook en un clic
  • Versionner automatiquement vos données dans un notebook et à chaque étape du pipeline

Prérequis

  • Un projet GCP actif pour lequel vous disposez des autorisations de propriétaire

Il s'agit d'un atelier de programmation avancé axé sur Kubeflow. Pour en savoir plus et découvrir la plate-forme, consultez la documentation Présentation de Kubeflow. Les concepts et les blocs de code non pertinents ne sont pas abordés, mais vous sont fournis afin que vous puissiez simplement les copier et les coller.

2. Configurer l'environnement

Définir l'ID de votre projet GCP et le nom de votre cluster

Pour trouver l'ID de votre projet, accédez au panneau "Accueil" de la console GCP, qui se trouve dans le menu hamburger en haut à gauche. Si l'écran est vide, cliquez sur "Oui" à l'invite pour créer un tableau de bord.

Ouvrir la console GCP

3fdc4329995406a0.png

Si le projet n'est pas déjà sélectionné, cliquez sur Sélectionner un projet :

e8952c0b96067dea.png

Sélectionnez votre projet. Vous ne devez en avoir qu'un seul :

fe25c1925487142.png

3. Installer MiniKF

Créer une instance Compute

Dans GCP Marketplace, recherchez "MiniKF".

Sélectionnez la machine virtuelle MiniKF d'Arrikto.

d6b423c1911ea85a.png

Cliquez sur le bouton Lancer sur Compute Engine, puis sélectionnez votre projet.

b5eeba43053db4bd.png

Dans la fenêtre Configure & Deploy (Configurer et déployer), choisissez un nom pour votre instance MiniKF et conservez les options par défaut. Cliquez ensuite sur le bouton Deploy (Déployer).

dc401e2bb5a884d9.png

Attendez que l'instance de calcul MiniKF démarre.

5228086caadc44c6.png

Se connecter à MiniKF

Une fois la VM MiniKF opérationnelle, connectez-vous en cliquant sur le bouton SSH. Suivez les instructions à l'écran pour exécuter la commande minikf, qui lancera le déploiement de Minikube, Kubeflow et Rok. Cette opération prend quelques minutes.

774e83c3e96cf7b3.png

Se connecter à Kubeflow

Une fois l'installation terminée et tous les pods prêts, accédez au tableau de bord MiniKF. Connectez-vous à Kubeflow à l'aide du nom d'utilisateur et du mot de passe MiniKF.

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

Les utilisateurs de Chrome verront cet écran :

6258e0f09e46a6c2.png

Les utilisateurs de Firefox verront l'écran suivant :

8cff90ce2f0670bd.png

Les utilisateurs de Safari verront cet écran :

1c6fd768d71c0a92.png

Se connecter à Rok

Après vous être connecté à Kubeflow, ouvrez le menu de gauche en cliquant sur l'icône à trois barres. Accédez au Snapshot Store et connectez-vous à Rok à l'aide du nom d'utilisateur et du mot de passe MiniKF.

a683198ac4ba900d.png

80aad6ba5d298a7e.png

Félicitations ! Vous avez déployé MiniKF sur GCP. Vous pouvez désormais créer des notebooks, écrire votre code de ML et exécuter des pipelines Kubeflow. Utilisez Rok pour le versionnage et la reproductibilité des données.

4. Exécuter un pipeline depuis votre notebook

Dans cette section, vous allez exécuter l'exemple Titanic, un concours Kaggle qui prédit quels passagers ont survécu au naufrage du Titanic.

Créer un serveur de notebooks

Accédez au lien Notebook Servers (Serveurs de notebooks) sur le tableau de bord central de Kubeflow.

4115cac8d8474d73.png

Cliquez sur Nouveau serveur.

f9303c0a182e47f5.png

Spécifiez un nom pour votre serveur de notebooks.

a2343f30bc9522ab.png

Assurez-vous d'avoir sélectionné cette image :

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

Ajoutez un volume de données vide de 5 Go et nommez-le data.

8544d9b05826b316.png

Cliquez sur Lancer pour créer le serveur de notebook.

28c024bcc55cc70a.png

Lorsque le serveur de notebook est disponible, cliquez sur Connecter pour vous y connecter.

2f06041475f45d3.png

Télécharger les données et le notebook

Un nouvel onglet s'ouvre avec la page de destination JupyterLab. Créez un terminal dans JupyterLab.

2482011174f7bc75.png

Dans la fenêtre du terminal, exécutez ces commandes pour accéder au dossier data et télécharger le notebook et les données que vous utiliserez pour le reste de l'atelier.

cd data/
git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples

Ce dépôt contient une série d'exemples sélectionnés avec des données et des notebooks annotés. Accédez au dossier data/examples/titanic-ml-dataset/ dans la barre latérale et ouvrez le notebook titanic_dataset_ml.ipynb.

c85baf68b36c63b2.png

Explorer le code de ML du défi Titanic

Exécutez le notebook étape par étape. Notez que le code échoue, car il manque une bibliothèque.

bf2451fd7407e334.png

Revenez au terminal et installez la bibliothèque manquante.

pip3 install --user seaborn

d90593b21425dd12.png

Redémarrez le noyau du notebook en cliquant sur l'icône Actualiser.

a21f5f563b36ce4d.png

Exécutez à nouveau la cellule avec les bibliothèques appropriées installées et vérifiez qu'elle fonctionne.

Convertir votre notebook en pipeline Kubeflow

Activez Kale en cliquant sur l'icône Kubeflow dans le volet de gauche.

3f4f9c93b187b105.png

Explorer les dépendances par cellule Découvrez comment plusieurs cellules peuvent faire partie d'une même étape de pipeline et comment une étape de pipeline peut dépendre des étapes précédentes.

15cca32444c1f12e.png

Cliquez sur le bouton Compiler et exécuter.

bde5cef34f00e258.png

Suivez la progression de l'instantané.

9408f46abb2493f5.png

Suivez la progression de l'exécution du pipeline.

9edbde68032f5e4b.png

Cliquez sur le lien pour accéder à l'interface utilisateur de Kubeflow Pipelines et afficher l'exécution.

a81646a22584e1b9.png

Attendez la fin de l'opération.

44bee7dc0d24ec21.png

d377b6d574a4970.png

Félicitations ! Vous venez d'exécuter un pipeline Kubeflow de bout en bout à partir de votre notebook.

5. Reproductibilité avec les instantanés de volume

Examiner les résultats

Consultez les journaux de l'avant-dernière étape du pipeline, Résultats. Notez que tous les prédicteurs affichent un score de 100 %. Un data scientist expérimenté trouverait immédiatement cela suspect. Cela indique que nos modèles ne se généralisent pas et qu'ils sont plutôt en surapprentissage sur l'ensemble de données d'entraînement. Cela est probablement dû à un problème lié aux données utilisées par les modèles.

2a594032c2dd6ff6.png

Reproduire l'état précédent

Heureusement, Rok s'occupe du versioning des données et de la reproduction de l'ensemble de l'environnement tel qu'il était au moment où vous avez cliqué sur le bouton Compiler et exécuter. Vous disposez ainsi d'une machine à remonter le temps pour vos données et votre code. Reprenons l'état du pipeline avant l'entraînement de l'un des modèles et voyons ce qui se passe. Examinez l'étape randomforest, puis cliquez sur Artefacts.

4f25ca4560711b23.png

Suivez les étapes décrites dans Markdown, c'est-à-dire affichez le snapshot dans l'UI Rok en cliquant sur le lien correspondant.

e533bc781da9355a.png

Copiez l'URL Rok.

d155d19731b5cedd.png

Accédez au lien Notebook Servers (Serveurs de notebooks).

aafeab01f3ef0863.png

Cliquez sur Nouveau serveur.

f2265a64e8f9d094.png

Collez l'URL Rok que vous avez copiée précédemment, puis cliquez sur le bouton Saisir automatiquement.

9ba4d4128a3bdeea.png

Spécifiez un nom pour votre notebook.

7685c3bf35fc74b2.png

Assurez-vous d'avoir sélectionné cette image :

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

Cliquez sur Lancer pour créer le serveur de notebook.

28c024bcc55cc70a.png

Lorsque le serveur de notebook est disponible, cliquez sur Connecter pour vous y connecter.

34955a64ae316de1.png

Notez que le notebook s'ouvre exactement au niveau de la cellule de l'étape du pipeline que vous avez générée.

a1f7c81f349e0364.png

En arrière-plan, Kale a rétabli l'état du notebook en important toutes les bibliothèques et en chargeant les variables des étapes précédentes.

Déboguer l'état précédent

Ajoutez une commande d'impression à cette cellule :

print(acc_random_forest)

Exécutez la cellule active en appuyant sur Maj+Entrée pour réentraîner la forêt aléatoire et imprimer le score. Il est de 100.

e2a8a3b5465fcb5d.png

Il est maintenant temps de vérifier si les données d'entraînement contiennent des éléments étranges. Pour explorer et résoudre ce problème, ajoutez une cellule au-dessus du code Markdown de la forêt aléatoire en sélectionnant la cellule précédente et en cliquant sur l'icône Plus (+).

d1077f32dff9620f.png

Ajoutez le texte suivant et exécutez la cellule pour imprimer l'ensemble d'entraînement.

train_df

2854798ff01aed4e.png

Petit problème… La colonne contenant les libellés d'entraînement ("Survived") a été incluse par erreur en tant que caractéristiques d'entrée. Le modèle a appris à se concentrer sur la caractéristique "Survived" et à ignorer le reste, ce qui pollue l'entrée. Cette colonne correspond exactement à l'objectif du modèle et n'est pas présente lors de la prédiction. Elle doit donc être supprimée de l'ensemble de données d'entraînement pour permettre au modèle d'apprendre à partir des autres caractéristiques.

Ajouter un correctif

Pour supprimer cette colonne, modifiez la cellule afin d'ajouter la commande suivante :

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566.png

Activez Kale et assurez-vous que la cellule qui supprime les libellés Survived fait partie de l'étape du pipeline featureengineering (elle doit avoir la même couleur de contour).

Exécutez à nouveau le pipeline en cliquant sur le bouton Compiler et exécuter.

Cliquez sur le lien pour accéder à l'interface utilisateur de Kubeflow Pipelines et afficher l'exécution.

Attendez que l'étape Résultats soit terminée, puis consultez les journaux pour voir les résultats finaux. Vous disposez désormais de scores de prédiction réalistes.

8c6a9676b49e5be8.png

6. Effectuer un nettoyage

Détruire la VM MiniKF

Accédez à Deployment Manager dans la console GCP et supprimez le déploiement minikf-1.

7. Félicitations

Félicitations, vous avez exécuté un workflow de science des données de bout en bout à l'aide de Kubeflow (MiniKF), Kale et Rok.

Et ensuite ?

Rejoignez la communauté Kubeflow :

Complément d'informations