Prototyping für Modelle in AI Platform Notebooks

1. Übersicht

In diesem Lab lernen Sie verschiedene Tools in AI Platform Notebooks kennen, mit denen Sie Ihre Daten untersuchen und ML-Prototypen erstellen können.

Lerninhalte

Die folgenden Themen werden behandelt:

  • AI Platform Notebooks-Instanz erstellen und anpassen
  • Notebooks-Code mit Git direkt in AI Platform Notebooks einbinden
  • What-If-Tool in Ihrem Notebook verwenden

Die Gesamtkosten für das Lab in Google Cloud belaufen sich auf 1$. Ausführliche Informationen zu den Preisen für AI Platform Notebooks finden Sie hier.

2. AI Platform Notebooks-Instanz erstellen

Sie benötigen ein Google Cloud Platform-Projekt mit aktivierter Abrechnung, um dieses Codelab auszuführen. Folgen Sie dieser Anleitung, um ein Projekt zu erstellen.

Schritt 2: Compute Engine API aktivieren

Gehen Sie zu Compute Engine und wählen Sie Aktivieren aus, falls dies noch nicht geschehen ist. Sie benötigen dies zum Erstellen Ihrer Notebookinstanz.

Schritt 3: Notebookinstanz erstellen

Rufen Sie in der Cloud Console den Bereich AI Platform Notebooks auf und klicken Sie auf Neue Instanz. Wählen Sie dann den neuesten Instanztyp TensorFlow 2 Enterprise ohne GPUs aus:

9f2bb4dec1ba4f4f.png

Geben Sie einen Namen für die Instanz ein oder verwenden Sie den Standardwert. Dann sehen wir uns die Anpassungsoptionen an. Klicken Sie auf die Schaltfläche Anpassen:

63be602ba45ca7c9.png

AI Platform Notebooks bietet viele verschiedene Anpassungsoptionen, z. B. die Region, in der Ihre Instanz bereitgestellt wird, den Image-Typ, die Maschinengröße und die Anzahl der GPUs. Wir verwenden die Standardwerte für Region und Umgebung. Für die Maschinenkonfiguration verwenden wir eine n1-standard-8-Maschine:

27101d232f765a17.png

Wir fügen keine GPUs hinzu und verwenden die Standardeinstellungen für Bootlaufwerk, Netzwerk und Berechtigungen. Wählen Sie Erstellen aus, um die Instanz zu erstellen. Das dauert einige Minuten.

Nachdem die Instanz erstellt wurde, wird in der Notebooks-Benutzeroberfläche neben ihr ein grünes Häkchen angezeigt. Wählen Sie JupyterLab öffnen aus, um die Instanz zu öffnen und mit dem Prototyping zu beginnen:

3598f414887ea9a8.png

Erstellen Sie beim Öffnen der Instanz ein neues Verzeichnis namens „Codelab“. Dies ist das Verzeichnis, in dem wir in diesem Lab arbeiten:

c16a821546acd92.png

Doppelklicken Sie auf das neu erstellte codelab-Verzeichnis und wählen Sie dann im Launcher „Python 3-Notebook“ aus:

4390b1614ae8eae4.png

Benennen Sie das Notebook in demo.ipynb oder in den gewünschten Namen um.

Schritt 4: Python-Pakete importieren

Erstellen Sie eine neue Zelle im Notebook und importieren Sie die Bibliotheken, die wir in diesem Codelab verwenden:

import pandas as pd
import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense

import numpy as np
import json

from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle
from google.cloud import bigquery
from witwidget.notebook.visualization import WitWidget, WitConfigBuilder

3. BigQuery-Daten mit Ihrem Notebook verbinden

Mit BigQuery, dem Big Data Warehouse von Google Cloud, stehen jetzt viele Datasets für die Erkundung öffentlich zur Verfügung. AI Platform Notebooks unterstützen die direkte Einbindung in BigQuery ohne Authentifizierung.

In diesem Lab verwenden wir das Dataset zur Geburtenrate (natality). Es enthält Daten zu fast jeder Geburt in den USA über einen Zeitraum von 40 Jahren, einschließlich des Geburtsgewichts des Kindes und demografische Informationen über die Eltern des Babys. Wir verwenden eine Untergruppe dieser Funktionen, um das Geburtsgewicht eines Babys vorherzusagen.

Schritt 1: BigQuery-Daten in unser Notebook herunterladen

Wir verwenden die Python-Clientbibliothek für BigQuery, um die Daten in einen Pandas DataFrame herunterzuladen. Das ursprüngliche Dataset ist 21 GB groß und enthält 123 Millionen Zeilen. Der Einfachheit halber verwenden wir nur 10.000 Zeilen aus dem Dataset.

Erstellen Sie die Abfrage und sehen Sie sich eine Vorschau des resultierenden DataFrames mit dem folgenden Code an. Hier erhalten wir vier Merkmale aus dem ursprünglichen Dataset sowie das Babygewicht (das, was unser Modell vorhersagt). Das Dataset reicht viele Jahre zurück, aber für dieses Modell verwenden wir nur Daten aus der Zeit nach 2000:

query="""
SELECT
  weight_pounds,
  is_male,
  mother_age,
  plurality,
  gestation_weeks
FROM
  publicdata.samples.natality
WHERE year > 2000
LIMIT 10000
"""
df = bigquery.Client().query(query).to_dataframe()
df.head()

Führen Sie den folgenden Befehl aus, um eine Zusammenfassung der numerischen Merkmale in unserem Dataset zu erhalten:

df.describe()

Hier werden der Mittelwert, die Standardabweichung, das Minimum und andere Messwerte für die numerischen Spalten angezeigt. Zum Schluss rufen wir einige Daten in der booleschen Spalte ab, die das Geschlecht des Babys angeben. Hierzu können Sie die Pandas-Methode value_counts verwenden:

df['is_male'].value_counts()

Sieht so aus, als wäre das Dataset zu 50:50 nach Geschlecht ausgewogen.

Schritt 2: Dataset für das Training vorbereiten

Nachdem Sie das Dataset als Pandas-DataFrame auf unser Notebook heruntergeladen haben, können wir eine Vorverarbeitung durchführen und es in Trainings- und Test-Datasets aufteilen.

Zuerst löschen wir Zeilen mit Nullwerten aus dem Dataset und mischen die Daten nach dem Zufallsprinzip auf:

df = df.dropna()
df = shuffle(df, random_state=2)

Extrahieren Sie als Nächstes die Labelspalte in eine separate Variable und erstellen Sie einen DataFrame, der nur unsere Features enthält. Da is_male ein boolescher Wert ist, wandeln wir ihn in eine Ganzzahl um, sodass alle Eingaben in unser Modell numerisch sind:

labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
data['is_male'] = data['is_male'].astype(int)

Wenn Sie jetzt eine Vorschau des Datasets mit data.head() ausführen, sollten Sie die vier Features sehen, die wir für das Training verwenden werden.

4. Git initialisieren

AI Platform Notebooks ist direkt in Git eingebunden, sodass Sie die Versionsverwaltung direkt in Ihrer Notebookumgebung vornehmen können. Dies unterstützt das Commit von Code direkt in der Notebook-UI oder über das in JupyterLab verfügbare Terminal. In diesem Abschnitt initialisieren wir ein Git-Repository in unserem Notebook und führen unseren ersten Commit über die Benutzeroberfläche durch.

Schritt 1: Git-Repository initialisieren

Wählen Sie im Codelab-Verzeichnis in JupyterLab oben in der Menüleiste Git und dann Init aus:

d9f1729358f18e58.png

Wenn Sie gefragt werden, ob Sie dieses Verzeichnis zu einem Git-Repository machen möchten, wählen Sie Ja aus. Wählen Sie dann das Git-Symbol in der linken Seitenleiste aus, um den Status Ihrer Dateien und Commits anzuzeigen:

1648d6828f11a6db.png

Schritt 2: Ersten Commit abschließen

In dieser Benutzeroberfläche können Sie einem Commit Dateien hinzufügen, Dateiunterschiede ansehen (mehr dazu später) und Ihre Änderungen per Commit durchführen. Beginnen wir mit dem Commit der soeben hinzugefügten Notebook-Datei.

Klicken Sie auf das Kästchen neben der Notebookdatei demo.ipynb, um sie für den Commit bereitzustellen. Sie können das Verzeichnis .ipynb_checkpoints/ ignorieren. Geben Sie eine Commit-Nachricht in das Textfeld ein und klicken Sie auf das Häkchen, um Ihre Änderungen zu übernehmen:

fe7366522a3a268f.png

Geben Sie Ihren Namen und Ihre E-Mail-Adresse ein, wenn Sie dazu aufgefordert werden. Kehren Sie dann zum Tab Verlauf zurück, um Ihren ersten Commit zu sehen:

d03567c3592afb77.png

Die Screenshots stimmen möglicherweise aufgrund von Aktualisierungen seit der Veröffentlichung dieses Labs nicht genau mit Ihrer Benutzeroberfläche überein.

5. TensorFlow-Modell erstellen und trainieren

Wir verwenden das BigQuery-Dataset zur Geburtenrate, das wir in unser Notebook heruntergeladen haben, um ein Modell zu erstellen, das das Gewicht von Babys vorhersagt. In diesem Lab konzentrieren wir uns auf die Notebook-Tools und nicht auf die Genauigkeit des Modells selbst.

Schritt 1: Daten in Trainings- und Test-Datasets aufteilen

Wir verwenden das Scikit Learn-Dienstprogramm train_test_split, um unsere Daten aufzuteilen, bevor wir das Modell erstellen:

x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)

Jetzt können wir unser TensorFlow-Modell erstellen.

Schritt 2: TensorFlow-Modell erstellen und trainieren

Wir erstellen dieses Modell mit der tf.keras-Modell-API Sequential, mit der wir unser Modell als Ebenenstapel definieren können. Den gesamten Code, den wir zum Erstellen unseres Modells benötigen, finden Sie hier:

model = Sequential([
    Dense(64, activation='relu', input_shape=(len(x_train.iloc[0]),)),
    Dense(32, activation='relu'),
    Dense(1)]
)

Dann kompilieren wir unser Modell, um es zu trainieren. Hier wählen wir die Optimier- und Verlustfunktion des Modells sowie die Messwerte aus, die das Modell während des Trainings protokollieren soll. Da es sich um ein Regressionsmodell (Vorhersage eines numerischen Werts) handelt, verwenden wir als Messwert den mittleren quadratischen Fehler anstelle der Genauigkeit:

model.compile(optimizer=tf.keras.optimizers.RMSprop(),
              loss=tf.keras.losses.MeanSquaredError(),
              metrics=['mae', 'mse'])

Mit der praktischen model.summary()-Funktion von Keras können Sie die Form und die Anzahl der trainierbaren Parameter Ihres Modells auf jeder Ebene anzeigen.

Jetzt können wir unser Modell trainieren. Wir müssen nur die Methode fit() aufrufen und ihr unsere Trainingsdaten und Labels übergeben. Hier verwenden wir den optionalen Parameter „validation_split“, der einen Teil unserer Trainingsdaten enthält, um das Modell bei jedem Schritt zu validieren. Idealerweise möchten Sie, dass der Trainings- und der Validierungsverlust beide sinken. Denken Sie jedoch daran, dass wir uns in diesem Beispiel mehr auf Modell- und Notebook-Tools als auf Modellqualität konzentrieren:

model.fit(x_train, y_train, epochs=10, validation_split=0.1)

Schritt 3: Vorhersagen für Testbeispiele generieren

Um die Leistung unseres Modells zu sehen, lassen Sie uns einige Testvorhersagen für die ersten zehn Beispiele aus unserem Test-Dataset generieren.

num_examples = 10
predictions = model.predict(x_test[:num_examples])

Anschließend iterieren wir die Vorhersagen unseres Modells und vergleichen sie mit dem tatsächlichen Wert:

for i in range(num_examples):
    print('Predicted val: ', predictions[i][0])
    print('Actual val: ',y_test.iloc[i])
    print()

Schritt 4: Änderungen mit git diff verwenden und Commit durchführen

Nachdem Sie einige Änderungen am Notebook vorgenommen haben, können Sie das Feature „git diff“ ausprobieren, das in der Notebook-Git-Benutzeroberfläche verfügbar ist. Das Notebook demo.ipynb sollte sich jetzt im Bereich „Geändert“ befinden. auf der Benutzeroberfläche. Bewegen Sie den Mauszeiger auf den Dateinamen und klicken Sie auf das Diff-Symbol:

a370facb3632fb32.png

Damit sollten Sie einen Unterschied Ihrer Änderungen sehen können, zum Beispiel:

461c502bd3ab910e.png

Dieses Mal führen wir den Commit unserer Änderungen über die Befehlszeile mithilfe von Terminal durch. Wählen Sie in der oberen Menüleiste von JupyterLab im Menü Git die Option Git Command in Terminal (Git-Befehl im Terminal) aus. Wenn Sie den Git-Tab Ihrer linken Seitenleiste geöffnet haben, während Sie die folgenden Befehle ausführen, werden Ihre Änderungen in der Git-Benutzeroberfläche angezeigt.

Führen Sie in der neuen Terminalinstanz den folgenden Befehl aus, um die Notebook-Datei für den Commit-Vorgang bereitzustellen:

git add demo.ipynb

Führen Sie dann folgenden Befehl aus, um die Änderungen zu übernehmen (Sie können eine beliebige Commit-Nachricht verwenden):

git commit -m "Build and train TF model"

Anschließend sollten Sie Ihr neuestes Commit im Verlauf sehen:

a4b44045e97cb7a7.png

6. What-If-Tool direkt über Ihr Notebook verwenden

Das What-If-Tool ist eine interaktive visuelle Schnittstelle, mit der Sie Ihre Datasets visualisieren und die Ausgabe Ihrer ML-Modelle besser verstehen können. Es ist ein Open-Source-Tool, das vom PAIR-Team bei Google entwickelt wurde. Es funktioniert zwar mit jedem Modell, bietet aber einige Features, die exklusiv für die Cloud AI Platform entwickelt wurden.

Das What-If-Tool ist auf Cloud AI Platform Notebooks-Instanzen mit TensorFlow vorinstalliert. Hier sehen wir, wie unser Modell insgesamt abschneidet, und untersuchen sein Verhalten an Datenpunkten aus unserem Test-Dataset.

Schritt 1: Daten für das What-If-Tool vorbereiten

Damit das What-If-Tool optimal genutzt werden kann, senden wir ihm Beispiele aus unserem Test-Dataset zusammen mit den Ground-Truth-Labels für diese Beispiele (y_test). Auf diese Weise können wir die Vorhersage des Modells mit der Grundwahrheit vergleichen. Führen Sie die folgende Codezeile aus, um einen neuen DataFrame mit unseren Testbeispielen und den zugehörigen Labels zu erstellen:

wit_data = pd.concat([x_test, y_test], axis=1)

In diesem Lab verbinden wir das What-If-Tool mit dem Modell, das wir gerade in unserem Notebook trainiert haben. Dazu müssen wir eine Funktion schreiben, mit der das Tool diese Testdatenpunkte für unser Modell ausführt:

def custom_predict(examples_to_infer):
    preds = model.predict(examples_to_infer)
    return preds

Schritt 2: What-If-Tool instanziieren

Wir instanziieren das What-If-Tool, indem wir ihm 500 Beispiele aus dem verketteten Test-Dataset und den Ground-Truth-Labels, die wir gerade erstellt haben, übergeben. Wir erstellen eine Instanz von WitConfigBuilder, um das Tool einzurichten. Dabei übergeben wir unsere Daten, die oben definierte benutzerdefinierte Vorhersagefunktion, das Ziel (das vorhersagen) und den Modelltyp:

config_builder = (WitConfigBuilder(wit_data[:500].values.tolist(), data.columns.tolist() + ['weight_pounds'])
  .set_custom_predict_fn(custom_predict)
  .set_target_feature('weight_pounds')
  .set_model_type('regression'))
WitWidget(config_builder, height=800)

Wenn das What-If-Tool geladen wird, sollte Folgendes angezeigt werden:

fcdc1cb7ed8e364e.png

Auf der X-Achse sehen Sie die Testdatenpunkte verteilt nach dem vorhergesagten Gewichtungswert des Modells (weight_pounds).

Schritt 3: Modellverhalten mit dem What-If-Tool untersuchen

Das What-If-Tool bietet viele tolle Funktionen. Einige davon werden wir hier untersuchen. Sehen wir uns zuerst den Datenpunkt-Editor an. Sie können einen beliebigen Datenpunkt auswählen, um seine Merkmale zu sehen und die Featurewerte zu ändern. Klicken Sie zuerst auf einen beliebigen Datenpunkt:

2ba944f16240ff4b.png

Links sehen Sie die Featurewerte für den ausgewählten Datenpunkt. Sie können das Ground-Truth-Label dieses Datenpunkts auch mit dem vom Modell vorhergesagten Wert vergleichen. In der linken Seitenleiste können Sie auch Featurewerte ändern und die Modellvorhersage noch einmal ausführen, um die Auswirkungen dieser Änderung auf Ihr Modell zu sehen. Zum Beispiel können wir „gestation_weeks“ für diesen Datenpunkt in 30 ändern, indem wir für eine nochmalige Vorhersage darauf doppelklicken:

aaa6a937c66758cf.png

Mithilfe der Dropdown-Menüs im Plot-Abschnitt des What-If-Tools können Sie alle möglichen benutzerdefinierten Visualisierungen erstellen. Hier ist z. B. ein Diagramm mit den vorhergesagtes Gewicht auf der x-Achse, das Alter der Mutter auf der y-Achse und Punkte, die durch ihren Inferenzfehler eingefärbt sind (dunkler bedeutet einen höheren Unterschied zwischen vorhergesagtem und tatsächlichem Gewicht). Hier sieht es so aus, als würde der Fehler des Modells bei abnehmender Gewichtung geringfügig zunehmen:

cd2ce527a9044e7b.png

Klicken Sie dann links auf die Schaltfläche Teilabhängigkeitsdiagramme. Dies zeigt, wie sich die einzelnen Features auf die Vorhersage des Modells auswirken. Wenn sich beispielsweise die Schwangerschaftszeit erhöht, steigt auch das vorhergesagte Gewicht des Babys:

1fec2a64fb03f432.png

Weitere Ideen für die explorative Datenanalyse mit dem What-If-Tool finden Sie unter den Links am Anfang dieses Abschnitts.

7. Optional: Lokales Git-Repository mit GitHub verbinden

Schließlich erfahren Sie, wie Sie das Git-Repository in unserer Notebookinstanz mit einem Repository in unserem GitHub-Konto verbinden. Für diesen Schritt benötigen Sie ein GitHub-Konto.

Schritt 1: Neues Repository auf GitHub erstellen

Erstellen Sie in Ihrem GitHub-Konto ein neues Repository. Geben Sie einen Namen und eine Beschreibung ein, entscheiden Sie, ob die Datei öffentlich sein soll, und wählen Sie Repository erstellen aus. Sie müssen nicht mit einer README-Datei initialisieren. Auf der nächsten Seite folgen Sie der Anleitung zum Übertragen eines vorhandenen Repositorys über die Befehlszeile.

Öffnen Sie ein Terminalfenster und fügen Sie Ihr neues Repository als Remote-Repository hinzu. Ersetzen Sie username in der Repository-URL unten durch Ihren GitHub-Nutzernamen und your-repo durch den Namen der soeben erstellten Repository-URL:

git remote add origin git@github.com:username/your-repo.git

Schritt 2: In Ihrer Notebookinstanz bei GitHub authentifizieren

Als Nächstes müssen Sie sich von Ihrer Notebookinstanz aus bei GitHub authentifizieren. Dieser Vorgang hängt davon ab, ob Sie die 2-Faktor-Authentifizierung auf GitHub aktiviert haben.

Wenn Sie nicht wissen, wo Sie anfangen sollen, folgen Sie der Anleitung in der GitHub-Dokumentation, um einen SSH-Schlüssel zu erstellen, und fügen Sie dann den neuen Schlüssel zu GitHub hinzu.

Schritt 3: Prüfen, ob das GitHub-Repository korrekt verknüpft ist

Wenn du sichergehen möchtest, dass alles korrekt eingerichtet ist, führe git remote -v in deinem Terminal aus. Ihr neues Repository sollte als Remote-Repository aufgeführt sein. Sobald Sie die URL Ihres GitHub-Repositorys sehen und sich auf Ihrem Notebook bei GitHub authentifiziert haben, können Sie Ihre Notebookinstanz direkt per Push an GitHub übertragen.

Um Ihr lokales Notebook-Git-Repository mit Ihrem neu erstellten GitHub-Repository zu synchronisieren, klicken Sie oben in der Git-Seitenleiste auf die Schaltfläche zum Hochladen der Cloud:

eec001587bb9cfb1.png

Aktualisieren Sie Ihr GitHub-Repository. Der Notebook-Code mit Ihren vorherigen Commits sollte angezeigt werden. Wenn andere Nutzer Zugriff auf Ihr GitHub-Repository haben und die neuesten Änderungen in Ihrem Notebook abrufen möchten, klicken Sie auf das Cloud-Download-Symbol, um diese Änderungen zu synchronisieren.

Auf dem Tab „Verlauf“ der Notebooks-Git-UI können Sie sehen, ob Ihre lokalen Commits mit GitHub synchronisiert werden. In diesem Beispiel entspricht origin/master unserem Repository auf GitHub:

2c3d1eb7cf95c24e.png

Wenn Sie neue Commits erstellen, klicken Sie einfach noch einmal auf die Schaltfläche „Cloud-Upload“, um die Änderungen in Ihr GitHub-Repository zu übertragen.

8. Glückwunsch!

In diesem Lab haben Sie viel getan 👏👏👏

Sie haben Folgendes gelernt:

  • Anpassung einer AI Platform Notebook-Instanz erstellen
  • Ein lokales Git-Repository in dieser Instanz initialisieren, Commits über die Git-UI oder die Befehlszeile hinzufügen und Git-Unterschiede in der Notebook-Git-Benutzeroberfläche ansehen
  • Einfaches TensorFlow 2-Modell erstellen und trainieren
  • What-If-Tool in der Notebookinstanz verwenden
  • Notebook-Git-Repository mit einem externen Repository auf GitHub verbinden

9. Bereinigen

Wenn Sie dieses Notebook weiterverwenden möchten, empfehlen wir Ihnen, es bei Nichtgebrauch auszuschalten. Wählen Sie in der Notebooks-UI in der Cloud Console das Notebook und dann Beenden aus:

ba727f9a0aefbc30.png

Wenn Sie alle Ressourcen löschen möchten, die Sie in diesem Lab erstellt haben, löschen Sie einfach die Notebookinstanz, anstatt sie zu beenden.

Gehen Sie im Navigationsmenü der Cloud Console zu „Storage“ und löschen Sie beide Buckets, die Sie zum Speichern Ihrer Modell-Assets erstellt haben.