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 de BigQuery pour effectuer une itération par le biais d'appels à la ML.GENERATE_EMBEDDING fonction. 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 bqutil.procedure.bqml_generate_embeddings procédure stockée 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-005
  • 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 exécuter ce tutoriel, vous devez disposer des rôles Identity and Access Management (IAM) suivants :

  • Créer et utiliser des ensembles de données, des connexions et des modèles BigQuery : Administrateur BigQuery (roles/bigquery.admin)
  • Accorder des autorisations au compte de service de la connexion : Administrateur IAM du projet (roles/resourcemanager.projectIamAdmin)

Ces rôles prédéfinis contiennent les autorisations requises pour effectuer les tâches décrites dans ce document. Pour afficher les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

  • Créer un ensemble de données : bigquery.datasets.create
  • Créer, déléguer et utiliser une connexion : bigquery.connections.*
  • Définir la connexion par défaut : bigquery.config.*
  • Définir les autorisations du compte de service : resourcemanager.projects.getIamPolicy et resourcemanager.projects.setIamPolicy
  • Créer un modèle et exécuter une inférence :
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Coûts

Dans ce tutoriel, vous utilisez les composants facturables de suivants 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, utilisez le simulateur de coût.

Les nouveaux utilisateurs de peuvent bénéficier d'un essai sans frais. Google Cloud

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

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

Avant de commencer

  1. Dans la Google Cloud console, sur la page de sélection du projet, sélectionnez ou créez un Google Cloud projet.

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionner un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.

    Accéder au sélecteur de projet

  2. Vérifiez que la facturation est activée pour votre Google Cloud projet.

  3. Activez les API BigQuery, BigQuery Connection et Vertex AI.

    Rôles requis pour activer les API

    Pour activer les API, vous devez disposer du rôle IAM Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

    Activer les API

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 Google Cloud console, 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 le modèle génératif d'embeddings textuels

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

  1. Dans la Google Cloud console, 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 DEFAULT
      OPTIONS (ENDPOINT = 'text-embedding-005');

    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 Google Cloud console, 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 la requête exécutée, vérifiez qu'aucune ligne de la table target_dataset.news_body_embeddings ne contient d'erreur renouvelable. 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 (Aucune donnée à afficher).

Effectuer un nettoyage

  1. Dans la Google Cloud console, accédez à la page Gérer les ressources.

    Accéder à la page "Gérer les ressources"

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.