Von Notebook zu Kubeflow Pipelines mit HP Tuning: Eine Data Science Journey

1. Einführung

Kubeflow ist ein Toolkit zum maschinellen Lernen (ML) für Kubernetes. Ziel des Projekts ist es, Deployments von ML-Workflows in Kubernetes einfach, portabel und skalierbar zu gestalten. Erstklassige Open-Source-Systeme für ML sollen auf einfache Weise in verschiedenen Infrastrukturen bereitgestellt werden können.

Wie sieht eine Kubeflow-Bereitstellung aus?

Ein Kubeflow-Deployment ist:

  • Portabel: Funktioniert für jeden Kubernetes-Cluster, unabhängig davon, ob er auf einem lokalen Gerät, auf der Google Cloud Platform (GCP) oder in einer anderen Cloud-Umgebung ausgeführt wird.
  • Skalierbar – Kann wechselnde Ressourcen nutzen und ist nur durch die Anzahl der Ressourcen begrenzt, die dem Kubernetes-Cluster zugewiesen sind.
  • Zusammenstellbar: Sie können unabhängige Schritte zu einem vollständigen ML-Workflow konfigurieren und dabei aus einer kuratierten Auswahl von ML-Frameworks und ‑Bibliotheken wählen.

Mit Kubeflow können Sie lose gekoppelte Mikrodienste als Einheit organisieren und an verschiedenen Standorten bereitstellen, z. B. auf einem Laptop, lokal oder in der Cloud.

In diesem Codelab erfahren Sie, wie Sie mit MiniKF Ihr eigenes Kubeflow-Deployment erstellen und dann einen Kubeflow Pipelines-Workflow mit Hyperparameter-Abstimmung ausführen, um ein Modell zu trainieren und bereitzustellen. Sie führen alle diese Schritte in einem Jupyter-Notebook aus.

Umfang

In diesem Codelab erstellen Sie eine komplexe Data-Science-Pipeline mit Hyperparameter-Optimierung in Kubeflow Pipelines, ohne CLI-Befehle oder SDKs zu verwenden. Sie benötigen keine Kubernetes- oder Docker-Kenntnisse. Am Ende enthält Ihre Infrastruktur die folgenden Komponenten:

  • Eine MiniKF-VM (Mini Kubeflow), auf der Folgendes automatisch installiert wird:
  • Kubernetes (mit Minikube)
  • Kubeflow
  • Kale, ein Tool zum Konvertieren von allgemeinen Jupyter-Notebooks in Kubeflow Pipelines-Workflows ( GitHub)
  • Arrikto Rok für die Datenversionsverwaltung und Reproduzierbarkeit

Lerninhalte

  • Kubeflow mit MiniKF installieren
  • Jupyter-Notebooks in Kubeflow-Pipelines konvertieren, ohne CLI-Befehle oder SDKs zu verwenden
  • Kubeflow Pipelines mit Hyperparameter-Abstimmung aus einem Notebook heraus mit einem Klick ausführen
  • So versionieren Sie Ihre Daten automatisch in einem Notebook und in jedem Pipelineschritt

Voraussetzungen

  • Ein aktives GCP-Projekt, für das Sie die Berechtigung „Inhaber“ haben

Dies ist ein Codelab für Fortgeschrittene, das sich auf Kubeflow konzentriert. Weitere Hintergrundinformationen und eine Einführung in die Plattform finden Sie in der Dokumentation Einführung in Kubeflow. Irrelevante Konzepte und Codeblöcke werden nicht beachtet und können einfach kopiert und eingefügt werden.

2. Umgebung einrichten

GCP-Projekt einrichten

Folgen Sie der Anleitung unten, um ein GCP-Projekt zu erstellen oder ein vorhandenes GCP-Projekt zu konfigurieren. Wenn Sie ein vorhandenes GCP-Projekt verwenden möchten, muss es die unten beschriebenen Mindestanforderungen erfüllen. Öffnen Sie zuerst den Ressourcenmanager in der GCP Console.

Erstellen Sie ein neues Projekt oder wählen Sie ein vorhandenes Projekt aus:

99b103929d928576.png

Prüfen Sie die folgenden Mindestanforderungen:

Weitere Informationen zum Einrichten eines GCP-Projekts finden Sie in der GCP-Dokumentation.

Nachdem Sie Ihr GCP-Projekt eingerichtet haben, können Sie direkt mit der Installation von MiniKF fortfahren.

Vorab zugewiesenes GCP-Projekt öffnen

Klicken Sie auf die Schaltfläche unten, um Ihr vorab zugewiesenes GCP-Projekt zu öffnen. Rufen Sie dann in der GCP Console das Startseitenfeld auf, das sich im Dreistrich-Menü oben links befindet. Wenn der Bildschirm leer ist, klicken Sie auf „Ja“, um ein Dashboard zu erstellen.

3fdc4329995406a0.png

Wenn das Projekt noch nicht ausgewählt ist, klicken Sie auf Projekt auswählen:

e8952c0b96067dea.png

Wählen Sie Ihr Projekt aus. Sie sollten nur eines haben:

fe25c1925487142.png

3. MiniKF installieren

Compute-Instanz mit MiniKF erstellen

Suchen Sie im GCP Marketplace nach „MiniKF“.

Wählen Sie die virtuelle Maschine MiniKF von Arrikto aus:

d6b423c1911ea85a.png

Klicken Sie auf die Schaltfläche STARTEN und wählen Sie Ihr Projekt aus:

7d07439db939b61c.png

Wählen Sie im Fenster Konfigurieren und bereitstellen einen Namen und eine Zone für Ihre MiniKF-Instanz aus und behalten Sie die Standardoptionen bei. Klicken Sie dann auf die Schaltfläche Deploy (Bereitstellen):

7d5f7d17a80a1930.png

Warten Sie, bis die MiniKF Compute-Instanz hochgefahren ist:

5228086caadc44c6.png

Bei MiniKF anmelden

Wenn die MiniKF-VM hochgefahren ist, klicken Sie auf die Schaltfläche SSH, um eine Verbindung herzustellen und sich anzumelden. Folgen Sie der Anleitung auf dem Bildschirm, um den Befehl minikf auszuführen. Dadurch wird die Bereitstellung von Minikube, Kubeflow und Rok gestartet. Das dauert einige Minuten.

774e83c3e96cf7b3.png

In Kubeflow anmelden

Wenn die Installation abgeschlossen ist und alle Pods bereit sind, rufen Sie das MiniKF-Dashboard auf. Melden Sie sich mit dem MiniKF-Nutzernamen und ‑Passwort bei Kubeflow an:

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

Chrome-Nutzer sehen diesen Bildschirm:

6258e0f09e46a6c2.png

Firefox-Nutzer sehen diesen Bildschirm:

8cff90ce2f0670bd.png

Safari-Nutzer sehen diesen Bildschirm:

1c6fd768d71c0a92.png

Bei Rok anmelden

Öffnen Sie nach der Anmeldung in Kubeflow das Menü auf der linken Seite, indem Sie auf das Dreistrich-Menü klicken. Klicken Sie auf Snapshots und melden Sie sich mit dem MiniKF-Nutzernamen und ‑Passwort bei Rok an.

16171f35a935a9af.png

80aad6ba5d298a7e.png

Glückwunsch! Sie haben MiniKF erfolgreich in GCP bereitgestellt. Sie können jetzt Notebooks erstellen, ML-Code schreiben, Kubeflow Pipelines ausführen und Rok für die Datenversionsverwaltung und Reproduzierbarkeit verwenden.

4. Pipeline aus einem Notebook ausführen

In diesem Abschnitt führen Sie das Beispiel zur Identifizierung von Hunderassen aus, ein Projekt im Udacity AI Nanodegree. Wenn dem endgültigen Modell ein Bild eines Hundes präsentiert wird, gibt es eine Schätzung der Hunderasse aus.

Notebook-Server in Ihrem Kubeflow-Cluster erstellen

Klicken Sie im zentralen Dashboard von Kubeflow auf den Link Notebooks.

60825e935fd0f39b.png

Klicken Sie auf Neuer Server.

f9303c0a182e47f5.png

Geben Sie einen Namen für Ihren Notebook-Server an.

a2343f30bc9522ab.png

Achten Sie darauf, dass Sie das folgende Docker-Image ausgewählt haben (das Image-Tag kann sich unterscheiden):

gcr.io/arrikto/jupyter-kale:f20978e

Fügen Sie ein neues, leeres Datenvolumen mit einer Größe von 5 GB hinzu und nennen Sie es data.

8544d9b05826b316.png

Klicken Sie auf Starten, um den Notebook-Server zu erstellen.

28c024bcc55cc70a.png

Wenn der Notebook-Server verfügbar ist, klicken Sie auf Verbinden, um eine Verbindung herzustellen.

52f1f8234988ceaa.png

Daten und Notebook herunterladen

Ein neuer Tab mit der JupyterLab-Startseite wird geöffnet. Erstellen Sie ein neues Terminal in JupyterLab.

ab9ac96f1a1f0d09.png

Führen Sie im Terminalfenster die folgenden Befehle aus, um zum Ordner data zu wechseln und das Notebook und die Daten herunterzuladen, die Sie für den Rest des Labs verwenden werden:

cd data/
git clone https://github.com/kubeflow-kale/kale

Das geklonte Repository enthält eine Reihe von kuratierten Beispielen mit Daten und annotierten Notebooks.

Rufen Sie in der Seitenleiste den Ordner data/kale/examples/dog-breed-classification/ auf und öffnen Sie das Notebook dog-breed.ipynb.

2bc436465522f65b.png

ML-Code des Beispiels zur Hunderassenidentifizierung ansehen

Führen Sie vorerst nicht die Zellen aus, mit denen die Datasets heruntergeladen werden, da Sie einige kleinere Datasets verwenden werden, die im Repository enthalten sind, das Sie gerade geklont haben. Wenn Sie dieses Beispiel zu Hause in Ihrem eigenen Tempo durcharbeiten, können Sie die Datasets herunterladen.

Führen Sie die Zelle imports aus, um alle erforderlichen Bibliotheken zu importieren. Der Code schlägt fehl, weil eine Bibliothek fehlt:

5e2b97ab2512f139.png

Normalerweise sollten Sie ein neues Docker-Image erstellen, um dieses Notebook als Kubeflow-Pipeline ausführen zu können und die neu installierten Bibliotheken einzuschließen. Glücklicherweise sorgen Rok und Kale dafür, dass alle Bibliotheken, die Sie während der Entwicklung installieren, in Ihre Pipeline gelangen. Das ist der Snapshot-Technologie von Rok und der Tatsache zu verdanken, dass Kale diese Snapshot-Volumes in die Pipeline-Schritte einbindet.

Führen Sie die nächste Zelle aus, um die fehlende Bibliothek zu installieren:

c483da77943a6f01.png

Starten Sie den Notebook-Kernel neu, indem Sie auf das Symbol Neu starten klicken:

376b5203209c2c91.png

Führen Sie die Zelle imports noch einmal aus, nachdem Sie die richtigen Bibliotheken installiert haben.

Notebook in eine Pipeline in Kubeflow Pipelines umwandeln

Aktivieren Sie Kale, indem Sie im linken Bereich des Notebooks auf das Kubeflow-Symbol klicken:

7b96241f2ab6c389.png

Aktivieren Sie Kale, indem Sie im Kale Deployment Panel (Kale-Bereitstellungsbereich) auf den Schieberegler klicken:

804cfbf9d76b7e23.png

Sehen Sie sich die Abhängigkeiten der einzelnen Zellen im Notebook an. Hier sehen Sie, wie mehrere Notebook-Zellen Teil eines einzelnen Pipelineschritts sein können (angezeigt durch Farbbalken links neben den Zellen) und wie ein Pipelineschritt von vorherigen Schritten abhängen kann (angezeigt durch das Label depends on über den Zellen). Im folgenden Bild sind beispielsweise mehrere Zellen zu sehen, die zum selben Pipelineschritt gehören. Sie haben dieselbe rote Farbe und hängen von einem vorherigen Pipeline-Schritt ab.

fcd0fb351cdfb359.png

Klicken Sie auf die Schaltfläche Kompilieren und ausführen:

18f2f6f0e12393d5.png

Jetzt übernimmt Kale und erstellt Ihr Notebook, indem es in eine Kubeflow Pipelines-Pipeline konvertiert wird. Da Kale in Rok integriert ist, um Snapshots des aktuellen Datenvolumens des Notebooks zu erstellen, können Sie den Fortschritt des Snapshots verfolgen. Rok kümmert sich um die Versionsverwaltung von Daten und die Reproduktion der gesamten Umgebung, wie sie beim Klicken auf die Schaltfläche Compile and Run (Kompilieren und ausführen) war. So haben Sie eine Zeitmaschine für Ihre Daten und Ihren Code und Ihre Pipeline wird in derselben Umgebung ausgeführt, in der Sie Ihren Code entwickelt haben, ohne dass Sie neue Docker-Images erstellen müssen.

de1b88af76df1a9a.png

Die Pipeline wurde kompiliert und in Kubeflow Pipelines hochgeladen. Klicken Sie nun auf den Link, um die Kubeflow Pipelines-Benutzeroberfläche aufzurufen und die Ausführung anzusehen.

e0b467e2e7034b5d.png

Die Kubeflow Pipelines-Benutzeroberfläche wird in einem neuen Tab geöffnet. Warten Sie, bis der Lauf abgeschlossen ist.

21a9d54a57f3e20c.png

39e6fa39516d2773.png

Glückwunsch! Sie haben gerade eine End-to-End-Pipeline in Kubeflow Pipelines ausgeführt, die in Ihrem Notebook gestartet wurde.

5. Transfer Learning mit Hyperparameter-Abstimmung

Ergebnisse ansehen

Sehen Sie sich die Logs des Schritts cnn-from-scratch an. Klicken Sie in der Kubeflow Pipelines-Benutzeroberfläche im Diagramm auf den Schritt und dann auf den Tab Logs. In diesem Schritt haben Sie ein Convolutional Neural Network (CNN) von Grund auf trainiert. Das trainierte Modell hat eine sehr geringe Genauigkeit und dieser Schritt hat sehr lange gedauert.

62bf0835e9896c67.png

Sehen Sie sich die Logs des cnn-vgg16-Schritts an. In diesem Schritt haben Sie Transfer Learning auf das vortrainierte VGG-16-Modell angewendet. Das ist ein neuronales Netzwerk, das von der Visual Geometry Group (VGG) trainiert wurde. Die Genauigkeit ist viel höher als beim vorherigen Modell, aber wir können sie noch weiter verbessern.

2b45072da65e20ae.png

Sehen Sie sich nun die Logs des Schritts cnn-resnet50 an. In diesem Schritt haben Sie Transfer Learning für das vortrainierte ResNet-50-Modell verwendet. Die Genauigkeit ist viel höher. Dieses Modell werden Sie daher für den Rest dieses Codelabs verwenden.

a1dc84ea48a87820.png

Hyperparameter-Feinabstimmung

Kehren Sie in der Kubeflow-UI zum Notebook-Server zurück und öffnen Sie das Notebook mit dem Namen dog-breed-katib.ipynb (Pfad data/kale/examples/dog-breed-classification/). In diesem Notebook führen Sie mit Katib einige Hyperparameter-Abstimmungsexperimente für das ResNet-50-Modell aus. Beachten Sie, dass Sie am Anfang des Notebooks eine Zelle haben, in der Sie Parameter deklarieren können:

87b9f6c98dc1823e.png

Aktivieren Sie im linken Bereich des Notebooks HP Tuning with Katib (Hyperparameter-Abstimmung mit Katib), um die Hyperparameter-Abstimmung auszuführen:

a518eba74d341139.png

Klicken Sie dann auf Katib-Job einrichten, um Katib zu konfigurieren:

f4e34fff6a93aa60.png

Definieren Sie den Suchbereich für jeden Parameter und ein Ziel:

cfc6b7bcdc685a02.png

Klicken Sie auf die Schaltfläche Compile and Run Katib Job (Katib-Job kompilieren und ausführen):

f9c1ab0a6a3c5e8d.png

Beobachten Sie den Fortschritt des Katib-Tests:

f3514011876564db.png

Klicken Sie auf Anzeigen, um den Katib-Test aufzurufen:

ab2f5a5edd48e8dc.png

Klicken Sie auf Fertig, um die Ausführungen in Kubeflow Pipelines (KFP) aufzurufen:

410a843b6f044a4b.png

Auf der Seite für Katib-Tests werden die neuen Testläufe angezeigt:

a511dca519580133.png

In der KFP-Benutzeroberfläche werden die neuen Ausführungen angezeigt:

43dd34ee2b75018d.png

Sehen wir uns an, was gerade passiert ist. Bisher hat Kale einen Pipeline-Lauf aus einem Notebook erstellt. Jetzt werden mehrere Pipeline-Läufe erstellt, wobei jeder mit einer anderen Kombination von Argumenten gefüttert wird.

Katib ist die Kubeflow-Komponente zum Ausführen von allgemeinen Hyperparameter-Abstimmungsjobs. Katib weiß nichts über die Jobs, die tatsächlich ausgeführt werden (im Katib-Jargon als „Trials“ bezeichnet). Kale interessiert sich nur für den Suchbereich, den Optimierungsalgorithmus und das Ziel. Katib unterstützt die Ausführung einfacher Jobs (d. h. Pods) als Tests. Kale implementiert jedoch einen Shim, damit die Tests tatsächlich Pipelines in Kubeflow Pipelines ausführen und dann die Messwerte aus den Pipelineausführungen erfassen.

Während des Katib-Tests werden in der Katib-Benutzeroberfläche weitere Testläufe angezeigt:

3e854d3d4bb766c.png

Und weitere Läufe in der KFP-Benutzeroberfläche:

ffd30dcefa739962.png

Wenn das Katib-Experiment abgeschlossen ist, können Sie sich alle Tests in der Katib-Benutzeroberfläche ansehen:

9096ae9caa77e42a.png

Alle Ausführungen in der KFP-UI:

7acc64dfee4f35a3.png

Wenn Sie zum Notebook zurückkehren, sehen Sie direkt neben dem Katib-Test im Kale-Bereich eine Infoschaltfläche:

95b092180d71dc80.png

Klicken Sie darauf, um das beste Ergebnis und die Parameter zu sehen, die dazu geführt haben:

3b0ce47e548e5afb.png

6. Bereinigen

MiniKF-VM löschen

Rufen Sie in der GCP Console Deployment Manager auf und löschen Sie das minikf-on-gcp-Deployment.

7. Glückwunsch

Sie haben erfolgreich einen End-to-End-Data-Science-Workflow mit Kubeflow (MiniKF), Kale und Rok ausgeführt.

Nächste Schritte

Der Kubeflow-Community beitreten:

Weitere Informationen