Du notebook à Kubeflow Pipelines avec le réglage HP: un parcours de data science

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 :

99b103929d928576.png

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.

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 incluant MiniKF

Dans GCP Marketplace, recherchez "MiniKF".

Sélectionnez la machine virtuelle MiniKF d'Arrikto :

d6b423c1911ea85a.png

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

7d07439db939b61c.png

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

7d5f7d17a80a1930.png

Attendez que l'instance de calcul 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 cet écran :

6258e0f09e46a6c2.png

Les utilisateurs de Firefox verront l'écran suivant :

8cff90ce2f0670bd.png

Les utilisateurs de Safari verront cet écran :

1c6fd768d71c0a92.png

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.

16171f35a935a9af.png

80aad6ba5d298a7e.png

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.

60825e935fd0f39b.png

Cliquez sur Nouveau serveur.

f9303c0a182e47f5.png

Spécifiez un nom pour votre serveur de notebooks.

a2343f30bc9522ab.png

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.

8544d9b05826b316.png

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

28c024bcc55cc70a.png

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

52f1f8234988ceaa.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.

ab9ac96f1a1f0d09.png

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.

2bc436465522f65b.png

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 :

5e2b97ab2512f139.png

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 :

c483da77943a6f01.png

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

376b5203209c2c91.png

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 :

7b96241f2ab6c389.png

Activez Kale en cliquant sur le curseur du panneau de déploiement Kale :

804cfbf9d76b7e23.png

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.

fcd0fb351cdfb359.png

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

18f2f6f0e12393d5.png

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.

de1b88af76df1a9a.png

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.

e0b467e2e7034b5d.png

L'interface utilisateur de Kubeflow Pipelines s'ouvre dans un nouvel onglet. Attendez la fin de l'exécution.

21a9d54a57f3e20c.png

39e6fa39516d2773.png

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.

62bf0835e9896c67.png

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.

2b45072da65e20ae.png

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.

a1dc84ea48a87820.png

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 :

87b9f6c98dc1823e.png

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 :

a518eba74d341139.png

Cliquez ensuite sur Configurer le job Katib pour configurer Katib :

f4e34fff6a93aa60.png

Définissez l'espace de recherche pour chaque paramètre et définissez un objectif :

cfc6b7bcdc685a02.png

Cliquez sur le bouton Compile and Run Katib Job (Compiler et exécuter le job Katib) :

f9c1ab0a6a3c5e8d.png

Suivez la progression de l'expérience Katib :

f3514011876564db.png

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

ab2f5a5edd48e8dc.png

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

410a843b6f044a4b.png

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

a511dca519580133.png

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

43dd34ee2b75018d.png

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 :

3e854d3d4bb766c.png

Autres exécutions dans l'UI KFP :

ffd30dcefa739962.png

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

9096ae9caa77e42a.png

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

7acc64dfee4f35a3.png

Si vous revenez au notebook, vous verrez un bouton d'informations juste à côté de l'expérience Katib dans le panneau Kale :

95b092180d71dc80.png

Cliquez dessus pour afficher le meilleur résultat et les paramètres qui l'ont généré :

3b0ce47e548e5afb.png

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 :

Complément d'informations