Vorhersagen mit Remote-Modellen in Vertex AI treffen

Sie können einen Vertex AI-Endpunkt als Remote-Modell registrieren und mit ML.PREDICT direkt aus BigQuery aufrufen.

Dies ist insbesondere dann hilfreich, wenn ein Modell für den Import in BigQuery zu groß ist oder wenn eine Inferenz für Online-, Batch- und Mikro-Batch-Anwendungsfälle verwendet werden soll.

In dieser Anleitung wird ein benutzerdefiniertes Sentimentanalysemodell verwendet, indem ein BERT-Modell mit Nur-Text-IMDB-Filmrezensionen optimiert wird. Das resultierende Modell verwendet Texteingaben (Filmrezensionen) und gibt Sentimentwerte zwischen (0, 1) zurück. Das Modell ist in Vertex AI Model Registry registriert und auf einem Vertex AI-Endpunkt bereitgestellt. Von dort wird das Modell zu einem Remote-Modell in BigQuery hinzugefügt. Mit dem Remote-Modell in BigQuery können Sie Sentimentvorhersagen für eine Textspalte abrufen (Rezensionen von Filmen aus der 100.000 Zeilentabelle alten bigquery-public-data.imdb.reviews).

Sehen Sie sich die Anleitung zu BQML-Remotemodellen für eine GitHub-Anleitung der Python-Version an.

Workflowübersicht

Einrichtung für die Anleitung

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet: Cloud Storage, Vertex AI und BigQuery. Am Ende der Anleitung entfernen Sie die kostenpflichtigen Komponenten.

  1. Klicken Sie hier, um APIs für Vertex AI-, Cloud Storage- und BigQuery-Cloud-Ressourcenverbindungen zu aktivieren.
  2. Cloud Storage: Erstellen Sie einen Bucket am multiregionalen Standort US mit dieser Anleitung.

ML-Modell erstellen

Erstellen Sie ein Modell mithilfe der BQML-Remotemodell-Anleitung, die ein Vorhersagemodell für die Sentimentanalyse enthält, das durch Feinabstimmung eines BERT-Modells erstellt wurde, während eine Klassifizierungsebene hinzugefügt wird.

Wir haben bereits ein Beispielmodell trainiert und in gs://cloud-samples-data/bigquery/ml/remote_model_tutorial/ hochgeladen, damit Sie es direkt verwenden können.

Modell in Vertex AI bereitstellen

Folgen Sie der Anleitung, um das Modell in der Vertex AI Model Registry zu registrieren.

Folgen Sie der Anleitung zum Bereitstellen des Modells aus der Vertex AI Model Registry auf einem Vertex AI-Endpunkt.

Wir empfehlen, die maximale Anzahl von Rechenknoten festzulegen. Dies aktiviert die Autoscaling-Funktion auf der Vertex-AI-Seite und hilft dem Endpunkt, mehr Anfragen zu verarbeiten, wenn Ihre BigQuery-Datentabelle eine große Anzahl von Zeilen enthält.

Remotemodell von BigQuery ML

Ein BigQuery ML-Remote-Modell besteht aus zwei Komponenten: einer BigQuery-Cloud-Ressourcenverbindung und einem BigQuery-Remote-Modell, das die Verbindung verwendet.

BigQuery-Cloud-Ressourcenverbindung erstellen

Sie benötigen eine Cloud-Ressourcenverbindung, um eine Verbindung zu Vertex AI herzustellen.

Wählen Sie eine der folgenden Optionen aus:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie auf Hinzufügen und dann auf Verbindungen zu externen Datenquellen, um eine Verbindung zu erstellen.

  3. Wählen Sie in der Liste Verbindungstyp die Option Vertex AI-Remote-Modelle, Remote-Funktionen und BigLake (Cloud Resource) aus.

  4. Geben Sie im Feld Verbindungs-ID einen Namen für die Verbindung ein.

  5. Klicken Sie auf Verbindung erstellen.

  6. Klicken Sie auf Zur Verbindung.

  7. Kopieren Sie im Bereich Verbindungsinformationen die Dienstkonto-ID zur Verwendung in einem späteren Schritt.

bq

  1. Erstellen Sie in einer Befehlszeilenumgebung eine Verbindung:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    Der Parameter --project_id überschreibt das Standardprojekt.

    Ersetzen Sie dabei Folgendes:

    • REGION: Ihre Verbindungsregion
    • PROJECT_ID: Ihre Google Cloud-Projekt-ID
    • CONNECTION_ID: eine ID für Ihre Verbindung

    Wenn Sie eine Verbindungsressource herstellen, erstellt BigQuery ein eindeutiges Systemdienstkonto und ordnet es der Verbindung zu.

    Fehlerbehebung:Wird der folgende Verbindungsfehler angezeigt, aktualisieren Sie das Google Cloud SDK:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Rufen Sie die Dienstkonto-ID ab und kopieren Sie sie zur Verwendung in einem späteren Schritt:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    Die Ausgabe sieht in etwa so aus:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Verwenden Sie die Ressource google_bigquery_connection:

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

Im folgenden Beispiel wird eine Cloud-Ressourcenverbindung mit dem Namen my_cloud_resource_connection in der Region US erstellt:


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud-Projekt anzuwenden.

Cloud Shell vorbereiten

  1. Rufen Sie Cloud Shell auf.
  2. Legen Sie das Google Cloud-Standardprojekt fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.

    Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.

Verzeichnis vorbereiten

Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).

  1. Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung .tf haben, z. B. main.tf. In dieser Anleitung wird die Datei als main.tf bezeichnet.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.

    Kopieren Sie den Beispielcode in das neu erstellte main.tf.

    Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.

  3. Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
  4. Speichern Sie die Änderungen.
  5. Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
    terraform init

    Fügen Sie optional die Option -upgrade ein, um die neueste Google-Anbieterversion zu verwenden:

    terraform init -upgrade

Änderungen anwenden

  1. Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
    terraform plan

    Korrigieren Sie die Konfiguration nach Bedarf.

  2. Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply

    Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.

  3. Öffnen Sie Ihr Google Cloud-Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.

Zugriff einrichten

Weisen Sie dem Dienstkonto der Verbindung die Rolle „Vertex AI-Nutzer“ zu. Sie müssen diese Rolle in demselben Projekt gewähren, das Sie im Abschnitt BigQuery ML-Remote-Modell erstellen in der URL des Endpunkts des Remote-Modells angeben möchten (oder in Ihrem Modellprojekt, wenn Sie den Endpunkt der Kurzversion verwenden). Die Zuweisung der Rolle in einem anderen Projekt führt zu dem Fehler bqcx-1234567890-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource.

So weisen Sie die Rolle zu:

  1. Zur Seite IAM & Verwaltung.

    IAM & Verwaltung aufrufen

  2. Klicken Sie auf Zugriff gewähren.

  3. Geben Sie im Feld Neue Hauptkonten die Dienstkonto-ID ein, die Sie zuvor kopiert haben.

  4. Wählen Sie im Feld Rolle auswählen die Option Vertex AI und dann Vertex AI-Nutzerrolle aus.

  5. Klicken Sie auf Speichern.

Dataset erstellen

Erstellen Sie ein BigQuery-Dataset, um Ihr ML-Modell zu speichern:

  1. Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.

    Zur Seite „BigQuery“

  2. Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.

  3. Klicken Sie auf Aktionen ansehen > Dataset erstellen.

    Dataset erstellen

  4. Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:

    • Geben Sie unter Dataset-ID bqml_tutorial ein.

    • Wählen Sie als Standorttyp die Option Mehrere Regionen und dann USA (mehrere Regionen in den USA) aus.

      Die öffentlichen Datasets sind am multiregionalen Standort US gespeichert. Der Einfachheit halber sollten Sie Ihr Dataset am selben Standort speichern.

    • Übernehmen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen.

      Seite "Dataset erstellen"

BigQuery ML-Remote-Modell erstellen

So rufen Sie das Eingabe- und Ausgabeschema für das TensorFlow-Modell auf, indem Sie eine Anfrage an den Endpunkt senden:

Beispiel für eine Anfrage:

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:predict -d "{'instances': [{ 'text': 'This is an amazing movie'}, { 'text': 'The movie was terrible'}]}"

Beispiel für eine Antwort:

{
  "predictions": [
    [
      [ 0.999410391 ]
    ],
    [
      [ 0.000628352049 ]
    ]
  ]
}

Beim Erstellen eines Remote-Modells müssen die Namen und Typen der Eingabe- und Ausgabefelder genau mit der Ein- und Ausgabe von Vertex AI übereinstimmen.

Für das Modell mit einzelner Ausgabe gibt Vertex AI keinen Feldnamen zurück. In CREATE MODEL können Sie einen beliebigen Feldnamen angeben.

Das folgende Beispiel zeigt, wie ein Remote-Modell mit einer Verbindung erstellt wird:

CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`
    INPUT (text STRING)
    OUTPUT(scores ARRAY<FLOAT64>)
    REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
    OPTIONS(endpoint = 'ENDPOINT_URL')

Vorhersagen mit ML.PREDICT abrufen

Rufen Sie mithilfe der Funktion ML.PREDICT Vorhersagen aus dem Remote-Modell in BigQuery ab. Hier werden 10.000 Datensätze ausgewählt und für die Vorhersage gesendet. Das Remote-Modell verwendet für seine Anfragen standardmäßig eine Batchgröße von 128.

SELECT *
FROM ML.PREDICT (
    MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`,
    (
        SELECT review as text
        FROM `bigquery-public-data.imdb.reviews`
        LIMIT 10000
    )
)

Unterstützte Regionen

In BigQuery gibt es zwei Standortarten:

  • Eine Region ist ein bestimmter geografischer Ort, wie z. B. London.
  • Eine Multiregion ist ein großes geografisches Gebiet (beispielsweise die USA), das mindestens zwei geografische Orte enthält.

Einzelne Region

In einem BigQuery-Dataset mit einer Region können Sie nur ein Remote-Modell erstellen, das einen Vertex AI-Endpunkt verwendet, der in derselben Region bereitgestellt wird. Ein Remote-Modell in einer einzelnen BigQuery-Region "us-central1" kann nur eine Vertex-KI in us-central1 verwenden. Für einzelne Regionen werden Remote-Modelle also nur in Regionen unterstützt, die sowohl Vertex AI als auch BigQuery unterstützen.

Multiregionen

In einem multiregionalen BigQuery-Dataset (US, EU) können Sie nur ein Remote-Modell erstellen, das ein Remote-Modell verwendet, das in einer Region innerhalb derselben großen geografischen Region bereitgestellt wird (US, EU). Zum Beispiel: Ein Remote-Modell im multiregionalen BigQuery US-Standort kann nur einen Vertex AI-Endpunkt verwenden, der in einer einzelnen Region im geografischen Gebiet der USA bereitgestellt wird. Beispiel:us-central1, us-east4, us-west2 usw.

Ein Remote-Modell in der Multiregion BigQuery EU kann nur einen Vertex AI-Endpunkt verwenden, der in einer einzelnen Region in einem der Mitgliedsstaaten der Europäischen Union bereitgestellt ist, z. B. europe-north1, europe-west3 usw.

Weitere Informationen zu Regionen und Multiregionen finden Sie auf der Seite Dataset-Standorte. Weitere Informationen zu Vertex AI-Regionen finden Sie unter Vertex AI-Standorte.

VPC Service Controls verwenden

VPC Service Controls ist ein Google Cloud-Feature, mit dem Sie einen sicheren Perimeter einrichten können, der vor Daten-Exfiltration schützt. Wenn Sie VPC Service Controls mit Remote-Modellen verwenden möchten, um die Sicherheit zu erhöhen, folgen Sie der Anleitung für VPC Service Controls, um einen Dienstperimeter zu erstellen.

Fügen Sie das BigQuery-Projekt der Abfrage mithilfe des Remotemodells in den Perimeter ein. Fügen Sie das Endpunktprojekt dem Perimeter hinzu und legen Sie die Vertex AI API in den eingeschränkten Diensten anhand Ihres Endpunkttyps fest. Weitere Informationen finden Sie unter Vertex AI VPC Service Controls.

Bereinigen

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.