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.

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

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

3. Installer MiniKF
Créer une instance Compute
Dans GCP Marketplace, recherchez "MiniKF".
Sélectionnez la machine virtuelle MiniKF d'Arrikto.

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

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

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

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.

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.


Les utilisateurs de Chrome verront cet écran :

Les utilisateurs de Firefox verront l'écran suivant :

Les utilisateurs de Safari verront cet écran :

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.


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.

Cliquez sur Nouveau serveur.

Spécifiez un nom pour votre serveur de notebooks.

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.

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

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

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.

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.

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.

Revenez au terminal et installez la bibliothèque manquante.
pip3 install --user seaborn

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

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.

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.

Cliquez sur le bouton Compiler et exécuter.

Suivez la progression de l'instantané.

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

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

Attendez la fin de l'opération.


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.

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.

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

Copiez l'URL Rok.

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

Cliquez sur Nouveau serveur.

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

Spécifiez un nom pour votre notebook.

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.

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

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

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.

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 (+).

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

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

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.

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 :
- github.com/kubeflow
- Slack Kubeflow
- kubeflow-discuss@googlegroups.com
- Appel de la communauté le mardi
