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-Modelle prototypisieren können.

Lerninhalte

Die folgenden Themen werden behandelt:

  • AI Platform Notebooks-Instanz erstellen und anpassen
  • Code in Notebooks mit Git verfolgen, das direkt in AI Platform Notebooks eingebunden ist
  • What-If-Tool in einem Notebook verwenden

Die Gesamtkosten für die Ausführung dieses Labs in Google Cloud belaufen sich auf etwa 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-Projekt mit aktivierter Abrechnung, um dieses Codelab ausführen zu können. Eine Anleitung zum Erstellen eines Projekts finden Sie hier.

Schritt 2: Compute Engine API aktivieren

Rufen Sie Compute Engine auf und wählen Sie Aktivieren aus, falls die Option noch nicht aktiviert ist. Sie benötigen sie, um Ihre Notebookinstanz zu erstellen.

Schritt 3: Notebook-Instanz erstellen

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

9f2bb4dec1ba4f4f.png

Geben Sie der Instanz einen Namen oder verwenden Sie den Standardnamen. Anschließend 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 Bildtyp, die Maschinengröße und die Anzahl der GPUs. Wir verwenden die Standardeinstellungen für Region und Umgebung. Als 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.

Sobald 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 nach dem Öffnen der Instanz ein neues Verzeichnis mit dem Namen „codelab“. In diesem Verzeichnis arbeiten wir während des gesamten Labs:

c16a821546acd92.png

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

4390b1614ae8eae4.png

Benennen Sie das Notizbuch in demo.ipynb oder einen anderen 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 werden:

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 dem Notebook verbinden

BigQuery, das Big-Data-Data Warehouse von Google Cloud, stellt zahlreiche Datasets zur Verfügung, die Sie analysieren können. AI Platform Notebooks unterstützt die direkte Einbindung in BigQuery ohne Authentifizierung.

In diesem Lab verwenden wir den Dataset „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 demografischen Informationen zu den Eltern des Babys. Wir verwenden einen Teil der Merkmale, um das Geburtsgewicht eines Babys vorherzusagen.

Schritt 1: BigQuery-Daten in das Notebook herunterladen

Wir verwenden die Python-Clientbibliothek für BigQuery, um die Daten in einen Pandas-DataFrame herunterzuladen. Der ursprüngliche Datensatz hat eine Größe von 21 GB und enthält 123 Millionen Zeilen. Der Einfachheit halber verwenden wir nur 10.000 Zeilen aus dem Datensatz.

Erstellen Sie die Abfrage und rufen Sie mit dem folgenden Code eine Vorschau des resultierenden DataFrames auf. Hier sehen wir vier Merkmale aus dem ursprünglichen Datensatz sowie das Gewicht des Babys (das, was unser Modell vorhersagen wird). Der Datensatz umfasst viele Jahre, für dieses Modell verwenden wir jedoch nur Daten 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()

Um eine Zusammenfassung der numerischen Merkmale in unserem Dataset zu erhalten, führen Sie Folgendes aus:

df.describe()

Hier sehen Sie den Mittelwert, die Standardabweichung, das Minimum und andere Messwerte für unsere numerischen Spalten. Sehen wir uns abschließend einige Daten in unserer booleschen Spalte an, die das Geschlecht des Babys angibt. Dazu können wir die Pandas-Methode value_counts verwenden:

df['is_male'].value_counts()

Offenbar ist der Datensatz nach Geschlecht fast ausgewogen (50/50).

Schritt 2: Datensatz für das Training vorbereiten

Nachdem wir den Datensatz als Pandas-DataFrame in unser Notebook heruntergeladen haben, können wir eine Vorverarbeitung durchführen und ihn in Trainings- und Testsätze aufteilen.

Entfernen Sie zuerst die Zeilen mit Nullwerten aus dem Datensatz und mischen Sie die Daten:

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

Als Nächstes extrahieren wir die Label-Spalte in eine separate Variable und erstellen einen DataFrame, der nur unsere Features enthält. Da is_male ein boolescher Wert ist, wandeln wir ihn in eine Ganzzahl um, damit 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 unseres Datasets mit data.head() aufrufen, sollten Sie die vier Funktionen sehen, die wir für das Training verwenden werden.

4. Git initialisieren

AI Platform Notebooks ist direkt in Git eingebunden, sodass Sie die Versionskontrolle direkt in Ihrer Notebookumgebung durchführen können. So können Sie Code direkt in der Notebook-Benutzeroberfläche oder über das in JupyterLab verfügbare Terminal committen. In diesem Abschnitt initialisieren wir ein Git-Repository in unserem Notebook und führen unseren ersten Commit über die Benutzeroberfläche aus.

Schritt 1: Git-Repository initialisieren

Wählen Sie in Ihrem Codelab-Verzeichnis in der oberen Menüleiste von JupyterLab Git und dann Init aus:

d9f1729358f18e58.png

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

1648d6828f11a6db.png

Schritt 2: Ersten Commit ausführen

In dieser Benutzeroberfläche können Sie einem Commit Dateien hinzufügen, Dateivergleiche ansehen (mehr dazu später) und Ihre Änderungen committen. Beginnen wir damit, die gerade hinzugefügte Notebookdatei zu committen.

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

fe7366522a3a268f.png

Gib deinen Namen und deine E-Mail-Adresse ein, wenn du dazu aufgefordert wirst. Kehren Sie dann zum Tab Verlauf zurück, um Ihren ersten Commit zu sehen:

d03567c3592afb77.png

Die Screenshots stimmen aufgrund von Updates seit der Veröffentlichung dieses Labs möglicherweise 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 Testsätze aufteilen

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

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

Jetzt sind wir bereit, unser TensorFlow-Modell zu 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 Stapel von Schichten definieren können. Hier ist der gesamte Code, den wir zum Erstellen unseres Modells benötigen:

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

Anschließend kompilieren wir das Modell, damit es trainiert werden kann. Hier wählen wir den Optimizer, die Verlustfunktion und die Messwerte des Modells aus, die während des Trainings protokolliert werden sollen. Da es sich um ein Regressionsmodell handelt (Vorhersage eines numerischen Werts), verwenden wir den mittleren quadratischen Fehler anstelle der Genauigkeit als Messwert:

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 Anzahl der trainierbaren Parameter Ihres Modells in jeder Schicht sehen.

Jetzt können wir unser Modell trainieren. Dazu müssen wir nur die Methode fit() aufrufen und unsere Trainingsdaten und Labels übergeben. Hier verwenden wir den optionalen Parameter „validation_split“, der einen Teil unserer Trainingsdaten enthält, um das Modell in jedem Schritt zu validieren. Idealerweise sollten sowohl der Trainings- als auch der Validierungsverlust sinken. Denken Sie aber daran, dass wir uns in diesem Beispiel mehr auf die Tools für Modelle und Notebooks als auf die 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, generieren wir einige Testvorhersagen für die ersten 10 Beispiele aus unserem Test-Dataset.

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

Anschließend gehen wir die Vorhersagen unseres Modells durch 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: Mit „git diff“ Änderungen vergleichen und übernehmen

Nachdem Sie einige Änderungen am Notebook vorgenommen haben, können Sie die Git-Diff-Funktion in der Notebooks-Git-Benutzeroberfläche ausprobieren. Das Notebook demo.ipynb sollte jetzt in der Benutzeroberfläche im Bereich „Geändert“ angezeigt werden. Bewegen Sie den Mauszeiger auf den Dateinamen und klicken Sie auf das Differenzsymbol:

a370facb3632fb32.png

Dadurch sollte ein Vergleich Ihrer Änderungen angezeigt werden, z. B. so:

461c502bd3ab910e.png

Dieses Mal committen wir unsere Änderungen über die Befehlszeile mit dem Terminal. Wählen Sie in der oberen Menüleiste von JupyterLab im Menü Git die Option Git-Befehl im Terminal aus. Wenn Sie den Git-Tab in der 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 Notebookdatei für das Commit zu steuern:

git add demo.ipynb

Führen Sie dann den folgenden Befehl aus, um Ihre Änderungen zu committen. Sie können eine beliebige Commit-Nachricht verwenden:

git commit -m "Build and train TF model"

Dann sollte Ihr letzter Commit im Verlauf angezeigt werden:

a4b44045e97cb7a7.png

6. What-If-Tool direkt in Google Notizen verwenden

Das What-If-Tool ist eine interaktive visuelle Benutzeroberfläche, mit der Sie Ihre Datensätze visualisieren und die Ausgabe Ihrer ML-Modelle besser nachvollziehen können. Es ist ein Open-Source-Tool, das vom PAIR-Team bei Google entwickelt wurde. Er funktioniert zwar mit allen Modelltypen, bietet aber einige Funktionen, die ausschließlich für die Cloud AI Platform entwickelt wurden.

Das What-If-Tool ist in Cloud AI Platform Notebooks-Instanzen mit TensorFlow vorinstalliert. Hier sehen wir uns an, wie sich unser Modell insgesamt schlägt, und untersuchen sein Verhalten bei Datenpunkten aus unserem Testsatz.

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). So können wir die Vorhersagen unseres Modells mit der Ground Truth vergleichen. Führen Sie die folgende Codezeile aus, um einen neuen DataFrame mit unseren Testbeispielen und ihren Labels zu erstellen:

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

In diesem Lab verknüpfen 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 in unserem Modell ausführt:

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

Schritt 2: Was-wäre-wenn-Tool erstellen

Wir erstellen eine Instanz des What-If-Tools und übergeben ihm 500 Beispiele aus dem zusammengefügten Test-Dataset und die Ground-Truth-Labels, die wir gerade erstellt haben. Wir erstellen eine Instanz von WitConfigBuilder, um das Tool einzurichten. Dabei übergeben wir ihm unsere Daten, die oben definierte benutzerdefinierte Vorhersagefunktion, unser Ziel (das, was wir 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 Simulationstool geladen wird, sollte es in etwa so aussehen:

fcdc1cb7ed8e364e.png

Auf der X-Achse sehen Sie die Testdatenpunkte, die nach dem prognostizierten Gewichtswert weight_pounds des Modells verteilt sind.

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

Mit dem What-If-Tool können Sie viele coole Dinge ausprobieren. Wir werden hier nur einige davon untersuchen. Sehen wir uns zuerst den Datenpunkt-Editor an. Sie können einen beliebigen Datenpunkt auswählen, um seine Features zu sehen und die Featurewerte zu ändern. Klicken Sie zuerst auf einen beliebigen Datenpunkt:

2ba944f16240ff4b.png

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

aaa6a937c66758cf.png

Mit den Drop-down-Menüs im Bereich „Plot“ des What-If-Tools können Sie alle möglichen benutzerdefinierten Visualisierungen erstellen. Hier sehen Sie beispielsweise ein Diagramm mit dem prognostizierten Gewicht der Modelle auf der x-Achse, dem Alter der Mutter auf der y-Achse und Punkten, die nach dem Inferenzfehler eingefärbt sind (je dunkler, desto größer ist der Unterschied zwischen dem prognostizierten und dem tatsächlichen Gewicht). Hier sieht es so aus, als würde der Fehler des Modells mit abnehmendem Gewicht leicht ansteigen:

cd2ce527a9044e7b.png

Klicken Sie als Nächstes links auf die Schaltfläche Partial-Dependence-Diagramme. So sehen Sie, wie sich die einzelnen Features auf die Vorhersage des Modells auswirken. So steigt beispielsweise das vom Modell vorhergesagte Babygewicht mit zunehmender Schwangerschaftsdauer:

1fec2a64fb03f432.png

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

7. Optional: Lokales Git-Repository mit GitHub verbinden

Abschließend erfahren Sie, wie Sie das Git-Repository in unserer Notebookinstanz mit einem Repository in unserem GitHub-Konto verbinden. Wenn Sie diesen Schritt ausführen möchten, benötigen Sie ein GitHub.

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 es öffentlich sein soll, und wählen Sie Repository erstellen aus. Sie müssen es nicht mit einem README initialisieren. Auf der nächsten Seite folgen Sie der Anleitung zum Pushen eines vorhandenen Repositories über die Befehlszeile.

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

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

Schritt 2: In Ihrer Notebooks-Instanz bei GitHub authentifizieren

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

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

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

Führen Sie git remote -v in Ihrem Terminal aus, um zu prüfen, ob die Einrichtung korrekt ist. Ihr neues Repository sollte als Remote-Repository aufgeführt sein. Sobald Sie die URL Ihres GitHub-Repositories sehen und sich über Ihr Notebook bei GitHub authentifiziert haben, können Sie direkt von Ihrer Notebook-Instanz aus auf GitHub pushen.

Wenn Sie Ihr lokales Notebook-Git-Repository mit Ihrem neu erstellten GitHub-Repository synchronisieren möchten, klicken Sie oben in der Git-Seitenleiste auf die Schaltfläche „Cloud-Upload“:

eec001587bb9cfb1.png

Wenn Sie Ihr GitHub-Repository aktualisieren, sollte der Notebook-Code mit Ihren vorherigen Commits angezeigt werden. Wenn andere Nutzer Zugriff auf Ihr GitHub-Repository haben und Sie die neuesten Änderungen in Ihr Notebook herunterladen möchten, klicken Sie auf das Symbol für den Cloud-Download, um diese Änderungen zu synchronisieren.

Auf dem Tab „Verlauf“ der Git-Benutzeroberfläche von Notebooks sehen Sie, ob Ihre lokalen Commits mit GitHub synchronisiert sind. In diesem Beispiel entspricht origin/master unserem Repository auf GitHub:

2c3d1eb7cf95c24e.png

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

8. Glückwunsch!

Sie haben in diesem Lab viel gelernt. 👏👏👏

Zusammenfassend haben Sie gelernt, wie Sie

  • AI Platform Notebook-Instanz erstellen und anpassen
  • In dieser Instanz ein lokales Git-Repository initialisieren, Commits über die Git-Benutzeroberfläche oder die Befehlszeile hinzufügen und Git-Diffs in der Git-Benutzeroberfläche von Notebooks ansehen
  • Einfaches TensorFlow 2-Modell erstellen und trainieren
  • What-If-Tool in Ihrer Notebook-Instanz verwenden
  • Git-Repository des Notebooks mit einem externen Repository auf GitHub verbinden

9. Bereinigen

Wenn Sie dieses Notebook weiterhin verwenden möchten, sollten Sie es ausschalten, wenn Sie es nicht verwenden. Wählen Sie in der Notebook-Benutzeroberfläche in der Cloud Console das Notebook und dann Anhalten aus:

ba727f9a0aefbc30.png

Wenn Sie alle in diesem Lab erstellten Ressourcen löschen möchten, löschen Sie einfach die Notebook-Instanz, anstatt sie anzuhalten.

Gehen Sie in der Cloud Console über das Navigationsmenü zu „Speicher“ und löschen Sie die beiden Buckets, die Sie zum Speichern Ihrer Modell-Assets erstellt haben.