Kontingentfehler durch iteratives Aufrufen von ML.GENERATE_EMBEDDING verarbeiten

In dieser Anleitung erfahren Sie, wie Sie mit der öffentlichen gespeicherten Prozedur bqutil.procedure.bqml_generate_embeddings in BigQuery Aufrufe der Funktion ML.GENERATE_EMBEDDING durchlaufen. Durch iteratives Aufrufen der Funktion können Sie alle wiederholbaren Fehler beheben, die aufgrund der Überschreitung der für die Funktion geltenden Kontingente und Limits auftreten.

Den Quellcode für die bqutil.procedure.bqml_generate_embeddings-Speicherprozedur auf GitHub finden Sie unter bqml_generate_embeddings.sqlx. Weitere Informationen zu den Parametern und zur Verwendung der gespeicherten Prozedur finden Sie in der README-Datei.

In dieser Anleitung werden Sie durch die folgenden Aufgaben geführt:

  • Remote-Modell über ein text-embedding-004-Modell erstellen
  • Aufrufe der Funktion ML.GENERATE_EMBEDDING unter Verwendung des Remote-Modells und der öffentlichen Datentabelle bigquery-public-data.bbc_news.fulltext mit der gespeicherten Prozedur bqutil.procedure.bqml_generate_embeddings iterativ aufrufen.

Erforderliche Berechtigungen

  • Zum Erstellen des Datasets benötigen Sie die IAM (Identity and Access Management)-Berechtigung bigquery.datasets.create.
  • Zum Erstellen der Verbindungsressource benötigen Sie die folgenden IAM-Berechtigungen:

    • bigquery.connections.create
    • bigquery.connections.get
  • Zum Erteilen von Berechtigungen für das Dienstkonto der Verbindung benötigen Sie die folgende Berechtigung:

    • resourcemanager.projects.setIamPolicy
  • Zum Erstellen des Modells benötigen Sie die folgenden Berechtigungen:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.connections.delegate
  • Zum Ausführen von Inferenzen benötigen Sie die folgenden Berechtigungen:

    • bigquery.models.getData
    • bigquery.jobs.create

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

  • BigQuery ML: You incur costs for the data that you process in BigQuery.
  • Vertex AI: You incur costs for calls to the Vertex AI model.

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Weitere Informationen zu den Preisen von BigQuery finden Sie unter BigQuery-Preise.

Weitere Informationen zu den Preisen für Vertex AI finden Sie unter Vertex AI-Preise.

Hinweise

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    Enable the APIs

Dataset erstellen

Erstellen Sie ein BigQuery-Dataset zum Speichern Ihrer Modelle und Beispieldaten:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery

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

  3. Klicken Sie auf Aktionen ansehen > Dataset erstellen.

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

    1. Geben Sie unter Dataset-ID target_dataset ein.

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

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

Verbindung herstellen

Erstellen Sie eine Cloud-Ressourcenverbindung und rufen Sie die Dienstkonto-ID der Verbindung ab. Erstellen Sie die Verbindung in demselben Standort wie dem des von Ihnen im vorherigen Schritt erstellten Datasets.

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

Hängen Sie folgenden Abschnitt an Ihre main.tf-Datei an.

 ## This creates a cloud resource connection.
 ## Note: The cloud resource nested object has only one output only field - serviceAccountId.
 resource "google_bigquery_connection" "connection" {
    connection_id = "CONNECTION_ID"
    project = "PROJECT_ID"
    location = "REGION"
    cloud_resource {}
}        
Ersetzen Sie Folgendes:

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

Dem Dienstkonto der Verbindung Berechtigungen gewähren

So weisen Sie dem Dienstkonto der Verbindung die entsprechenden Rollen für den Zugriff auf die Cloud Storage- und Vertex AI-Dienste zu:

  1. Zur Seite IAM & Verwaltung.

    IAM & Verwaltung aufrufen

  2. Klicken Sie auf Zugriff erlauben.

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

  4. Wählen Sie im Menü Rolle auswählen die Option Vertex AI > Vertex AI-Nutzer aus.

  5. Klicken Sie auf Speichern.

Modell zur Generierung von Texteinbettungen erstellen

Erstellen Sie ein Remote-Modell, das ein gehostetes text-embedding-004-Modell von Vertex AI darstellt:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Führen Sie im Abfrageeditor folgende Abfrage aus:

    CREATE OR REPLACE MODEL `target_dataset.embedding_model`
      REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID`
      OPTIONS (ENDPOINT = 'text-embedding-004');

    Ersetzen Sie Folgendes:

    • LOCATION: Standort der Verbindung
    • CONNECTION_ID ist die ID Ihrer BigQuery-Verbindung.

      Wenn Sie sich Verbindungsdetails in der Google Cloud Console ansehen, ist dies der Wert im letzten Abschnitt der voll qualifizierten Verbindungs-ID, der unter Verbindungs-ID angezeigt wird, z. B. projects/myproject/locations/connection_location/connections/myconnection.

    Die Abfrage dauert mehrere Sekunden. Anschließend wird das Modell embedding im sample-Dataset des Bereichs Explorer angezeigt. Da die Abfrage eine CREATE MODEL-Anweisung zum Erstellen eines Modells verwendet, gibt es keine Abfrageergebnisse.

Führen Sie die gespeicherte Prozedur aus.

Führen Sie die gespeicherte Prozedur bqutil.procedure.bqml_generate_embeddings aus, die die Aufrufe der Funktion ML.GENERATE_EMBEDDING mithilfe des Modells target_dataset.embedding_model und der öffentlichen Datentabelle bigquery-public-data.bbc_news.fulltext iterativ durchläuft:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Führen Sie im Abfrageeditor folgende Abfrage aus:

    CALL `bqutil.procedure.bqml_generate_embeddings`(
        "bigquery-public-data.bbc_news.fulltext",            -- source table
        "PROJECT_ID.target_dataset.news_body_embeddings",  -- destination table
        "PROJECT_ID.target_dataset.embedding_model",       -- model
        "body",                                              -- content column
        ["filename"],                                        -- key columns
        '{}'                                                 -- optional arguments encoded as a JSON string
    );

    Ersetzen Sie PROJECT_ID durch die Projekt-ID des Projekts, das Sie für diese Anleitung verwenden.

    Die gespeicherte Prozedur erstellt eine target_dataset.news_body_embeddings-Tabelle, die die Ausgabe der Funktion ML.GENERATE_EMBEDDING enthält.

  3. Wenn die Abfrage abgeschlossen ist, bestätigen Sie, dass die Tabelle target_dataset.news_body_embeddings keine Zeilen mit einem wiederholbaren Fehler enthält. Führen Sie im Abfrageeditor folgende Abfrage aus:

    SELECT *
    FROM `target_dataset.news_body_embeddings`
    WHERE ml_generate_embedding_status LIKE '%A retryable error occurred%';

    Die Abfrage gibt die Nachricht No data to display zurück.

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.