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:
Überprüfen Sie die folgenden Mindestanforderungen:
- Sie benötigen die Rolle „Inhaber“ für das Projekt.
- Die Abrechnung muss für das Projekt aktiviert sein.
- Wenn Sie die kostenlose GCP-Stufe oder den 12-monatigen Testzeitraum mit einem Guthaben von 300 $verwenden, können Sie die Standardinstallation von MiniKF in der GCP nicht ausführen, da die kostenlose Stufe nicht genügend Ressourcen bietet. Führen Sie ein Upgrade auf ein kostenpflichtiges Konto aus.
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.
Wenn das Projekt noch nicht ausgewählt ist, klicken Sie auf Projekt auswählen:
Wählen Sie Ihr Projekt aus. Sie sollten nur eine davon 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 LAUNCH (Starten) und wählen Sie Ihr Projekt aus:
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):
Warten Sie, bis die MiniKF Compute-Instanz gestartet wurde:
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.
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:
Chrome-Nutzer sehen diesen Bildschirm:
Firefox-Nutzer sehen diesen Bildschirm:
Safari-Nutzer sehen diesen Bildschirm:
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.
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.
Klicken Sie auf New Server (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 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.
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
Die JupyterLab-Landingpage wird in einem neuen Tab geöffnet. Erstellen Sie ein neues Terminal in JupyterLab.
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
.
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:
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:
Starten Sie den Notebook-Kernel neu, indem Sie auf das Symbol Neu starten klicken:
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:
Aktivieren Sie Kale, indem Sie im Kale-Bereitstellungsbereich auf den Schieberegler klicken:
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.
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 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.
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.
Die Benutzeroberfläche von Kubeflow Pipelines wird in einem neuen Tab geöffnet. Warten Sie, bis die Ausführung abgeschlossen ist.
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.
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.
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.
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:
Aktivieren Sie im linken Bereich des Notebooks HP Tuning with Katib, um die Hyperparameter-Abstimmung auszuführen:
Klicken Sie dann auf Set up Katib Job (Kateb-Job einrichten), um Katib zu konfigurieren:
Definieren Sie den Suchbereich für jeden Parameter und definieren Sie ein Ziel:
Klicken Sie auf die Schaltfläche Compile and Run Katib Job (Kompilieren und Katib-Job ausführen):
Sehen Sie sich den Fortschritt des Katib-Experiments an:
Klicken Sie auf Ansicht, um den Katib-Test aufzurufen:
Klicken Sie auf Fertig, um die Ausführungen in Kubeflow Pipelines (KFP) aufzurufen:
Auf der Katib-Testseite sehen Sie die neuen Tests:
In der KFP-Benutzeroberfläche werden die neuen Ausführungen angezeigt:
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:
Weitere Ausführungen 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-Benutzeroberfläche:
Wenn Sie zum Notebook zurückkehren, sehen Sie direkt neben dem Katib-Experiment im Kale-Steuerfeld eine Info-Schaltfläche:
Wenn Sie darauf klicken, sehen Sie das beste Ergebnis und die Parameter, die das Ergebnis generiert haben:
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:
- github.com/kubeflow
- Kubeflow: Slack
- kubeflow-discuss@googlegroups.com
- Wöchentlicher Community-Anruf, Slack und andere Community-Details