Von Notebook zu Kubeflow Pipelines mit MiniKF und Kale

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.

Öffnen Sie die GCP Console.

3fdc4329995406a0.png

Wenn das Projekt noch nicht ausgewählt wurde, 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 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 In Compute Engine starten und wählen Sie Ihr Projekt aus.

b5eeba43053db4bd.png

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.

dc401e2bb5a884d9.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 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.

774e83c3e96cf7b3.png

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.

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. Gehen Sie zum Snapshot Store und melden Sie sich mit dem MiniKF-Nutzernamen und -Passwort bei Rok an.

a683198ac4ba900d.png

80aad6ba5d298a7e.png

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.

4115cac8d8474d73.png

Klicken Sie auf New Server (Neuer Server).

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

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.

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.

2f06041475f45d3.png

Daten und Notebook herunterladen

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

2482011174f7bc75.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 -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.

c85baf68b36c63b2.png

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.

bf2451fd7407e334.png

Kehren Sie zum Terminal zurück und installieren Sie die fehlende Bibliothek.

pip3 install --user seaborn

d90593b21425dd12.png

Starten Sie den Notebook-Kernel neu, indem Sie auf das Symbol Aktualisieren klicken.

a21f5f563b36ce4d.png

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.

3f4f9c93b187b105.png

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.

15cca32444c1f12e.png

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

bde5cef34f00e258.png

Beobachten Sie den Fortschritt des Snapshots.

9408f46abb2493f5.png

Beobachten Sie den Fortschritt der Pipelineausführung.

9edbde68032f5e4b.png

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

a81646a22584e1b9.png

Warten Sie, bis der Vorgang abgeschlossen ist.

44bee7dc0d24ec21.png

d377b6d574a4970.png

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.

2a594032c2dd6ff6.png

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.

4f25ca4560711b23.png

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.

e533bc781da9355a.png

Kopieren Sie die Rok-URL.

d155d19731b5cedd.png

Rufen Sie den Link Notebook-Server auf.

aafeab01f3ef0863.png

Klicken Sie auf New Server (Neuer Server).

f2265a64e8f9d094.png

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

9ba4d4128a3bdeea.png

Geben Sie einen Namen für Ihr Notebook an.

7685c3bf35fc74b2.png

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.

28c024bcc55cc70a.png

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

34955a64ae316de1.png

Beachten Sie, dass das Notebook genau bei der Zelle des Pipelineschritts geöffnet wird, den Sie erzeugt haben.

a1f7c81f349e0364.png

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.

e2a8a3b5465fcb5d.png

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 (+).

d1077f32dff9620f.png

Fügen Sie den folgenden Text hinzu und führen Sie die Zelle aus, um das Trainings-Dataset auszugeben.

train_df

2854798ff01aed4e.png

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

9e76c16a862b566.png

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!

8c6a9676b49e5be8.png

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:

Weitere Informationen