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:

Prüfen Sie die folgenden Mindestanforderungen:
- Sie müssen die Rolle „Inhaber“ für das Projekt haben.
- Achten Sie darauf, dass für Ihr Projekt die Abrechnung aktiviert ist.
- Wenn Sie die kostenlose GCP-Stufe oder den 12-monatigen Testzeitraum mit einem Guthaben von 300 $verwenden, können Sie die Standard-GCP-Installation von MiniKF nicht ausführen, da die kostenlose Stufe nicht genügend Ressourcen bietet. Sie müssen auf ein kostenpflichtiges Konto upgraden.
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.

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

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

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:

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

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

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

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.

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:


Chrome-Nutzer sehen diesen Bildschirm:

Firefox-Nutzer sehen diesen Bildschirm:

Safari-Nutzer sehen diesen Bildschirm:

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.


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.

Klicken Sie auf Neuer Server.

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

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.

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

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

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

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.

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:

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:

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

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:

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

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.

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

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.

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.

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


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.

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.

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.

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:

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

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

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

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

Beobachten Sie den Fortschritt des Katib-Tests:

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

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

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

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

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:

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

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

Alle Ausführungen in der KFP-UI:

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

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

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:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- Wöchentlicher Community-Call, Slack und andere Community-Details
