Vertex AI Vizier-Studien erstellen

Auf dieser Seite wird beschrieben, wie Sie mithilfe von Python API-Anfragen an Vertex AI Vizier senden. Informationen zur Funktionsweise von Vertex AI Vizier finden Sie in der Übersicht zu Vertex AI Vizier.

Hinweise

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Vertex AI API aktivieren.

    Aktivieren Sie die API

  4. Erstellen Sie ein Dienstkonto:

    1. Wechseln Sie in der Google Cloud Console zur Seite Dienstkonto erstellen.

      Zur Seite „Dienstkonto erstellen“
    2. Wählen Sie Ihr Projekt aus.
    3. Geben Sie im Feld Dienstkontoname einen Namen ein. Die Google Cloud Console füllt das Feld Dienstkonto-ID anhand dieses Namens aus.

      Geben Sie im Feld Dienstkontobeschreibung eine Beschreibung ein. Beispiel: Service account for quickstart.

    4. Klicken Sie auf Erstellen und fortfahren.
    5. Weisen Sie dem Dienstkonto die Rolle Project > Owner zu.

      Wenn Sie die Rolle zuweisen möchten, suchen Sie die Liste Rolle auswählen und wählen Sie Project > Owner aus.

    6. Klicken Sie auf Weiter.
    7. Klicken Sie auf Fertig, um das Erstellen des Dienstkontos abzuschließen.

      Schließen Sie das Browserfenster nicht. Sie verwenden es in der nächsten Aufgabe.

  5. Erstellen Sie einen Dienstkontoschlüssel:

    1. Klicken Sie in der Google Cloud Console auf die E-Mail-Adresse des von Ihnen erstellten Dienstkontos.
    2. Klicken Sie auf Schlüssel.
    3. Klicken Sie auf Schlüssel hinzufügen und dann auf Neuen Schlüssel erstellen.
    4. Klicken Sie auf Erstellen. Daraufhin wird eine JSON-Schlüsseldatei auf Ihren Computer heruntergeladen.
    5. Klicken Sie auf Schließen.
  6. Legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS auf den Pfad der JSON-Datei fest, die Ihre Anmeldedaten enthält. Diese Variable gilt nur für Ihre aktuelle Shell-Sitzung. Wenn Sie eine neue Sitzung öffnen, müssen Sie die Variable neu festlegen.

  7. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  8. Vertex AI API aktivieren.

    Aktivieren Sie die API

  9. Erstellen Sie ein Dienstkonto:

    1. Wechseln Sie in der Google Cloud Console zur Seite Dienstkonto erstellen.

      Zur Seite „Dienstkonto erstellen“
    2. Wählen Sie Ihr Projekt aus.
    3. Geben Sie im Feld Dienstkontoname einen Namen ein. Die Google Cloud Console füllt das Feld Dienstkonto-ID anhand dieses Namens aus.

      Geben Sie im Feld Dienstkontobeschreibung eine Beschreibung ein. Beispiel: Service account for quickstart.

    4. Klicken Sie auf Erstellen und fortfahren.
    5. Weisen Sie dem Dienstkonto die Rolle Project > Owner zu.

      Wenn Sie die Rolle zuweisen möchten, suchen Sie die Liste Rolle auswählen und wählen Sie Project > Owner aus.

    6. Klicken Sie auf Weiter.
    7. Klicken Sie auf Fertig, um das Erstellen des Dienstkontos abzuschließen.

      Schließen Sie das Browserfenster nicht. Sie verwenden es in der nächsten Aufgabe.

  10. Erstellen Sie einen Dienstkontoschlüssel:

    1. Klicken Sie in der Google Cloud Console auf die E-Mail-Adresse des von Ihnen erstellten Dienstkontos.
    2. Klicken Sie auf Schlüssel.
    3. Klicken Sie auf Schlüssel hinzufügen und dann auf Neuen Schlüssel erstellen.
    4. Klicken Sie auf Erstellen. Daraufhin wird eine JSON-Schlüsseldatei auf Ihren Computer heruntergeladen.
    5. Klicken Sie auf Schließen.
  11. Legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS auf den Pfad der JSON-Datei fest, die Ihre Anmeldedaten enthält. Diese Variable gilt nur für Ihre aktuelle Shell-Sitzung. Wenn Sie eine neue Sitzung öffnen, müssen Sie die Variable neu festlegen.

  12. Vertex AI SDK für Python installieren

Konstanten definieren

Führen Sie zum Definieren von Konstanten die folgenden Befehle aus und ersetzen Sie REGION und PROJECT_ID durch Ihre Region und die Projekt-ID. Erstellen Sie einen eigenen Studiennamen oder verwenden Sie die vorgeschlagenen Werte.

import json
import datetime
from google.cloud import aiplatform

REGION = "REGION"
PROJECT_ID = "PROJECT_ID"

# The following placeholder variables are automatically filled in.
STUDY_DISPLAY_NAME = '{}_study_{}'.format(PROJECT_ID.replace('-', ''), datetime.datetime.now().strftime('%Y%m%d_%H%M%S')) #@param {type: 'string'}
ENDPOINT = REGION + '-aiplatform.googleapis.com'
PARENT = 'projects/{}/locations/{}'.format(PROJECT_ID, REGION)

API-Anfragen erstellen

Die folgenden Befehlszeilen-API-Anfragen sind in Python geschrieben.

Studie erstellen

Eine Studie ist eine Reihe von experimentellen oder anderen Tests, mit denen Sie Ihre Hyperparameter oder Parameter optimieren können.

Im folgenden Beispiel soll y = x^2 mit x im Bereich von [-10. 10] maximiert werden. Dieses Beispiel hat nur einen Parameter und nutzt eine einfach berechnete Funktion, um die Verwendung von Vertex AI Vizier zu demonstrieren.

param_x = {
    'parameter_id': 'x',
    'double_value_spec': {
        'min_value': -10.0,
        'max_value': 10.0
    }
}

metric_y = {
    'metric_id': 'y',
    'goal': 'MAXIMIZE'
}

study = {
    'display_name': STUDY_DISPLAY_NAME,
    'study_spec': {
      'algorithm': 'RANDOM_SEARCH',
      'parameters': [param_x],
      'metrics': [metric_y],
    }
}

Zum Erstellen der Studie mithilfe Ihrer Studienkonfiguration senden Sie die folgende Anfrage über VizierServiceClient. Verwenden Sie die zurückgegebene STUDY_NAME, um die Studie abzufragen.

vizier_client = aiplatform.gapic.VizierServiceClient(client_options=dict(api_endpoint=ENDPOINT))
study = vizier_client.create_study(parent=PARENT, study=study)
STUDY_NAME = study.name

Studie ansehen

Nachdem die Studie erstellt wurde, finden Sie sie in der Google Cloud Console im Abschnitt „Vertex AI“ auf der Seite Tests.

Zur Seite „Tests“

Studie abrufen

Senden Sie die folgende Anfrage, um eine Studie zu erhalten.

vizier_client.get_study({'name': STUDY_NAME})

Studien auflisten

Senden Sie die folgende Anfrage, wenn Sie die Studien in einem bestimmten Projekt und einer bestimmten Region auflisten möchten:

vizier_client.list_studies({'parent': PARENT})

Vorgeschlagene Testversionen abrufen

Um einen Testvorschlag von Vertex AI Vizier zu erhalten, erstellen Sie eine Anfrage mit einem SUGGEST_COUNT und einem CLIENT_ID. Übergeben Sie diese Informationen an Vertex AI Vizier, indem Sie die Anfrage senden.

Erstellen Sie die Anfrage mit den folgenden Befehlen. Ändern Sie SUGGEST_COUNT in die Anzahl der Vorschläge, die Sie von jeder Anfrage erhalten möchten.

suggest_response = vizier_client.suggest_trials({
    'parent': STUDY_NAME,
    'suggestion_count': SUGGEST_COUNT,
    'client_id': CLIENT_ID
    })

suggest_trials startet einen Vorgang mit langer Ausführungszeit, um den Test zu erstellen. Die Antwort informiert Sie darüber, dass Vertex AI Vizier an den Testvorschlägen arbeitet.

Verwenden Sie die Funktion result(), um auf das zurückgegebene Ergebnis zu warten.

suggest_response.result().trials

Das folgende Format zeigt einen Beispieltest. In diesem Test wird vorgeschlagen, den Wert 0.1 für den Parameter x zu verwenden.

name: "TRIAL_ID"
state: ACTIVE
parameters {
  parameter_id: "x"
  value {
    number_value: 0.1
  }
}
start_time {
  seconds: 1618011215
}

Verwenden Sie TRIAL_ID aus der vorherigen Antwort, um den Test abzurufen:

vizier_client.get_trial({
        'name': TRIAL_ID
      })

Testergebnisse auswerten

Nachdem Sie die Testvorschläge erhalten haben, bewerten Sie jeden Test und erfassen jedes Ergebnis als Messung.

Wenn die Funktion, die Sie optimieren möchten, beispielsweise y = x^2 ist, bewerten Sie die Funktion mit dem im Test vorgeschlagenen Wert von x. Bei Verwenden des vorgeschlagenen Werts 0.1 wird die Funktion mit y = 0.1 * 0.1 bewertet, und das Ergebnis ist 0.01.

Messung hinzufügen

Nachdem Sie den Testvorschlag bewertet haben, um eine Messung zu erhalten, fügen Sie die Messung Ihrem Test hinzu.

Verwenden Sie die folgenden Befehle, um die Messung zu speichern und die Anfrage zu senden. In diesem Beispiel ersetzen Sie RESULT durch die Messung. Wenn die zu optimierende Funktion y = x^2 lautet und der vorgeschlagene Wert von x gleich 0.1 ist, ist das Ergebnis 0.01.

vizier_client.add_trial_measurement({
        'trial_name': TRIAL_ID,
        'measurement': {
            'metrics': [{'metric_id': 'y', 'value':RESULT }]
        }
    })

Test abschließen

Nachdem Sie alle Messungen für einen Test hinzugefügt haben, müssen Sie den Test mit einem Befehl abschließen.

Wenn Sie den Test abschließen, können Sie entweder einen Befehl senden, um nur den Test abzuschließen, oder einen Befehl senden, um eine endgültige Messung hinzuzufügen und den Test abzuschließen.

Ohne abschließende Messung

Senden Sie die folgende Anfrage, um den Test abzuschließen, ohne eine endgültige Messung hinzuzufügen:

vizier_client.complete_trial({
      'name': TRIAL_ID
  })

Mit abschließender Messung

Verwenden Sie die folgenden Befehle, um einen Test abzuschließen und eine endgültige Messung aufzunehmen. Ersetzen Sie dabei RESULT durch die endgültige Messung.

vizier_client.complete_trial({
      'name': TRIAL_ID
      'final_measurement': {
        'metrics': [{'metric_id': 'y', 'value': RESULT}]
      }
  })

Tests auflisten

Senden Sie die folgende Anfrage, um Tests in einer bestimmten Studie aufzulisten.

vizier_client.list_trials({
    'parent': STUDY_NAME
})

Sobald Sie alle ausstehenden Tests abgeschlossen haben, können Sie suggestTrials aufrufen, um weitere Vorschläge zu erhalten und den Testvorgang zu wiederholen.

Optimale Tests auflisten

Das folgende Beispiel zeigt list_optimal_trials, das die Pareto-optimierten Tests für eine Studie mit mehreren Zielen oder die optimalen Tests für eine Studie mit einem einzelnen Ziel zurückgibt:

vizier_client.list_optimal_trials({
    'parent': STUDY_NAME
})

Nächste Schritte