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.
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 créée par Arrikto.
Cliquez sur le bouton Launch on Compute Engine (Lancer sur Compute Engine), puis sélectionnez votre projet.
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).
Attendez que l'instance Compute 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 l'écran suivant:
Si vous utilisez Firefox, l'écran suivant s'affiche:
Les utilisateurs de Safari verront l'écran suivant:
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.
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.
Cliquez sur New Server (Nouveau serveur).
Indiquez 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 données.
Cliquez sur Lancer pour créer le serveur de notebooks.
Lorsque le serveur de notebooks est disponible, cliquez sur Se 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 "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
.
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.
Retournez dans le terminal et installez la bibliothèque manquante.
pip3 install --user seaborn
Redémarrez le noyau du notebook en cliquant sur l'icône Refresh (Actualiser).
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.
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.
Cliquez sur le bouton Compile and Run (Compiler et exécuter).
Observez la progression de l'instantané.
Observez 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 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.
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).
Suivez les étapes de Markdown, c'est-à-dire affichez l'instantané dans l'UI de Rok en cliquant sur le lien correspondant.
Copiez l'URL Rok.
Accédez au lien Serveurs de notebooks.
Cliquez sur New Server (Nouveau serveur).
Collez l'URL Rok que vous avez copiée précédemment, puis cliquez sur le bouton Saisie automatique.
Indiquez 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 notebooks.
Lorsque le serveur de notebooks est disponible, cliquez sur Se connecter pour vous y connecter.
Notez que le notebook s'ouvre sur la cellule exacte correspondant à l'étape du pipeline que vous avez générée.
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.
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 (+).
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 é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
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.
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:
- github.com/kubeflow
- L'application Slack Kubeflow
- kubeflow-discuss@googlegroups.com
- Appel à la communauté le mardi