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 workflows de machine learning (ML) sur Kubernetes, et à les rendre portables et évolutifs. L'objectif est de fournir un moyen simple de déployer les meilleurs systèmes Open Source pour le ML sur diverses infrastructures.

À quoi ressemble un déploiement Kubeflow ?

Un déploiement Kubeflow est :

  • Portable : fonctionne sur tous les clusters Kubernetes, qu'ils soient hébergés sur Google Cloud Platform (GCP), sur site ou auprès de plusieurs fournisseurs.
  • Évolutif : peut utiliser des ressources fluctuantes et n'est limité que par le nombre de ressources allouées au cluster Kubernetes.
  • Composable : amélioration des service workers permettant de travailler hors connexion ou sur des réseaux de mauvaise qualité.

Cela permet d'organiser des microservices faiblement couplés comme une seule unité et de les déployer à différents endroits, qu'il s'agisse d'un ordinateur portable ou du cloud.

Cet atelier de programmation vous explique comment créer votre propre déploiement Kubeflow à l'aide de MiniKF et 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 data science complexe à l'aide de Kubeflow Pipelines, sans utiliser de commandes CLI ni de SDK. Vous n'avez pas besoin de connaître Kubernetes ou 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 la gestion des versions et la reproductibilité des données

Points abordés

  • Installer Kubeflow avec MiniKF
  • Convertir des notebooks Jupyter en Kubeflow Pipelines sans utiliser de commandes CLI ni de SDK
  • Exécuter Kubeflow Pipelines à partir d'un notebook en un seul clic
  • Gérer automatiquement les versions de 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 du cluster

Pour trouver l'ID de votre projet, accédez au panneau de la maison 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 créée par Arrikto.

d6b423c1911ea85a.png

Cliquez sur le bouton Launch on Compute Engine (Lancer sur Compute Engine), puis sélectionnez votre projet.

b5eeba43053db4bd.png

Dans la section 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 Compute 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 l'écran suivant:

6258e0f09e46a6c2.png

Si vous utilisez Firefox, l'écran suivant s'affiche:

8cff90ce2f0670bd.png

Les utilisateurs de Safari verront l'écran suivant:

1c6fd768d71c0a92.png

Se connecter à Rok

Connectez-vous à Kubeflow et ouvrez le menu de gauche en cliquant sur l'icône à trois barres. Accédez à 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 venez de déployer MiniKF sur GCP. Vous pouvez maintenant créer des notebooks, écrire votre code de ML et exécuter Kubeflow Pipelines. Utilisez Rok pour la gestion des versions et la reproductibilité des données.

4. Exécuter un pipeline depuis votre notebook

Dans cette section, vous exécuterez l'exemple du 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 Serveurs de notebooks dans le tableau de bord central de Kubeflow.

4115cac8d8474d73.png

Cliquez sur New Server (Nouveau serveur).

f9303c0a182e47f5.png

Indiquez 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 données.

8544d9b05826b316.png

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

28c024bcc55cc70a.png

Lorsque le serveur de notebooks est disponible, cliquez sur Se 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 "Terminal", exécutez les commandes suivantes pour accéder au dossier data et télécharger le notebook et les données que vous utiliserez tout au long 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

Découvrir le code de ML du Titanic Challenge

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

bf2451fd7407e334.png

Retournez dans le 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 Refresh (Actualiser).

a21f5f563b36ce4d.png

Exécutez à nouveau la cellule avec les bibliothèques appropriées et observez l'opération.

Convertir votre notebook en pipeline Kubeflow

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

3f4f9c93b187b105.png

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

15cca32444c1f12e.png

Cliquez sur le bouton Compile and Run (Compiler et exécuter).

bde5cef34f00e258.png

Observez la progression de l'instantané.

9408f46abb2493f5.png

Observez 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 Results (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 sont en surapprentissage sur l'ensemble de données d'entraînement. Cela est probablement dû à un problème au niveau des données consommées par les modèles.

2a594032c2dd6ff6.png

Reproduire l'état précédent

Heureusement, Rok s'occupe de la gestion des versions des données et de la reproduction de l'ensemble de l'environnement 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 d'entraîner l'un des modèles et voyons ce qui se passe. Examinez l'étape randomforest, puis cliquez sur Artifacts (Artefacts).

4f25ca4560711b23.png

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

e533bc781da9355a.png

Copiez l'URL Rok.

d155d19731b5cedd.png

Accédez au lien Serveurs de notebooks.

aafeab01f3ef0863.png

Cliquez sur New Server (Nouveau serveur).

f2265a64e8f9d094.png

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

9ba4d4128a3bdeea.png

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

28c024bcc55cc70a.png

Lorsque le serveur de notebooks est disponible, cliquez sur Se connecter pour vous y connecter.

34955a64ae316de1.png

Notez que le notebook s'ouvre sur la cellule exacte correspondant à l'étape du pipeline que vous avez générée.

a1f7c81f349e0364.png

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

Déboguer l'état antérieur

Ajoutez une commande d'impression à cette cellule:

print(acc_random_forest)

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

e2a8a3b5465fcb5d.png

Voyons maintenant si les données d'entraînement présentent quelque chose d'étrange. Pour examiner et résoudre ce problème, ajoutez une cellule au-dessus du 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 étiquettes 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 les survivants 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. Vous devez donc la supprimer de l'ensemble de données d'entraînement pour que le modèle puisse apprendre des autres caractéristiques.

Ajouter une correction de bug

Pour supprimer cette colonne, modifiez la cellule en ajoutant cette commande:

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

9e76c16a862b566.png

Activez Kale et assurez-vous que la cellule qui supprime les étiquettes Survived (Survivé) fait partie de l'étape du pipeline featureengineering (ingénierie des caractéristiques) (elle doit avoir la même couleur de contour).

Exécutez à nouveau le pipeline en cliquant sur le bouton Compile and Run (Compiler et exécuter).

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

Attendez la fin de l'étape results et consultez les journaux pour afficher 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é avec succès un workflow de data science de bout en bout à l'aide de Kubeflow (MiniKF), Kale et Rok !

Et ensuite ?

Rejoignez la communauté Kubeflow:

Complément d'informations