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 variables et n'est limité que par le nombre de ressources allouées au cluster Kubernetes.
- Composable : vous permet de configurer des étapes indépendantes dans un workflow de ML complet, à l'aide d'une sélection de frameworks et de bibliothèques de ML.
Kubeflow vous permet d'organiser des microservices faiblement couplés en une seule unité et de les déployer à différents endroits, y compris sur un ordinateur portable, sur site ou dans le cloud.
Cet atelier de programmation vous explique comment créer votre propre déploiement Kubeflow à l'aide de MiniKF, puis exécuter un workflow Kubeflow Pipelines avec des réglages d'hyperparamètres pour entraîner et diffuser un modèle. Tout cela se fait à partir d'un notebook Jupyter.
Objectifs de l'atelier
Dans cet atelier de programmation, vous allez créer un pipeline de data science complexe avec des réglages d'hyperparamètres sur 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 avec des réglages d'hyperparamètres depuis 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
Configurer le projet GCP
Suivez les étapes ci-dessous pour créer un projet GCP ou configurer votre projet GCP existant. Si vous prévoyez d'utiliser un projet GCP existant, assurez-vous qu'il répond aux exigences minimales décrites ci-dessous. La première étape consiste à ouvrir le gestionnaire de ressources dans la console GCP.
Créez un projet ou sélectionnez un projet existant:
Vérifiez la configuration minimale requise suivante:
- Assurez-vous de disposer du rôle de propriétaire sur le projet.
- Assurez-vous que la facturation est activée pour votre projet.
- Si vous utilisez la version sans frais de GCP ou la période d'essai de 12 mois avec un crédit de 300 $, notez que vous ne pouvez pas exécuter l'installation GCP par défaut de MiniKF, car la version sans frais n'offre pas suffisamment de ressources. Vous devez passer à un compte payant.
Pour obtenir de l'aide sur la configuration d'un projet GCP, consultez la documentation GCP.
Après avoir configuré votre projet GCP, accédez directement aux instructions d'installation de MiniKF.
Ouvrir le projet GCP pré-alloué
Pour ouvrir votre projet GCP pré-alloué, cliquez sur le bouton ci-dessous afin d'accéder à la console GCP et d'ouvrir le panneau d'accueil, situé 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 avec MiniKF
Dans GCP Marketplace, recherchez "MiniKF".
Sélectionnez la machine virtuelle MiniKF créée par Arrikto:
Cliquez sur le bouton LANCER et sélectionnez votre projet:
Dans la section Configurer et Déployer, choisissez un nom et une zone 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. Cliquez sur Snapshots (Instantanés), puis 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 désormais créer des notebooks, écrire votre code de ML, exécuter Kubeflow Pipelines, et utiliser 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 d'identification des races de chiens, un projet dans le programme Udacity AI Nanodegree. À partir de l'image d'un chien, le modèle final fournira une estimation de sa race.
Créer un serveur de notebooks dans votre cluster Kubeflow
Accédez au lien 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é l'image Docker suivante (notez que le tag de l'image peut être différent):
gcr.io/arrikto/jupyter-kale:f20978e
Ajoutez un nouveau volume de données vide de 5 Go et nommez-le data.
Cliquez sur Launch (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 de 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 pour le reste de l'atelier:
cd data/ git clone https://github.com/kubeflow-kale/kale
Le dépôt cloné contient une série d'exemples sélectionnés avec des données et des notebooks annotés.
Dans la barre latérale, accédez au dossier data/kale/examples/dog-breed-classification/
et ouvrez le notebook dog-breed.ipynb
.
Explorer le code de ML de l'exemple d'identification de la race de chiens
Pour le moment, n'exécutez pas les cellules qui téléchargent les ensembles de données, car vous allez utiliser des ensembles de données plus petits inclus dans le dépôt que vous venez de cloner. Si vous exécutez cet exemple à votre propre rythme depuis chez vous, n'hésitez pas à télécharger les jeux de données.
Exécutez la cellule imports
pour importer toutes les bibliothèques nécessaires. Notez que le code échoue, car une bibliothèque est manquante:
Normalement, vous devez créer une image Docker pour pouvoir exécuter ce notebook en tant que pipeline Kubeflow et inclure les bibliothèques nouvellement installées. Heureusement, Rok et Kale s'assurent que toutes les bibliothèques que vous installez pendant le développement peuvent accéder à votre pipeline, grâce à la technologie de création d'instantanés de Rok et à l'installation de ces volumes instantanés dans les étapes du pipeline.
Exécutez la cellule suivante pour installer la bibliothèque manquante:
Redémarrez le noyau du notebook en cliquant sur l'icône Restart (Redémarrer) :
Exécutez à nouveau la cellule imports
avec les bonnes bibliothèques installées et observez l'opération.
Convertir votre notebook en pipeline dans Kubeflow Pipelines
Activez Kale en cliquant sur l'icône Kubeflow dans le volet gauche du notebook:
Activez Kale en cliquant sur le curseur dans le panneau de déploiement Kale:
Explorez les dépendances par cellule dans le notebook. Découvrez comment plusieurs cellules de notebook peuvent faire partie d'une même étape du pipeline (comme indiqué par les barres de couleur à gauche des cellules) et comment une étape du pipeline peut dépendre des étapes précédentes (comme indiqué par les libellés dépend des libellés situés au-dessus des cellules). Par exemple, l'image ci-dessous montre plusieurs cellules faisant partie de la même étape du pipeline. Ils ont la même couleur rouge et dépendent d'une étape précédente du pipeline.
Cliquez sur le bouton Compile and Run (Compiler et exécuter) :
Kale prend maintenant le relais et crée votre notebook en le convertissant en pipeline Kubeflow Pipelines. De plus, comme Kale s'intègre à Rok pour prendre des instantanés du volume de données du notebook actuel, vous pouvez suivre la progression de l'instantané. Rok s'occupe de la gestion des versions des données et de reproduire 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, et votre pipeline s'exécute dans l'environnement dans lequel vous avez développé votre code, sans avoir à créer de nouvelles images Docker.
Le pipeline a été compilé et importé dans Kubeflow Pipelines. Cliquez sur le lien pour accéder à l'interface utilisateur de Kubeflow Pipelines et afficher l'exécution.
L'interface utilisateur de Kubeflow Pipelines s'ouvre dans un nouvel onglet. Attendez la fin de l'exécution.
Félicitations ! Vous venez d'exécuter un pipeline de bout en bout dans Kubeflow Pipelines, en partant de votre notebook.
5. Apprentissage par transfert avec réglage d'hyperparamètres
Examiner les résultats
Examinez les journaux de l'étape cnn-from-scratch (cnn-from-scratch). (Cliquez sur l'étape dans le graphique de l'interface utilisateur de Kubeflow Pipelines, puis sur l'onglet Journaux.) C'est à cette étape que vous avez entraîné un réseau de neurones convolutif (CNN) à partir de zéro. Notez que la justesse du modèle entraîné est très faible et que cette étape a pris beaucoup de temps.
Consultez les journaux de l'étape cnn-vgg16. Au cours de cette étape, vous avez utilisé l'apprentissage par transfert sur le modèle pré-entraîné VGG-16, un réseau de neurones entraîné par le Visual Geometry Group (VGG). La justesse est bien supérieure à celle du modèle précédent, mais nous pouvons encore faire mieux.
Examinez maintenant les journaux de l'étape cnn-resnet50. Au cours de cette étape, vous avez utilisé l'apprentissage par transfert sur le modèle pré-entraîné ResNet-50. La précision est beaucoup plus élevée. C'est donc le modèle que vous utiliserez tout au long de cet atelier de programmation.
Réglages d'hyperparamètres
Revenez au serveur de notebooks dans votre interface utilisateur Kubeflow et ouvrez le notebook nommé dog-breed-katib.ipynb
(au chemin d'accès data/kale/examples/dog-breed-classification/
). Dans ce notebook, vous allez exécuter des tests de réglage des hyperparamètres sur le modèle ResNet-50 à l'aide de Katib. Notez que vous avez une cellule au début du notebook pour déclarer des paramètres:
Dans le volet gauche du notebook, activez Réglage des hyperparamètres avec Katib pour exécuter le réglage des hyperparamètres:
Cliquez ensuite sur Set up Katib Job (Configurer une tâche Katib) pour configurer Katib:
Définissez l'espace de recherche pour chaque paramètre et définissez un objectif:
Cliquez sur le bouton Compile and Run Katib Job (Compiler et exécuter une tâche Katib) :
Suivez la progression du test Katib:
Cliquez sur Afficher pour voir le test Katib:
Cliquez sur Done (OK) pour afficher les exécutions dans Kubeflow Pipelines (KFP):
Les nouveaux essais sont disponibles sur la page "Test" de Katib:
Les nouvelles exécutions apparaîtront dans l'interface utilisateur de KFP:
Décomposons ce qui s'est passé. Auparavant, Kale produisait une exécution de pipeline à partir d'un notebook. Désormais, il crée plusieurs exécutions de pipeline, chacune étant alimentée par une combinaison d'arguments différente.
Katib est le composant de Kubeflow qui permet d'exécuter des jobs de réglage des hyperparamètres à usage général. Katib ne sait rien des tâches qu'il exécute réellement (appelées essais dans le jargon Katib). Kale se concentre uniquement sur l'espace de recherche, l'algorithme d'optimisation et l'objectif. Katib permet d'exécuter des jobs simples (c'est-à-dire des pods) en tant qu'essais, mais Kale implémente un shim pour que les essais exécutent des pipelines dans Kubeflow Pipelines, puis collectent les métriques à partir des exécutions du pipeline.
Au fur et à mesure que le test Katib génère des essais, davantage d'essais sont disponibles dans l'interface utilisateur de Katib:
Et d'autres exécutions dans l'interface utilisateur KFP:
Une fois le test Katib terminé, vous pouvez afficher tous les essais dans l'interface utilisateur de Katib:
Toutes les exécutions dans l'interface utilisateur KFP:
Si vous revenez au notebook, vous verrez un bouton d'information juste à côté de l'expérience Katib dans le panneau Kale:
Cliquez dessus pour afficher le meilleur résultat et les paramètres qui l'ont produit:
6. Effectuer un nettoyage
Détruire la VM MiniKF
Accédez à Deployment Manager dans la console GCP et supprimez le déploiement minikf-on-gcp
.
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 de la communauté hebdomadaire, Slack et autres informations sur la communauté