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 : vous permet de configurer des étapes indépendantes dans un workflow de ML complet, en choisissant parmi un ensemble organisé de frameworks et de bibliothèques de ML.
Kubeflow vous permet de rassembler des microservices faiblement couplés dans une même unité et de les déployer à différents endroits (un ordinateur portable, sur site ou dans le cloud, par exemple).
Cet atelier de programmation vous explique comment créer votre propre déploiement Kubeflow à l'aide de MiniKF, puis comment exécuter un workflow Kubeflow Pipelines avec réglage des hyperparamètres pour entraîner et diffuser un modèle. Vous effectuez toutes ces opérations à 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 réglage des hyperparamètres sur 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 avec réglage des hyperparamètres depuis 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
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-en un :

Vérifiez que vous respectez les conditions minimales suivantes :
- Assurez-vous de disposer du rôle Propriétaire pour 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.
Ouvrez votre projet GCP pré-alloué.
Pour ouvrir votre projet GCP pré-alloué, cliquez sur le bouton ci-dessous pour accéder à la console GCP et ouvrir le panneau "Accueil", 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 incluant MiniKF
Dans GCP Marketplace, recherchez "MiniKF".
Sélectionnez la machine virtuelle MiniKF d'Arrikto :

Cliquez sur le bouton LAUNCH (LANCER), puis sélectionnez votre projet :

Dans la fenêtre Configurer et déployer, choisissez un nom et une zone pour votre instance MiniKF, puis 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. Cliquez sur Snapshots (Instantanés), puis 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, exécuter des pipelines Kubeflow et utiliser Rok pour le versionnement et la reproductibilité des données.
4. Exécuter un pipeline depuis votre notebook
Dans cette section, vous allez exécuter l'exemple d'identification de race de chien, un projet du Nanodegree Udacity AI. À partir d'une image de chien, le modèle final fournira une estimation de la race du chien.
Créer un serveur de notebook dans votre cluster Kubeflow
Accédez au lien 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é l'image Docker suivante (notez que le tag d'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 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 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 ML de l'exemple d'identification des races 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 rythme depuis chez vous, n'hésitez pas à télécharger les ensembles de données.
Exécutez la cellule imports pour importer toutes les bibliothèques nécessaires. Notez que le code échoue, car il manque une bibliothèque :

Normalement, vous devez créer une image Docker pour pouvoir exécuter ce notebook en tant que pipeline Kubeflow, afin d'inclure les bibliothèques nouvellement installées. Heureusement, Rok et Kale veillent à ce que toutes les bibliothèques que vous installez pendant le développement soient intégrées à votre pipeline, grâce à la technologie de création d'instantanés de Rok et au montage de ces volumes d'instantanés dans les étapes du pipeline par Kale.
Exécutez la cellule suivante pour installer la bibliothèque manquante :

Redémarrez le noyau du notebook en cliquant sur l'icône Redémarrer :

Réexécutez la cellule imports avec les bibliothèques appropriées installées et vérifiez que l'opération réussit.
Convertir votre notebook en pipeline dans Kubeflow Pipelines
Activez Kale en cliquant sur l'icône Kubeflow dans le volet de gauche du notebook :

Activez Kale en cliquant sur le curseur du 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 de pipeline, comme indiqué par les barres de couleur à gauche des cellules, et comment une étape de pipeline peut dépendre des étapes précédentes, comme indiqué par les libellés dépend de au-dessus des cellules. Par exemple, l'image ci-dessous montre plusieurs cellules qui font partie de la même étape du pipeline. Elles sont de 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 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 du versioning des données et de la reproduction de l'ensemble de l'environnement tel qu'il était lorsque 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. Votre pipeline s'exécutera dans le même environnement que celui dans lequel vous avez développé votre code, sans avoir besoin de créer de nouvelles images Docker.

Le pipeline a été compilé et importé dans Kubeflow Pipelines. Cliquez ensuite 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, à partir de votre notebook.
5. Apprentissage par transfert avec réglage des hyperparamètres
Examiner les résultats
Examinez les journaux de l'étape cnn-from-scratch. (Cliquez sur l'étape dans le graphique de l'UI Kubeflow Pipelines, puis sur l'onglet Journaux.) C'est l'étape où vous avez entraîné un réseau de neurones convolutif (CNN) à partir de zéro. Notez que le modèle entraîné a une précision très faible et que cette étape a pris beaucoup de temps.

Consultez les journaux de l'étape cnn-vgg16. Dans cette étape, vous avez utilisé l'apprentissage par transfert sur le modèle VGG-16 pré-entraîné, un réseau de neurones entraîné par le Visual Geometry Group (VGG). La précision est beaucoup plus élevée que celle du modèle précédent, mais nous pouvons encore faire mieux.

Examinons à présent les journaux de l'étape cnn-resnet50. Dans cette étape, vous avez utilisé l'apprentissage par transfert sur le modèle ResNet-50 pré-entraîné. La précision est beaucoup plus élevée. C'est donc le modèle que vous utiliserez pour le reste de cet atelier de programmation.

Réglages d'hyperparamètres
Revenez au serveur de notebook dans l'UI Kubeflow et ouvrez le notebook nommé dog-breed-katib.ipynb (chemin d'accès : data/kale/examples/dog-breed-classification/). Dans ce notebook, vous allez exécuter des expériences de réglage des hyperparamètres sur le modèle ResNet-50 à l'aide de Katib. Notez que vous disposez d'une cellule au début du notebook pour déclarer les paramètres :

Dans le volet de gauche du notebook, activez HP Tuning with Katib (Réglage des hyperparamètres avec Katib) pour exécuter le réglage des hyperparamètres :

Cliquez ensuite sur Configurer le job 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 le job Katib) :

Suivez la progression de l'expérience Katib :

Cliquez sur Afficher pour consulter l'expérience Katib :

Cliquez sur Done (OK) pour afficher les exécutions dans Kubeflow Pipelines (KFP) :

Sur la page du test Katib, vous verrez les nouveaux essais :

Dans l'UI KFP, vous verrez les nouvelles exécutions :

Examinons ce qui vient de se passer. Auparavant, Kale produisait une exécution de pipeline à partir d'un notebook. Il crée maintenant plusieurs exécutions de pipeline, chacune étant alimentée par une combinaison d'arguments différente.
Katib est le composant de Kubeflow permettant d'exécuter des tâches de réglage d'hyperparamètres à usage général. Katib ne sait rien des jobs qu'il exécute (appelés "trials" dans le jargon Katib). Kale ne se soucie que de l'espace de recherche, de l'algorithme d'optimisation et de 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 réellement des pipelines dans Kubeflow Pipelines, puis collecte les métriques des exécutions de pipeline.
À mesure que l'expérience Katib génère des essais, vous en verrez davantage dans l'interface utilisateur Katib :

Autres exécutions dans l'UI KFP :

Une fois l'expérience Katib terminée, vous pouvez afficher tous les essais dans l'UI Katib :

Et toutes les exécutions dans l'UI KFP :

Si vous revenez au notebook, vous verrez un bouton d'informations 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 généré :

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é 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 hebdomadaire de la communauté, Slack et autres informations sur la communauté
