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.
- Zusammensetzbar – Durch Service Worker funktioniert ein Kubeflow-Deployment auch offline oder in Netzwerken mit geringer Qualität.
Damit lassen sich lose gekoppelte Mikrodienste als Einheit organisieren und an beliebigen Standorten bereitstellen, ob auf einem Laptop oder in der Cloud.
In diesem Codelab lernen Sie Schritt für Schritt, wie Sie Ihr eigenes Kubeflow-Deployment mit MiniKF erstellen und einen Kubeflow Pipelines-Workflow in einem Jupyter-Notebook ausführen.
Umfang
In diesem Codelab erstellen Sie eine komplexe Data-Science-Pipeline mit 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 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-ID und Clusternamen festlegen
Ihre Projekt-ID finden Sie in der GCP Console im Bereich „Startseite“, den Sie über das Dreistrich-Menü oben links aufrufen können. 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 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.

Wählen Sie im Fenster Konfigurieren und bereitstellen einen Namen 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 gestartet wurde.

Bei MiniKF anmelden
Wenn die MiniKF-VM hochgefahren 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 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. Rufen Sie den Snapshot Store auf 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, Ihren ML-Code schreiben und Kubeflow-Pipelines ausführen. Rok für die Datenversionsverwaltung und Reproduzierbarkeit verwenden
4. Pipeline aus einem Notebook ausführen
In diesem Abschnitt führen Sie das Titanic-Beispiel aus, einen Kaggle-Wettbewerb, bei dem vorhergesagt wird, welche Passagiere den Schiffbruch der Titanic überlebt haben.
Notebook-Server erstellen
Rufen Sie im zentralen Dashboard von Kubeflow den Link Notebook Servers (Notebook-Server) auf.

Klicken Sie auf Neuer Server.

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

Prüfen Sie, ob Sie dieses Bild ausgewählt haben:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
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 -b kubecon-workshop https://github.com/kubeflow-kale/examples
Dieses Repository enthält eine Reihe von kuratierten Beispielen mit Daten und Notebooks mit Anmerkungen. Rufen Sie in der Seitenleiste den Ordner data/examples/titanic-ml-dataset/ auf und öffnen Sie das Notebook titanic_dataset_ml.ipynb.

ML-Code der Titanic-Challenge ansehen
Führen Sie das Notebook schrittweise aus. Beachten Sie, dass der Code fehlschlägt, weil 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 aus, nachdem Sie die richtigen Bibliotheken installiert haben.
Notizbuch in eine Kubeflow-Pipeline umwandeln
Aktivieren Sie Kale, indem Sie im linken Bereich auf das Kubeflow-Symbol klicken.

Abhängigkeiten pro Zelle ansehen Hier sehen 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 des Pipeline-Laufs.

Klicken Sie auf den Link, um die Kubeflow Pipelines-Benutzeroberfläche aufzurufen und die Ausführung anzusehen.

Warten Sie, bis der Vorgang abgeschlossen ist.


Glückwunsch! Sie haben gerade eine End-to-End-Kubeflow-Pipeline über Ihr Notebook ausgeführt.
5. Reproduzierbarkeit mit Volume-Snapshots
Ergebnisse ansehen
Sehen Sie sich die Logs für den vorletzten Pipelineschritt Results an. Alle Vorhersagevariablen haben einen Wert von 100%. Ein erfahrener Data Scientist würde das sofort als verdächtig einstufen. Das ist ein guter Hinweis darauf, dass unsere Modelle nicht generalisieren und stattdessen eine Überanpassung an den Trainingsdatensatz vorliegt. Wahrscheinlich liegt ein Problem mit den Daten vor, die von den Modellen verwendet werden.

Vorherigen Zustand wiederherstellen
Glücklicherweise kümmert sich Rok um die Datenversionsverwaltung und die Reproduktion der gesamten Umgebung, wie sie zum Zeitpunkt des Klicks auf die Schaltfläche Kompilieren und ausführen war. So haben Sie eine Zeitmaschine für Ihre Daten und Ihren Code. Wir setzen den Status der Pipeline also vor dem Training eines der Modelle fort und sehen, was passiert. Sehen Sie sich den Schritt randomforest an und klicken Sie dann auf Artefakte.

Folgen Sie der Anleitung unter Markdown, d.h., rufen Sie den Snapshot in der Rok-Benutzeroberfläche auf, indem Sie auf den entsprechenden Link klicken.

Kopieren Sie die Rok-URL.

Klicken Sie auf den Link Notebook Servers (Notebook-Server).

Klicken Sie auf Neuer Server.

Fügen Sie die zuvor kopierte Rok-URL ein und klicken Sie auf die Schaltfläche Automatisches Ausfüllen.

Geben Sie einen Namen für Ihr Notebook an.

Prüfen Sie, ob 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.

Das Notebook wird in der Zelle des Pipeline-Schritts geöffnet, den Sie gestartet haben.

Im Hintergrund hat Kale den Status des Notebooks wiederhergestellt, indem alle Bibliotheken importiert und die Variablen aus den vorherigen Schritten geladen wurden.
Vorherigen Status debuggen
Fügen Sie dieser Zelle einen Druckbefehl hinzu:
print(acc_random_forest)
Führen Sie die aktive Zelle aus, indem Sie Umschalt + Eingabetaste drücken, um den Random Forest neu zu trainieren und den Score auszugeben. Er lautet 100.

Jetzt ist es an der Zeit, die Trainingsdaten auf Auffälligkeiten zu prüfen. Um dieses Problem zu untersuchen und zu beheben, fügen Sie eine Zelle über dem Random Forest-Markdown ein. Wählen Sie dazu die vorherige Zelle aus und klicken Sie auf das Plussymbol (+).

Fügen Sie den folgenden Text ein und führen Sie die Zelle aus, um den Trainingsdatensatz auszugeben.
train_df

Hoppla! Die Spalte mit den Trainingslabels („Survived“) wurde fälschlicherweise als Eingabe-Features verwendet. Das Modell hat gelernt, sich auf das Feature „Survived“ zu konzentrieren und den Rest zu ignorieren, wodurch die Eingabe verunreinigt wird. Diese Spalte entspricht genau dem Ziel des Modells und ist bei der Vorhersage nicht vorhanden. Sie muss daher aus dem Trainingsdataset entfernt werden, damit das Modell aus den anderen Features lernen kann.
Fehlerkorrektur hinzufügen
Wenn Sie diese Spalte entfernen möchten, bearbeiten Sie die Zelle und fügen Sie diesen Befehl hinzu:
train_df.drop('Survived', axis=1, inplace=True)
train_df

Aktivieren Sie Kale und prüfen Sie, ob die Zelle, in der die Survived-Labels entfernt werden, Teil des Pipeline-Schritts featureengineering 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 Kubeflow Pipelines-Benutzeroberfläche aufzurufen und die Ausführung anzusehen.
Warten Sie, bis der Schritt Ergebnisse abgeschlossen ist, und sehen Sie sich die Protokolle an, um die Endergebnisse zu sehen. Sie haben jetzt realistische Vorhersagewerte.

6. Bereinigen
MiniKF-VM löschen
Rufen Sie in der GCP Console Deployment Manager auf und löschen Sie das minikf-1-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
- Community-Anruf am Dienstag
