Gérer les erreurs de quota en appelant ML.GENERATE_EMBEDDING de manière itérative

Ce tutoriel explique comment utiliser la procédure stockée publique bqutil.procedure.bqml_generate_embeddings BigQuery pour itérer les appels à la fonction ML.GENERATE_EMBEDDING. L'appel de la fonction de manière itérative vous permet de résoudre les erreurs renouvelables qui se produisent en raison du dépassement des quotas et des limites qui s'appliquent à la fonction.

Pour examiner le code source de la procédure stockée bqutil.procedure.bqml_generate_embeddings dans GitHub, consultez bqml_generate_embeddings.sqlx. Pour en savoir plus sur les paramètres et l'utilisation de la procédure stockée, consultez le fichier README.

Ce tutoriel vous guide à travers les tâches suivantes :

  • Créer un modèle distant sur un modèle text-embedding-004
  • Effectuer des itérations par le biais d'appels à la fonction ML.GENERATE_EMBEDDING, à l'aide du modèle distant et de la table de données publique bigquery-public-data.bbc_news.fulltext avec la procédure stockée bqutil.procedure.bqml_generate_embeddings.

Autorisations requises

  • Pour créer l'ensemble de données, vous devez disposer de l'autorisation Identity and Access Management (IAM) bigquery.datasets.create.
  • Pour créer la ressource de connexion, vous devez disposer des autorisations IAM suivantes :

    • bigquery.connections.create
    • bigquery.connections.get
  • Pour accorder des autorisations au compte de service de la connexion, vous devez disposer de l'autorisation suivante :

    • resourcemanager.projects.setIamPolicy
  • Pour créer le modèle, vous avez besoin des autorisations suivantes :

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.connections.delegate
  • Pour exécuter une inférence, vous devez disposer des autorisations suivantes :

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

Coûts

Dans ce document, vous utilisez les composants facturables suivants de 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.

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Pour en savoir plus sur les tarifs BigQuery, consultez la section Tarifs BigQuery.

Pour en savoir plus sur les tarifs de Vertex AI, consultez la page Tarifs de Vertex AI.

Avant de commencer

  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

Créer un ensemble de données

Créez un ensemble de données BigQuery pour stocker vos modèles et vos exemples de données :

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accédez à la page BigQuery.

  2. Dans le volet Explorateur, cliquez sur le nom de votre projet.

  3. Cliquez sur Afficher les actions > Créer un ensemble de données.

  4. Sur la page Créer un ensemble de données, procédez comme suit :

    1. Dans le champ ID de l'ensemble de données, saisissez target_dataset.

    2. Pour Type d'emplacement, sélectionnez Multirégional, puis sélectionnez US (plusieurs régions aux États-Unis).

    3. Conservez les autres paramètres par défaut, puis cliquez sur Créer un ensemble de données.

Créer une connexion

Créez une connexion de ressource cloud et obtenez l'ID du compte de service de la connexion. Créez la connexion dans le même emplacement que l'ensemble de données que vous avez créé à l'étape précédente.

Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Pour créer une connexion, cliquez sur Ajouter, puis sur Connexions aux sources de données externes.

  3. Dans la liste Type de connexion, sélectionnez Modèles distants Vertex AI, fonctions distantes et BigLake (ressource Cloud).

  4. Dans le champ ID de connexion, saisissez un nom pour votre connexion.

  5. Cliquez sur Create connection (Créer une connexion).

  6. Cliquez sur Accéder à la connexion.

  7. Dans le volet Informations de connexion, copiez l'ID du compte de service à utiliser à l'étape suivante.

bq

  1. Dans un environnement de ligne de commande, créez une connexion :

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

    Le paramètre --project_id remplace le projet par défaut.

    Remplacez les éléments suivants :

    • REGION : votre région de connexion
    • PROJECT_ID : ID de votre projet Google Cloud
    • CONNECTION_ID : ID de votre connexion

    Lorsque vous créez une ressource de connexion, BigQuery crée un compte de service système unique et l'associe à la connexion.

    Dépannage : Si vous obtenez l'erreur de connexion suivante, mettez à jour le Google Cloud SDK :

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Récupérez et copiez l'ID du compte de service pour l'utiliser lors d'une prochaine étape :

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    Le résultat ressemble à ce qui suit :

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

Terraform

Ajoutez la section suivante à votre fichier main.tf.

 ## 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 {}
}        
Remplacez les éléments suivants :

  • CONNECTION_ID : ID de votre connexion
  • PROJECT_ID : ID de votre projet Google Cloud
  • REGION : votre région de connexion

Accorder des autorisations au compte de service de la connexion

Pour attribuer au compte de service de la connexion des rôles appropriés afin d'accéder aux services Cloud Storage et Vertex AI, procédez comme suit :

  1. Accédez à la page IAM et administration.

    Accéder à IAM et administration

  2. Cliquez sur Accorder l'accès.

  3. Dans le champ Nouveaux comptes principaux, saisissez l'ID du compte de service que vous avez copié précédemment.

  4. Dans le menu Sélectionner un rôle, choisissez Vertex AI > Utilisateur Vertex AI.

  5. Cliquez sur Enregistrer.

Créer le modèle génératif d'embeddings textuels

Créez un modèle distant représentant un modèle text-embedding-004 Vertex AI hébergé :

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, exécutez l'instruction suivante :

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

    Remplacez les éléments suivants :

    • LOCATION : emplacement de la connexion
    • CONNECTION_ID : ID de votre connexion BigQuery.

      Lorsque vous affichez les détails de la connexion dans la console Google Cloud, il s'agit de la valeur de la dernière section de l'ID de connexion complet affiché dans ID de connexion (par exemple, projects/myproject/locations/connection_location/connections/myconnection).

    L'exécution de la requête prend plusieurs secondes, après quoi le modèle embedding apparaît dans l'ensemble de données sample dans le volet Explorateur. Étant donné que la requête utilise une instruction CREATE MODEL pour créer un modèle, il n'y a aucun résultat de requête.

Exécuter la procédure stockée

Exécutez la procédure stockée bqutil.procedure.bqml_generate_embeddings, qui effectue une itération par le biais d'appels à la fonction ML.GENERATE_EMBEDDING à l'aide du modèle target_dataset.embedding_model et de la table de données publique bigquery-public-data.bbc_news.fulltext :

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, exécutez l'instruction suivante :

    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
    );

    Remplacez PROJECT_ID par l'ID du projet que vous utilisez pour ce tutoriel.

    La procédure stockée crée une table target_dataset.news_body_embeddings pour contenir le résultat de la fonction ML.GENERATE_EMBEDDING.

  3. Une fois l'exécution de la requête terminée, vérifiez qu'aucune ligne de la table target_dataset.news_body_embeddings ne contient une erreur pouvant être réessayée. Dans l'éditeur de requête, exécutez l'instruction suivante :

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

    La requête renvoie le message No data to display.

Effectuer un nettoyage

  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.