Experimente optimal nutzen: Tests für maschinelles Lernen mit Vertex AI verwalten

1. Übersicht

In diesem Lab erstellen Sie mit Vertex AI eine Pipeline, die ein benutzerdefiniertes Keras-Modell in TensorFlow trainiert. Anschließend verwenden Sie die neue Funktion in Vertex AI Experiments, um Modellläufe zu verfolgen und zu vergleichen, um die Kombination von Hyperparametern zu ermitteln, die die beste Leistung erzielt.

Lerninhalte

Die folgenden Themen werden behandelt:

  • Benutzerdefiniertes Keras-Modell trainieren, um Spielerbewertungen vorherzusagen (z.B. Regression)
  • Mit dem Kubeflow Pipelines SDK skalierbare ML-Pipelines erstellen
  • Eine Pipeline mit fünf Schritten erstellen und ausführen, die Daten aus Cloud Storage aufnimmt, die Daten skaliert, das Modell trainiert, es auswertet und das resultierende Modell wieder in Cloud Storage speichert
  • Vertex ML Metadata verwenden, um Modellartefakte wie Modelle und Modellmesswerte zu speichern
  • Vertex AI Experiments verwenden, um die Ergebnisse der verschiedenen Pipelineausführungen zu vergleichen

Die Gesamtkosten für die Ausführung dieses Labs in Google Cloud betragen etwa 1$.

2. Einführung in Vertex AI

In diesem Lab wird das neueste KI-Produkt von Google Cloud verwendet. Vertex AI vereint die ML-Angebote von Google Cloud in einer nahtlosen Entwicklungsumgebung. Bisher musste auf mit AutoML trainierte und benutzerdefinierte Modelle über verschiedene Dienste zugegriffen werden. Das neue Angebot kombiniert diese und weitere, neue Produkte zu einer einzigen API. Sie können auch vorhandene Projekte zu Vertex AI migrieren.

Vertex AI umfasst viele verschiedene Produkte zur Unterstützung von End-to-End-ML-Workflows. In diesem Lab konzentrieren wir uns auf die unten hervorgehobenen Produkte: Experiments, Pipelines, ML Metadata und Workbench

Vertex-Produktübersicht

3. Anwendungsfallübersicht

Wir verwenden ein beliebtes Fußball-Dataset aus der FIFA-Videospielreihe von EA Sports. Es enthält über 25.000 Fußballspiele und mehr als 10.000 Spieler aus den Saisons 2008 bis 2016. Die Daten wurden im Voraus vorverarbeitet, damit Sie leichter loslegen können. Sie verwenden dieses Dataset im gesamten Lab. Es befindet sich jetzt in einem öffentlichen Cloud Storage-Bucket. Weitere Informationen zum Zugriff auf das Dataset finden Sie später in diesem Codelab. Unser Ziel ist es, die Gesamtbewertung eines Spielers anhand verschiedener Aktionen im Spiel wie Abfangen und Strafen vorherzusagen.

Warum ist Vertex AI Experiments für Data Science nützlich?

Data Science ist von Natur aus experimentell. Die Experten werden schließlich nicht kostenlos als Wissenschaftler bezeichnet. Gute Data Scientists sind hypothesengesteuert und verwenden Trial-and-Error, um verschiedene Hypothesen zu testen. Sie hoffen, dass aufeinanderfolgende Iterationen zu einem leistungsfähigeren Modell führen.

Data Science-Teams nutzen zwar Tests, haben aber oft Schwierigkeiten, ihre Arbeit und die „Geheimzutat“ zu verfolgen, die sie durch ihre Tests entdeckt haben. Das hat mehrere Gründe:

  • Das Verfolgen von Trainingsjobs kann umständlich sein, sodass es leicht passieren kann, dass man den Überblick verliert, was funktioniert und was nicht.
  • Dieses Problem wird noch verstärkt, wenn man sich ein Data Science-Team ansieht, da nicht alle Mitglieder Tests verfolgen oder ihre Ergebnisse mit anderen teilen.
  • Die Datenerfassung ist zeitaufwendig und die meisten Teams verwenden manuelle Methoden (z. B. Tabellen oder Dokumente), die zu inkonsistenten und unvollständigen Informationen führen, aus denen man lernen kann.

Kurz gesagt:Vertex AI Experiments erledigt die Arbeit für Sie und hilft Ihnen, Ihre Tests einfacher zu verfolgen und zu vergleichen.

Warum Vertex AI Experiments für Spiele?

Spiele waren schon immer ein Spielplatz für maschinelles Lernen und ML-Tests. Spiele generieren nicht nur Milliarden von Echtzeitereignissen pro Tag, sondern nutzen diese Daten auch, indem sie ML und ML-Tests verwenden, um das Spielerlebnis zu verbessern, Spieler zu binden und die verschiedenen Spieler auf ihrer Plattform zu bewerten. Daher haben wir uns für ein Gaming-Dataset für unsere allgemeine Testübung entschieden.

4. Umgebung einrichten

Für dieses Codelab benötigen Sie ein Google Cloud Platform-Projekt mit aktivierter Abrechnung. Eine Anleitung zum Erstellen eines Projekts finden Sie hier.

Schritt 1: Compute Engine API aktivieren

Rufen Sie Compute Engine auf und wählen Sie Aktivieren aus, falls die API noch nicht aktiviert ist.

Schritt 2: Vertex AI API aktivieren

Rufen Sie den Bereich „Vertex AI“ in der Cloud Console auf und klicken Sie auf **Vertex AI API aktivieren**.

Vertex AI-Dashboard

Schritt 3: Vertex AI Workbench-Instanz erstellen

Klicken Sie im Bereich „Vertex AI“ der Cloud Console auf „Workbench“:

Vertex AI-Menü

Aktivieren Sie die Notebooks API, falls sie noch nicht aktiviert ist.

Notebook_api

Klicken Sie nach der Aktivierung auf VERWALTETE NOTEBOOKS:

Notebooks_UI

Wählen Sie dann NEUES NOTEBOOK aus.

new_notebook

Geben Sie Ihrem Notebook einen Namen und klicken Sie dann auf Erweiterte Einstellungen.

create_notebook

Aktivieren Sie unter „Erweiterte Einstellungen“ das Herunterfahren bei Inaktivität und legen Sie die Anzahl der Minuten auf 60 fest. Das bedeutet, dass Ihr Notebook bei Nichtnutzung automatisch heruntergefahren wird, damit keine unnötigen Kosten entstehen.

idle_timeout

Schritt 4: Notebook öffnen

Nachdem die Instanz erstellt wurde, klicken Sie auf JupyterLab öffnen.

open_jupyterlab

Schritt 5: Authentifizieren (nur beim ersten Mal)

Wenn Sie eine neue Instanz zum ersten Mal verwenden, werden Sie aufgefordert, sich zu authentifizieren. Folgen Sie dazu der Anleitung auf der Benutzeroberfläche.

Authentifizieren

Schritt 6: Geeigneten Kernel auswählen

Verwaltete Notebooks bieten mehrere Kernel in einer einzigen Benutzeroberfläche. Wählen Sie den Kernel für TensorFlow 2 (lokal) aus.

tensorflow_kernel

5. Ersteinrichtung im Notebook

Sie müssen eine Reihe zusätzlicher Schritte ausführen, um Ihre Umgebung in Ihrem Notebook einzurichten, bevor Sie Ihre Pipeline erstellen. Dazu gehören das Installieren zusätzlicher Pakete, das Festlegen von Variablen, das Erstellen Ihres Cloud Storage-Buckets, das Kopieren des Gaming-Datasets aus einem öffentlichen Storage-Bucket sowie das Importieren von Bibliotheken und das Definieren zusätzlicher Konstanten.

Schritt 1: Zusätzliche Pakete installieren

Wir müssen zusätzliche Paketabhängigkeiten installieren, die derzeit nicht in Ihrer Notebookumgebung installiert sind. Ein Beispiel ist das KFP SDK.

!pip3 install --user --force-reinstall 'google-cloud-aiplatform>=1.15' -q --no-warn-conflicts
!pip3 install --user kfp -q --no-warn-conflicts

Starten Sie dann den Notebook-Kernel neu, damit Sie die heruntergeladenen Pakete in Ihrem Notebook verwenden können.

# Automatically restart kernel after installs
import os

if not os.getenv("IS_TESTING"):
    # Automatically restart kernel after installs
    import IPython

    app = IPython.Application.instance()
    app.kernel.do_shutdown(True)

Schritt 2: Variablen festlegen

Wir möchten unsere PROJECT_ID definieren. Wenn Sie Ihre Project_ID nicht kennen, können Sie sie möglicherweise mit gcloud abrufen.PROJECT_ID

import os

PROJECT_ID = ""

# Get your Google Cloud project ID from gcloud
if not os.getenv("IS_TESTING"):
    shell_output = !gcloud config list --format 'value(core.project)' 2>/dev/null
    PROJECT_ID = shell_output[0]
    print("Project ID: ", PROJECT_ID)

Andernfalls legen Sie hier Ihre PROJECT_ID fest.

if PROJECT_ID == "" or PROJECT_ID is None:
    PROJECT_ID = "[your-project-id]"  # @param {type:"string"}

Wir legen auch die Variable REGION fest, die im restlichen Notebook verwendet wird. Unten sind die für Vertex AI unterstützten Regionen aufgeführt. Wir empfehlen, die Region auszuwählen, die Ihnen am nächsten ist.

  • Amerika: us-central1
  • Europa: europe-west4
  • Asien-Pazifik: asia-east1

Verwenden Sie für das Training mit Vertex AI keinen multi-regionalen Bucket. Nicht alle Regionen bieten Unterstützung für alle Vertex-AI-Dienste. Weitere Informationen zu Vertex-AI-Regionen.

#set your region 
REGION = "us-central1"  # @param {type: "string"}

Zum Schluss legen wir eine Variable TIMESTAMP fest. Diese Variable wird verwendet, um Namenskonflikte zwischen Nutzern bei erstellten Ressourcen zu vermeiden. Erstellen Sie einen TIMESTAMP für jede Instanzsitzung und fügen Sie ihn an den Namen der Ressourcen an, die Sie in dieser Anleitung erstellen.

#set timestamp to avoid collisions between multiple users

from datetime import datetime

TIMESTAMP = datetime.now().strftime("%Y%m%d%H%M%S")

Schritt 3: Cloud Storage-Bucket erstellen

Sie müssen einen Cloud Storage-Staging-Bucket angeben und verwenden. Im Staging-Bucket werden alle Daten im Zusammenhang mit Ihren Dataset- und Modellressourcen sitzungsübergreifend aufbewahrt.

Legen Sie unten den Namen des Cloud Storage-Buckets fest. Bucket-Namen dürfen in allen Google Cloud-Projekten nur einmal vorkommen, einschließlich der Projekte außerhalb Ihrer Organisation.

#set cloud storage bucket 
BUCKET_NAME = "[insert bucket name here]"  # @param {type:"string"}
BUCKET_URI = f"gs://{BUCKET_NAME}"

Wenn Ihr Bucket noch nicht vorhanden ist, können Sie die folgende Zelle ausführen, um Ihren Cloud Storage-Bucket zu erstellen.

! gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI

Anschließend können Sie den Zugriff auf Ihren Cloud Storage-Bucket überprüfen, indem Sie die folgende Zelle ausführen.

#verify access 
! gsutil ls -al $BUCKET_URI

Schritt 4: Gaming-Dataset kopieren

Wie bereits erwähnt, verwenden Sie ein beliebtes Gaming-Dataset aus dem Hit-Videospiel FIFA von EA Sports. Wir haben die Vorverarbeitung für Sie erledigt. Sie müssen das Dataset nur aus dem öffentlichen Storage-Bucket kopieren und in den von Ihnen erstellten Bucket verschieben.

# copy the data over to your cloud storage bucket
DATASET_URI = "gs://cloud-samples-data/vertex-ai/structured_data/player_data" 

!gsutil cp -r $DATASET_URI $BUCKET_URI

Schritt 5: Bibliotheken importieren und zusätzliche Konstanten definieren

Als Nächstes importieren wir unsere Bibliotheken für Vertex AI, KFP usw.

import logging
import os
import time

logger = logging.getLogger("logger")
logging.basicConfig(level=logging.INFO)

import kfp.v2.compiler as compiler
# Pipeline Experiments
import kfp.v2.dsl as dsl
# Vertex AI
from google.cloud import aiplatform as vertex_ai
from kfp.v2.dsl import Artifact, Input, Metrics, Model, Output, component
from typing import NamedTuple

Wir definieren auch zusätzliche Konstanten, auf die wir im restlichen Notebook zurückgreifen, z. B. die Dateipfade zu unseren Trainingsdaten.

#import libraries and define constants
# Experiments

TASK = "regression"
MODEL_TYPE = "tensorflow"
EXPERIMENT_NAME = f"{PROJECT_ID}-{TASK}-{MODEL_TYPE}-{TIMESTAMP}"

# Pipeline
PIPELINE_URI = f"{BUCKET_URI}/pipelines"
TRAIN_URI = f"{BUCKET_URI}/player_data/data.csv"
LABEL_URI = f"{BUCKET_URI}/player_data/labels.csv"
MODEL_URI = f"{BUCKET_URI}/model"
DISPLAY_NAME = "experiments-demo-gaming-data"
BQ_DATASET = "player_data"
BQ_LOCATION = "US"  
VIEW_NAME = 'dataset_test'
PIPELINE_JSON_PKG_PATH = "experiments_demo_gaming_data.json"
PIPELINE_ROOT = f"gs://{BUCKET_URI}/pipeline_root"

6. Pipeline erstellen

Jetzt kann es losgehen und wir können Vertex AI verwenden, um unsere Trainingspipeline zu erstellen. Wir initialisieren das Vertex AI SDK, richten unseren Trainingsjob als Pipelinekomponente ein, erstellen unsere Pipeline, senden unsere Pipelineausführungen und verwenden das Vertex AI SDK, um Tests anzusehen und ihren Status zu überwachen.

Schritt 1: Vertex AI SDK initialisieren

Initialisieren Sie das Vertex AI SDK und legen Sie Ihre PROJECT_ID und BUCKET_URI fest.

#initialize vertex AI SDK 
vertex_ai.init(project=PROJECT_ID, staging_bucket=BUCKET_URI)

Schritt 2: Trainingsjob als Pipelinekomponente einrichten

Um mit der Ausführung unserer Tests zu beginnen, müssen wir unseren Trainingsjob angeben, indem wir ihn als Pipelinekomponente definieren. Unsere Pipeline verwendet Trainingsdaten und Hyperparameter (z.B. DROPOUT_RATE, LEARNING_RATE, EPOCHS) als Eingaben und gibt Modellmesswerte (z.B. MAE und RMSE) und ein Modellartefakt aus.

@component(
    packages_to_install=[
        "numpy==1.21.0",
        "pandas==1.3.5", 
        "scikit-learn==1.0.2",
        "tensorflow==2.9.0",
    ]
)
def custom_trainer(
    train_uri: str,
    label_uri: str,
    dropout_rate: float,
    learning_rate: float,
    epochs: int,
    model_uri: str,
    metrics: Output[Metrics], 
    model_metadata: Output[Model], 
    

):

    # import libraries
    import logging
    import uuid
    from pathlib import Path as path

    import pandas as pd
    import tensorflow as tf
    from tensorflow import keras
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Dense
    from tensorflow.keras.layers import Dropout
    from tensorflow.keras.metrics import Metric 
    from sklearn.metrics import accuracy_score
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import mean_absolute_error
    import numpy as np
    from math import sqrt
    import os
    import tempfile

    # set variables and use gcsfuse to update prefixes
    gs_prefix = "gs://"
    gcsfuse_prefix = "/gcs/"
    train_path = train_uri.replace(gs_prefix, gcsfuse_prefix)
    label_path = label_uri.replace(gs_prefix, gcsfuse_prefix)
    model_path = model_uri.replace(gs_prefix, gcsfuse_prefix)

    def get_logger():

        logger = logging.getLogger(__name__)
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        handler.setFormatter(
            logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
        )
        logger.addHandler(handler)
        return logger

    def get_data(
        train_path: str, 
        label_path: str
    ) -> (pd.DataFrame): 
        
        
        #load data into pandas dataframe
        data_0 = pd.read_csv(train_path)
        labels_0 = pd.read_csv(label_path)
        
        #drop unnecessary leading columns
        
        data = data_0.drop('Unnamed: 0', axis=1)
        labels = labels_0.drop('Unnamed: 0', axis=1)
        
        #save as numpy array for reshaping of data 
        
        labels = labels.values
        data = data.values
    
        # Split the data
        labels = labels.reshape((labels.size,))
        train_data, test_data, train_labels, test_labels = train_test_split(data, labels, test_size=0.2, shuffle=True, random_state=7)
    
        #Convert data back to pandas dataframe for scaling
        
        train_data = pd.DataFrame(train_data)
        test_data = pd.DataFrame(test_data)
        train_labels = pd.DataFrame(train_labels)
        test_labels = pd.DataFrame(test_labels)
        
        #Scale and normalize the training dataset
        
        scaler = StandardScaler()
        scaler.fit(train_data)
        train_data = pd.DataFrame(scaler.transform(train_data), index=train_data.index, columns=train_data.columns)
        test_data = pd.DataFrame(scaler.transform(test_data), index=test_data.index, columns=test_data.columns)
        
        return train_data,train_labels, test_data, test_labels 
    
        """ Train your Keras model passing in the training data and values for learning rate, dropout rate,and the number of epochs """

    def train_model(
        learning_rate: float, 
        dropout_rate: float,
        epochs: float,
        train_data: pd.DataFrame,
        train_labels: pd.DataFrame):
 
        # Train tensorflow model
        param = {"learning_rate": learning_rate, "dropout_rate": dropout_rate, "epochs": epochs}
        model = Sequential()
        model.add(Dense(500, input_dim=train_data.shape[1], activation= "relu"))
        model.add(Dropout(param['dropout_rate']))
        model.add(Dense(100, activation= "relu"))
        model.add(Dense(50, activation= "relu"))
        model.add(Dense(1))
            
        model.compile(
        tf.keras.optimizers.Adam(learning_rate= param['learning_rate']),
        loss='mse',
        metrics=[tf.keras.metrics.RootMeanSquaredError(),tf.keras.metrics.MeanAbsoluteError()])
        
        model.fit(train_data, train_labels, epochs= param['epochs'])
        
        return model

    # Get Predictions
    def get_predictions(model, test_data):

        dtest = pd.DataFrame(test_data)
        pred = model.predict(dtest)
        return pred

    # Evaluate predictions with MAE
    def evaluate_model_mae(pred, test_labels):
        
        mae = mean_absolute_error(test_labels, pred)
        return mae
    
    # Evaluate predictions with RMSE
    def evaluate_model_rmse(pred, test_labels):

        rmse = np.sqrt(np.mean((test_labels - pred)**2))
        return rmse    
 
    
    #Save your trained model in GCS     
    def save_model(model, model_path):

        model_id = str(uuid.uuid1())
        model_path = f"{model_path}/{model_id}"        
        path(model_path).parent.mkdir(parents=True, exist_ok=True)
        model.save(model_path + '/model_tensorflow')

        
    # Main ----------------------------------------------
    
    train_data, train_labels, test_data, test_labels = get_data(train_path, label_path)
    model = train_model(learning_rate, dropout_rate, epochs, train_data,train_labels )
    pred = get_predictions(model, test_data)
    mae = evaluate_model_mae(pred, test_labels)
    rmse = evaluate_model_rmse(pred, test_labels)
    save_model(model, model_path)

    # Metadata ------------------------------------------

    #convert numpy array to pandas series
    mae = pd.Series(mae)
    rmse = pd.Series(rmse)

    #log metrics and model artifacts with ML Metadata. Save metrics as a list. 
    metrics.log_metric("mae", mae.to_list()) 
    metrics.log_metric("rmse", rmse.to_list()) 
    model_metadata.uri = model_uri

Schritt 3: Pipeline erstellen

Jetzt richten wir unseren Workflow mit der Domain Specific Language (DSL) ein, die in KFP verfügbar ist, und kompilieren unsere Pipeline in eine JSON-Datei.

# define our workflow

@dsl.pipeline(name="gaming-custom-training-pipeline")
def pipeline(
    train_uri: str,
    label_uri: str,
    dropout_rate: float,
    learning_rate: float,
    epochs: int,
    model_uri: str,
):

    custom_trainer(
        train_uri,label_uri, dropout_rate,learning_rate,epochs, model_uri
    )
#compile our pipeline
compiler.Compiler().compile(pipeline_func=pipeline, package_path="gaming_pipeline.json")

Schritt 4: Pipelineausführungen senden

Die Einrichtung unserer Komponente und die Definition unserer Pipeline sind abgeschlossen. Wir können jetzt verschiedene Ausführungen der oben angegebenen Pipeline senden. Dazu müssen wir die Werte für unsere verschiedenen Hyperparameter wie folgt definieren:

runs = [
    {"dropout_rate": 0.001, "learning_rate": 0.001,"epochs": 20},
    {"dropout_rate": 0.002, "learning_rate": 0.002,"epochs": 25},
    {"dropout_rate": 0.003, "learning_rate": 0.003,"epochs": 30},
    {"dropout_rate": 0.004, "learning_rate": 0.004,"epochs": 35},
    {"dropout_rate": 0.005, "learning_rate": 0.005,"epochs": 40},
]

Nachdem die Hyperparameter definiert wurden, können wir eine for loop verwenden, um die verschiedenen Ausführungen der Pipeline zu übergeben:

for i, run in enumerate(runs):

    job = vertex_ai.PipelineJob(
        display_name=f"{EXPERIMENT_NAME}-pipeline-run-{i}",
        template_path="gaming_pipeline.json",
        pipeline_root=PIPELINE_URI,
        parameter_values={
            "train_uri": TRAIN_URI,
            "label_uri": LABEL_URI,
            "model_uri": MODEL_URI,
            **run,
        },
    )
    job.submit(experiment=EXPERIMENT_NAME)

Schritt 5: Vertex AI SDK verwenden, um Tests anzusehen

Mit dem Vertex AI SDK können Sie den Status von Pipelineausführungen überwachen. Sie können damit auch Parameter und Messwerte der Pipelineausführungen im Vertex AI-Test zurückgeben. Verwenden Sie den folgenden Code, um die Parameter für Ihre Ausführungen und den aktuellen Status zu sehen.

# see state/status of all the pipeline runs

vertex_ai.get_experiment_df(EXPERIMENT_NAME)

Mit dem folgenden Code können Sie Updates zum Status Ihrer Pipelineausführungen erhalten.

#check on current status
while True:
    pipeline_experiments_df = vertex_ai.get_experiment_df(EXPERIMENT_NAME)
    if all(
        pipeline_state != "COMPLETE" for pipeline_state in pipeline_experiments_df.state
    ):
        print("Pipeline runs are still running...")
        if any(
            pipeline_state == "FAILED"
            for pipeline_state in pipeline_experiments_df.state
        ):
            print("At least one Pipeline run failed")
            break
    else:
        print("Pipeline experiment runs have completed")
        break
    time.sleep(60)

Sie können auch bestimmte Pipelinejobs mit dem run_name aufrufen.

# Call the pipeline runs based on the experiment run name
pipeline_experiments_df = vertex_ai.get_experiment_df(EXPERIMENT_NAME)
job = vertex_ai.PipelineJob.get(pipeline_experiments_df.run_name[0])
print(job.resource_name)
print(job._dashboard_uri())

Schließlich können Sie den Status Ihrer Ausführungen in festgelegten Intervallen (z. B. alle 60 Sekunden) aktualisieren, um zu sehen, wie sich der Status von RUNNING zu FAILED oder COMPLETE ändert.

# wait 60 seconds and view state again
import time
time.sleep(60)
vertex_ai.get_experiment_df(EXPERIMENT_NAME)

7. Leistungsstärkste Ausführung ermitteln

Wir haben jetzt die Ergebnisse unserer Pipelineausführungen. Sie fragen sich vielleicht, was Sie aus den Ergebnissen lernen können. Die Ausgabe Ihrer Tests sollte fünf Zeilen enthalten, eine für jede Ausführung der Pipeline. Sie sieht in etwa so aus:

Final-Results-Snapshot

Sowohl MAE als auch RMSE sind Maße für den durchschnittlichen Vorhersagefehler des Modells. Ein niedrigerer Wert für beide Messwerte ist in den meisten Fällen wünschenswert. Anhand der Ausgabe von Vertex AI Experiments können wir sehen, dass unsere erfolgreichste Ausführung in Bezug auf beide Messwerte die letzte Ausführung mit einer dropout_rate von 0,001, einer learning_rate von 0,001 und einer Gesamtzahl von epochs von 20 war. Basierend auf diesem Test werden diese Modellparameter letztendlich in der Produktion verwendet, da sie die beste Modellleistung erzielen.

Damit haben Sie das Lab abgeschlossen.

🎉 Das wars! 🎉

Sie haben gelernt, wie Sie Vertex AI für Folgendes verwenden:

  • Benutzerdefiniertes Keras-Modell trainieren, um Spielerbewertungen vorherzusagen (z.B. Regression)
  • Mit dem Kubeflow Pipelines SDK skalierbare ML-Pipelines erstellen
  • Eine Pipeline mit fünf Schritten erstellen und ausführen, die Daten aus GCS aufnimmt, die Daten skaliert, das Modell trainiert, es auswertet und das resultierende Modell wieder in GCS speichert
  • Vertex ML Metadata verwenden, um Modellartefakte wie Modelle und Modellmesswerte zu speichern
  • Vertex AI Experiments verwenden, um die Ergebnisse der verschiedenen Pipelineausführungen zu vergleichen

Weitere Informationen zu den verschiedenen Bereichen von Vertex finden Sie in der Dokumentation.

8. Bereinigen

Damit Ihnen keine Kosten in Rechnung gestellt werden, sollten Sie die in diesem Lab erstellten Ressourcen löschen.

Schritt 1: Notebookinstanz beenden oder löschen

Wenn Sie das in diesem Lab erstellte Notebook weiterhin verwenden möchten, sollten Sie es bei Nichtnutzung deaktivieren. Wählen Sie in der Notebook-Benutzeroberfläche in der Cloud Console das Notebook aus und klicken Sie dann auf Beenden. Wenn Sie die Instanz vollständig löschen möchten, wählen Sie Löschen aus:

Instanz beenden

Schritt 2: Cloud Storage-Bucket löschen

Wenn Sie den Storage-Bucket löschen möchten, rufen Sie im Navigationsmenü der Cloud Console „Storage“ auf, wählen Sie Ihren Bucket aus und klicken Sie auf „Löschen“:

Speicher löschen