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

1. Einführung

Kubeflow ist ein Toolkit für maschinelles Lernen für Kubernetes. Ziel des Projekts ist es, Deployments von ML-Workflows auf Kubernetes einfach, portabel und skalierbar zu gestalten. Ziel ist es, eine einfache Möglichkeit zu bieten, erstklassige Open-Source-Systeme für ML in verschiedenen Infrastrukturen bereitzustellen.

Wie sieht eine Kubeflow-Bereitstellung aus?

Ein Kubeflow-Deployment ist:

  • Portabel – Funktioniert mit jedem Kubernetes-Cluster, unabhängig davon, ob er auf der Google Cloud Platform (GCP), lokal oder anbieterübergreifend ausgeführt wird.
  • Skalierbar – Kann schwankende Ressourcen verwenden und ist nur durch die Anzahl der Ressourcen eingeschränkt, die dem Kubernetes-Cluster zugewiesen sind.
  • Zusammensetzbar: Hiermit können Sie unabhängige Schritte zu einem vollständigen ML-Workflow konfigurieren und dabei aus einer Reihe ausgewählter ML-Frameworks und -Bibliotheken auswählen.

Mit Kubeflow können Sie lose gekoppelte Mikrodienste als eine 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. All das wird in einem Jupyter-Notebook erledigt.

Inhalt

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

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

Aufgaben in diesem Lab

  • Kubeflow mit MiniKF installieren
  • Jupyter-Notebooks ohne CLI-Befehle oder SDKs in Kubeflow-Pipelines konvertieren
  • Anleitung zum Ausführen von Kubeflow Pipelines mit Hyperparameter-Abstimmung aus einem Notebook per Mausklick
  • Wie Sie Ihre Daten in einem Notebook und bei jedem Pipelineschritt automatisch versionieren

Voraussetzungen

  • Ein aktives GCP-Projekt, für das Sie Inhaberberechtigungen haben

Dies ist ein erweitertes Codelab für Kubeflow. Weitere Informationen und eine Einführung in die Plattform finden Sie in der Dokumentation Einführung in Kubeflow. Nicht relevante Konzepte und Codeblöcke werden ignoriert und können einfach kopiert und eingefügt werden.

2. Umgebung einrichten

GCP-Projekt einrichten

Führen Sie die folgenden Schritte aus, um ein GCP-Projekt zu erstellen oder ein vorhandenes 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

Überprüfen Sie die folgenden Mindestanforderungen:

Weitere Informationen zur Einrichtung eines GCP-Projekts finden Sie in der GCP-Dokumentation.

Gehen Sie nach der Einrichtung Ihres GCP-Projekts direkt zur Installationsanleitung für MiniKF.

Zuvor zugewiesenes GCP-Projekt öffnen

Wenn Sie Ihr vorab zugewiesenes GCP-Projekt öffnen möchten, klicken Sie auf die Schaltfläche unten, um die GCP Console aufzurufen und das Steuerfeld „Startseite“ zu öffnen, das sich oben links im Dreistrich-Menü befindet. Falls der Bildschirm leer ist, klicken Sie in der Eingabeaufforderung 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 eine davon 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 LAUNCH (Starten) und wählen Sie Ihr Projekt aus:

7d07439db939b61c.png

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

7d5f7d17a80a1930.png

Warten Sie, bis die MiniKF Compute-Instanz gestartet wurde:

5228086caadc44c6.png

In MiniKF anmelden

Wenn die MiniKF-VM aktiv ist, stellen Sie eine Verbindung her und melden Sie sich an, indem Sie auf die Schaltfläche SSH klicken. 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 in 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

In Rok anmelden

Nachdem Sie sich bei Kubeflow angemeldet haben, öffnen Sie das linke Menü, indem Sie auf das Hamburger-Symbol klicken. Klicken Sie auf Snapshots und melden Sie sich mit dem Nutzernamen und Passwort von MiniKF in Rok an.

16171f35a935a9af.png

80aad6ba5d298a7e.png

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

4. Pipeline aus dem Notebook heraus ausführen

In diesem Abschnitt führen Sie das Beispiel zur Identifizierung von Hunderasse aus, ein Projekt in der Udacity AI Nanodegree. Anhand eines Bildes eines Hundes liefert das endgültige Modell eine Schätzung der Hunderasse.

Notebook-Server im Kubeflow-Cluster erstellen

Rufen Sie im zentralen Kubeflow-Dashboard den Link Notebooks auf.

60825e935fd0f39b.png

Klicken Sie auf New Server (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 abweichen):

gcr.io/arrikto/jupyter-kale:f20978e

Fügen Sie ein neues, leeres Datenvolumen der Größe 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

Die JupyterLab-Landingpage wird in einem neuen Tab geöffnet. Erstellen Sie ein neues Terminal in JupyterLab.

ab9ac96f1a1f0d09.png

Führen Sie im Terminalfenster die folgenden Befehle aus, um den Ordner data aufzurufen und das Notebook und die Daten herunterzuladen, die Sie für den Rest des Labs verwenden möchten:

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

Das geklonte Repository enthält eine Reihe ausgewählter Beispiele mit Daten und annotierten Notebooks.

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

2bc436465522f65b.png

ML-Code des Beispiels zur Hunderasseidentifikation ansehen

Führen Sie vorerst nicht die Zellen aus, die die Datasets herunterladen, da Sie kleinere Datasets verwenden werden, die im soeben geklonten Repository enthalten sind. Wenn Sie dieses Beispiel in Ihrem eigenen Tempo von zu Hause aus ausführen, können Sie die Datasets gerne herunterladen.

Führen Sie die Zelle imports aus, um alle erforderlichen Bibliotheken zu importieren. Der Code schlägt fehl, da 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 einzubeziehen. Glücklicherweise stellen Rok und Kale sicher, dass alle während der Entwicklung installierten Bibliotheken in Ihre Pipeline gelangen, dank der Snapshot-Technologie von Rok und Kale, die diese Snapshot-Volumes in den Pipelineschritten bereitstellen.

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 mit den richtigen installierten Bibliotheken aus und beobachten Sie den Erfolg.

Notebook in eine Pipeline in Kubeflow Pipelines konvertieren

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

7b96241f2ab6c389.png

Aktivieren Sie Kale, indem Sie im Kale-Bereitstellungsbereich auf den Schieberegler klicken:

804cfbf9d76b7e23.png

Untersuchen Sie die Abhängigkeiten pro Zelle im Notebook. Hier sehen Sie, wie mehrere Notebook-Zellen Teil eines einzelnen Pipelineschritts sein können, wie durch Farbbalken auf der linken Seite der Zellen angezeigt wird, und wie ein Pipelineschritt von vorherigen Schritten abhängen kann, wie durch abhängig von Labels über den Zellen angegeben. Die folgende Abbildung zeigt beispielsweise mehrere Zellen, die Teil desselben Pipelineschritts sind. Sie haben dieselbe rote Farbe und hängen von einem vorherigen Pipelineschritt 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 eingebunden ist, um Snapshots des Datenvolumens des aktuellen Notebooks zu erstellen, können Sie auch den Fortschritt des Snapshots beobachten. Rok kümmert sich um die Versionsverwaltung und die Reproduktion der gesamten Umgebung, so wie sie war, als Sie auf die Schaltfläche Kompilieren und ausführen geklickt haben. Auf diese Weise haben Sie eine Zeitmaschine für Ihre Daten und Code und Ihre Pipeline wird in derselben Umgebung ausgeführt, in der Sie Ihren Code entwickelt haben, ohne neue Docker-Images erstellen zu müssen.

de1b88af76df1a9a.png

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

e0b467e2e7034b5d.png

Die Benutzeroberfläche von Kubeflow Pipelines wird in einem neuen Tab geöffnet. Warten Sie, bis die Ausführung abgeschlossen ist.

21a9d54a57f3e20c.png

39e6fa39516d2773.png

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

5. Lerntransfer mit Hyperparameter-Abstimmung

Ergebnisse ansehen

Sehen Sie sich die Logs des Schritts cnn-from-scratch an. (Klicken Sie in der Benutzeroberfläche von Kubeflow Pipelines auf den Schritt im Diagramm und dann auf den Tab Logs.) In diesem Schritt haben Sie ein Convolutional Neural Network (CNN) von Grund auf trainiert. Beachten Sie, dass das trainierte Modell eine sehr geringe Genauigkeit hat und dieser Schritt darüber hinaus viel Zeit in Anspruch genommen hat.

62bf0835e9896c67.png

Sehen Sie sich die Logs des Schritts cnn-vgg16 an. In diesem Schritt haben Sie Lerntransfers mit dem vortrainierten VGG-16-Modell verwendet, einem neuronalen Netzwerk, das von der Visual Geometry Group (VGG) trainiert wurde. Die Genauigkeit ist viel höher als beim vorherigen Modell, aber wir können es noch besser machen.

2b45072da65e20ae.png

Sehen Sie sich nun die Logs des Schritts cnn-resnet50 an. In diesem Schritt haben Sie einen Lerntransfer mit dem vortrainierten ResNet-50-Modell verwendet. Die Genauigkeit ist viel höher. Daher verwenden Sie dieses Modell für den Rest dieses Codelabs.

a1dc84ea48a87820.png

Hyperparameter-Feinabstimmung

Kehren Sie in der Kubeflow-UI zum Notebookserver zurück und öffnen Sie das Notebook mit dem Namen dog-breed-katib.ipynb (unter Pfad data/kale/examples/dog-breed-classification/). In diesem Notebook führen Sie mithilfe von Katib einige Tests zur Hyperparameter-Abstimmung für das ResNet-50-Modell aus. Am Anfang des Notebooks befindet sich eine Zelle, in der die Parameter deklariert werden:

87b9f6c98dc1823e.png

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

a518eba74d341139.png

Klicken Sie dann auf Set up Katib Job (Kateb-Job einrichten), um Katib zu konfigurieren:

f4e34fff6a93aa60.png

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

cfc6b7bcdc685a02.png

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

f9c1ab0a6a3c5e8d.png

Sehen Sie sich den Fortschritt des Katib-Experiments an:

f3514011876564db.png

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

ab2f5a5edd48e8dc.png

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

410a843b6f044a4b.png

Auf der Katib-Testseite sehen Sie die neuen Tests:

a511dca519580133.png

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

43dd34ee2b75018d.png

Sehen wir uns an, was gerade passiert ist. Früher hat Kale eine Pipelineausführung aus einem Notebook erstellt. Jetzt werden mehrere Pipelineausführungen erstellt, die jeweils mit einer anderen Argumentkombination gespeist werden.

Katib ist die Komponente von Kubeflow zum Ausführen von Hyperparameter-Abstimmungsjobs für allgemeine Zwecke. Katib weiß nichts über die Jobs, die tatsächlich ausgeführt werden (im Katib-Jargon als Tests bezeichnet). Für Kale sind nur der Suchbereich, der Optimierungsalgorithmus und das Ziel wichtig. 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.

Da das Katib-Experiment Testläufe generiert, werden in der Katib-Benutzeroberfläche weitere Tests angezeigt:

763d3d4bb766c.png

Weitere Ausführungen 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-Benutzeroberfläche:

7acc64dfee4f35a3.png

Wenn Sie zum Notebook zurückkehren, sehen Sie direkt neben dem Katib-Experiment im Kale-Steuerfeld eine Info-Schaltfläche:

95b092180d71dc80.png

Wenn Sie darauf klicken, sehen Sie das beste Ergebnis und die Parameter, die das Ergebnis generiert haben:

2b0ce47e548e5afb.png

6. Bereinigen

MiniKF-VM löschen

Gehen Sie in der GCP Console zu Deployment Manager und löschen Sie die Bereitstellung minikf-on-gcp.

7. Glückwunsch

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

Was liegt als Nächstes an?

Treten Sie der Kubeflow-Community bei:

Weitere Informationen