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 nutzen und ist nur durch die Anzahl der Ressourcen begrenzt, die dem Kubernetes-Cluster zugewiesen sind.
- Zusammensetzbar – Service Worker können jetzt offline oder in Netzwerken mit geringer Qualität ausgeführt werden.
Es ist ein Mittel, um lose gekoppelte Mikrodienste als eine Einheit zu organisieren und an verschiedenen Standorten bereitzustellen, sei es auf einem Laptop oder in der Cloud.
In diesem Codelab erfahren Sie, wie Sie mit MiniKF ein eigenes Kubeflow-Deployment erstellen und einen Kubeflow Pipelines-Workflow in einem Jupyter-Notebook ausführen.
Inhalt
In diesem Codelab erstellen Sie eine komplexe Data-Science-Pipeline mit Kubeflow Pipelines, ohne Befehlszeilenbefehle 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
- Kubeflow-Pipelines per Mausklick aus einem Notebook ausführen
- Daten in einem Notebook und in 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-ID und Clusternamen festlegen
Die Projekt-ID finden Sie in der GCP Console im Steuerfeld „Startseite“ links oben im Dreistrich-Menü. Falls der Bildschirm leer ist, klicken Sie in der Eingabeaufforderung auf Ja, um ein Dashboard zu erstellen.
Wenn das Projekt noch nicht ausgewählt wurde, klicken Sie auf Projekt auswählen:
Wählen Sie Ihr Projekt aus. Sie sollten nur eine davon haben:
3. MiniKF installieren
Compute-Instanz erstellen
Suchen Sie im GCP Marketplace nach "MiniKF".
Wählen Sie die virtuelle Maschine MiniKF von Arrikto aus.
Klicken Sie auf die Schaltfläche In Compute Engine starten und wählen Sie Ihr Projekt aus.
Klicken Sie im Menü Konfigurieren und im Fenster "Bereitstellen", wählen Sie einen Namen für Ihre MiniKF-Instanz aus und lassen Sie die Standardoptionen unverändert. Klicken Sie dann auf die Schaltfläche 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 SSH-Schaltfläche 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
Sobald 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. Gehen Sie zum Snapshot Store und melden Sie sich mit dem MiniKF-Nutzernamen und -Passwort bei Rok an.
Glückwunsch! Sie haben MiniKF erfolgreich auf der GCP bereitgestellt. Sie können jetzt Notebooks erstellen, ML-Code schreiben und Kubeflow-Pipelines ausführen. Verwenden Sie Rok für die Versionsverwaltung und Reproduzierbarkeit von Daten.
4. Pipeline aus dem Notebook heraus ausführen
In diesem Abschnitt führen Sie das Titanic-Beispiel durch, einen Kaggle-Wettbewerb, der vorhersagt, welche Passagiere das Wrack der Titanic überlebt haben.
Notebook-Server erstellen
Rufen Sie im zentralen Kubeflow-Dashboard den Link Notebook-Server auf.
Klicken Sie auf New Server (Neuer Server).
Geben Sie einen Namen für den Notebook-Server an.
Vergewissern Sie sich, dass Sie dieses Bild ausgewählt haben:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
Fügen Sie ein neues, leeres Daten-Volume 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 -b kubecon-workshop https://github.com/kubeflow-kale/examples
Dieses Repository enthält eine Reihe ausgewählter Beispiele mit Daten und annotierten Notebooks. Gehen Sie in der Seitenleiste zum Ordner data/examples/titanic-ml-dataset/
und öffnen Sie das Notebook titanic_dataset_ml.ipynb
.
ML-Code der Titanic Challenge ansehen
Führen Sie das Notebook Schritt für Schritt aus. Der Code schlägt fehl, da eine Bibliothek fehlt.
Kehren Sie zum Terminal zurück und installieren Sie die fehlende Bibliothek.
pip3 install --user seaborn
Starten Sie den Notebook-Kernel neu, indem Sie auf das Symbol Aktualisieren klicken.
Führen Sie die Zelle noch einmal mit den richtigen installierten Bibliotheken aus und beobachten Sie den Erfolg.
Notebook in eine Kubeflow-Pipeline konvertieren
Aktivieren Sie Kale, indem Sie im linken Bereich auf das Kubeflow-Symbol klicken.
Abhängigkeiten pro Zelle untersuchen Erfahren Sie, wie mehrere Zellen Teil eines einzelnen Pipelineschritts sein können und wie ein Pipelineschritt von vorherigen Schritten abhängen kann.
Klicken Sie auf die Schaltfläche Kompilieren und ausführen.
Beobachten Sie den Fortschritt des Snapshots.
Beobachten Sie den Fortschritt der Pipelineausführung.
Klicken Sie auf den Link, um die Benutzeroberfläche von Kubeflow Pipelines aufzurufen und die Ausführung anzusehen.
Warten Sie, bis der Vorgang abgeschlossen ist.
Glückwunsch! Sie haben gerade eine End-to-End-Kubeflow-Pipeline ausgeführt, die von Ihrem Notebook aus gestartet wurde.
5. Reproduzierbarkeit mit Volume-Snapshots
Ergebnisse ansehen
Sehen Sie sich die Logs für den vorletzten Pipelineschritt Results an. Beachten Sie, dass alle Prädiktoren einen Wert von 100 % anzeigen. Ein erfahrener Data Scientist würde dies sofort verdächtig finden. Das ist ein guter Hinweis darauf, dass unsere Modelle nicht generalisiert sind, sondern zu viel an das Trainings-Dataset angepasst wird. Dies ist wahrscheinlich auf ein Problem mit den von den Modellen verwendeten Daten zurückzuführen.
Vorherigen Status reproduzieren
Glücklicherweise kümmert sich Rok um die Versionsverwaltung der Daten und die Reproduktion der gesamten Umgebung, so wie zu dem Zeitpunkt, als Sie auf die Schaltfläche Kompilieren und ausführen geklickt haben. So haben Sie eine Zeitmaschine für Ihre Daten und Code. Setzen wir also den Status der Pipeline fort, bevor wir eines der Modelle trainieren, um zu sehen, was passiert. Sehen Sie sich den Schritt Randomforest an und klicken Sie dann auf Artifacts.
Führen Sie die Schritte im Markdown aus, d.h. sehen Sie sich den Snapshot in der Rok-UI an, indem Sie auf den entsprechenden Link klicken.
Kopieren Sie die Rok-URL.
Rufen Sie den Link Notebook-Server auf.
Klicken Sie auf New Server (Neuer Server).
Fügen Sie die zuvor kopierte Rok-URL ein und klicken Sie auf die Schaltfläche Autofill.
Geben Sie einen Namen für Ihr Notebook an.
Vergewissern Sie sich, dass Sie dieses Bild ausgewählt haben:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
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.
Beachten Sie, dass das Notebook genau bei der Zelle des Pipelineschritts geöffnet wird, den Sie erzeugt haben.
Im Hintergrund hat Kale den Zustand des Notebooks fortgesetzt, indem alle Bibliotheken importiert und die Variablen aus den vorherigen Schritten geladen wurden.
Fehler im vorherigen Status beheben
Fügen Sie dieser Zelle einen Druckbefehl hinzu:
print(acc_random_forest)
Führen Sie die aktive Zelle aus, indem Sie Umschalttaste + Eingabetaste drücken, um die zufällige Gesamtstruktur neu zu trainieren und die Punktzahl auszudrucken. Es sind 100.
Jetzt ist es an der Zeit, zu prüfen, ob die Trainingsdaten etwas seltsam enthalten. Um dieses Problem zu untersuchen und zu beheben, fügen Sie eine Zelle über dem Random Forest Markdown hinzu. Wählen Sie dazu die vorherige Zelle aus und klicken Sie auf das Plussymbol (+).
Fügen Sie den folgenden Text hinzu und führen Sie die Zelle aus, um das Trainings-Dataset auszugeben.
train_df
Hoppla! Die Spalte mit Trainingslabels ("Überwacht") wurde fälschlicherweise als Eingabefeatures eingefügt. Das Modell hat gelernt, sich auf die „Überlebenden“ und den Rest ignorieren, wodurch die Eingabe beeinträchtigt wird. Diese Spalte stimmt genau mit dem Ziel des Modells überein und ist während der Vorhersage nicht vorhanden. Daher muss sie aus dem Trainings-Dataset entfernt werden, damit das Modell von den anderen Features lernen kann.
Fehlerkorrektur hinzufügen
Um diese Spalte zu entfernen, bearbeiten Sie die Zelle und fügen Sie den folgenden Befehl hinzu:
train_df.drop('Survived', axis=1, inplace=True) train_df
Aktivieren Sie Kale und achten Sie darauf, dass die Zelle, aus der die Labels Fortbestand entfernt werden, Teil des Feature Engineering-Pipelineschritts ist (sie sollte dieselbe Umrissfarbe haben).
Führen Sie die Pipeline noch einmal aus, indem Sie auf die Schaltfläche Kompilieren und ausführen klicken.
Klicken Sie auf den Link, um die Benutzeroberfläche von Kubeflow Pipelines aufzurufen und die Ausführung anzusehen.
Warten Sie, bis der Schritt results abgeschlossen ist, und sehen Sie sich die Logs an, um die Endergebnisse zu sehen. Sie haben jetzt realistische Vorhersageergebnisse!
6. Bereinigen
MiniKF-VM löschen
Gehen Sie in der GCP Console zu Deployment Manager und löschen Sie die Bereitstellung minikf-1
.
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
- Community-Gespräch dienstags