Von Notebook zu Kubeflow Pipelines mit MiniKF und Kale

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.

GCP Console öffnen

3fdc4329995406a0.png

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

e8952c0b96067dea.png

Wählen Sie Ihr Projekt aus. Sie sollten nur eines 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

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

dc401e2bb5a884d9.png

Warten Sie, bis die MiniKF Compute-Instanz gestartet wurde.

5228086caadc44c6.png

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.

774e83c3e96cf7b3.png

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.

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

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.

a683198ac4ba900d.png

80aad6ba5d298a7e.png

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.

4115cac8d8474d73.png

Klicken Sie auf Neuer Server.

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

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.

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

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

2482011174f7bc75.png

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.

c85baf68b36c63b2.png

ML-Code der Titanic-Challenge ansehen

Führen Sie das Notebook schrittweise aus. Beachten Sie, dass der Code fehlschlägt, weil 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 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.

3f4f9c93b187b105.png

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.

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 des Pipeline-Laufs.

9edbde68032f5e4b.png

Klicken Sie auf den Link, um die Kubeflow Pipelines-Benutzeroberfläche 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 ü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.

2a594032c2dd6ff6.png

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.

4f25ca4560711b23.png

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.

e533bc781da9355a.png

Kopieren Sie die Rok-URL.

d155d19731b5cedd.png

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

aafeab01f3ef0863.png

Klicken Sie auf Neuer Server.

f2265a64e8f9d094.png

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

9ba4d4128a3bdeea.png

Geben Sie einen Namen für Ihr Notebook an.

7685c3bf35fc74b2.png

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.

28c024bcc55cc70a.png

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

34955a64ae316de1.png

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

a1f7c81f349e0364.png

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.

e2a8a3b5465fcb5d.png

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

d1077f32dff9620f.png

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

train_df

2854798ff01aed4e.png

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

9e76c16a862b566.png

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.

8c6a9676b49e5be8.png

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:

Weitere Informationen