Générer des embeddings d'images à l'aide de la fonction ML.GENERATE_EMBEDDING
Ce document explique comment créer un modèle distant BigQuery ML faisant référence à un modèle d'embedding Vertex AI.
Vous utilisez ensuite ce modèle avec la fonction ML.GENERATE_EMBEDDING
pour créer des embeddings d'images à l'aide de données provenant d'une table d'objets BigQuery.
Rôles requis
Pour créer une connexion, vous devez disposer du rôle IAM (Identity and Access Management) suivant :
roles/bigquery.connectionAdmin
Pour accorder des autorisations au compte de service de la connexion, vous devez disposer de l'autorisation suivante :
resourcemanager.projects.setIamPolicy
Pour créer une table d'objets, vous devez disposer des autorisations suivantes:
bigquery.tables.create
bigquery.tables.update
bigquery.connections.delegate
Pour créer le modèle à l'aide de BigQuery ML, vous devez disposer des autorisations IAM suivantes :
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
Pour exécuter une inférence, vous devez disposer des autorisations suivantes :
bigquery.tables.getData
sur la tablebigquery.models.getData
sur le modèlebigquery.jobs.create
Avant de commencer
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, Cloud Storage, and Vertex AI APIs.
Créer un ensemble de données
Créez un ensemble de données BigQuery pour stocker votre table d'objets et votre modèle.
Console
Dans la console Google Cloud, accédez à la page BigQuery.
Dans le volet Explorateur, cliquez sur le nom de votre projet.
Cliquez sur
Afficher les actions > Créer un ensemble de données.Sur la page Créer un ensemble de données, procédez comme suit :
Dans ID de l'ensemble de données, saisissez un nom pour l'ensemble de données.
Dans Type d'emplacement, sélectionnez un emplacement pour l'ensemble de données.
Cliquez sur Créer un ensemble de données.
bq
Pour créer un ensemble de données, exécutez la commande
bq mk
en spécifiant l'option--location
:bq --location=LOCATION mk -d DATASET_ID
Remplacez les éléments suivants :
LOCATION
: emplacement de l'ensemble de données.DATASET_ID
est l'ID de l'ensemble de données que vous créez.
Vérifiez que l'ensemble de données a été créé:
bq ls
Créer une connexion
Créez une connexion de ressource cloud et obtenez le 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
Accédez à la page BigQuery.
Dans le volet Explorateur, cliquez sur
Ajouter des données.La boîte de dialogue Ajouter des données s'ouvre.
Dans le volet Filtrer par, dans la section Type de source de données, sélectionnez Bases de données.
Vous pouvez également saisir
Vertex AI
dans le champ Rechercher des sources de données.Dans la section Sources de données sélectionnées, cliquez sur Vertex AI.
Cliquez sur la fiche de solution Modèles Vertex AI: fédération BigQuery.
Dans la liste Type de connexion, sélectionnez Modèles distants Vertex AI, fonctions distantes et BigLake (ressource Cloud).
Dans le champ ID de connexion, saisissez un nom pour votre connexion.
Cliquez sur Créer une connexion.
Cliquez sur Accéder à la connexion.
Dans le volet Informations de connexion, copiez l'ID du compte de service à utiliser à l'étape suivante.
bq
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 connexionPROJECT_ID
: ID de votre projet Google CloudCONNECTION_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...
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
Utilisez la ressource google_bigquery_connection
.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
L'exemple suivant crée une connexion de ressources Cloud nommée my_cloud_resource_connection
dans la région US
:
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez Cloud Shell.
-
Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.
Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Préparer le répertoire
Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).
-
Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code dans le fichier
main.tf
que vous venez de créer.Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
terraform init
Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option
-upgrade
:terraform init -upgrade
Appliquer les modifications
-
Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
terraform plan
Corrigez les modifications de la configuration si nécessaire.
-
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
Accorder l'accès au compte de service
Attribuez au compte de service de la connexion les rôles Utilisateur Vertex AI et Lecteur des objets de l'espace de stockage.
Pour attribuer les rôles, procédez comme suit:
Console
Accédez à la page IAM et administration.
Cliquez sur
Ajouter.La boîte de dialogue Ajouter des comptes principaux s'ouvre.
Dans le champ Nouveaux comptes principaux, saisissez l'ID du compte de service que vous avez copié précédemment.
Dans le champ Sélectionner un rôle, sélectionnez Vertex AI, puis Utilisateur Vertex AI.
Cliquez sur Ajouter un autre rôle.
Dans le champ Sélectionner un rôle, sélectionnez Cloud Storage, puis Lecteur des objets Storage.
Cliquez sur Enregistrer.
gcloud
Utilisez la commande gcloud projects add-iam-policy-binding
.
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/storage.objectViewer' --condition=None
Remplacez l'élément suivant :
PROJECT_NUMBER
: numéro du projet dans lequel accorder le rôle.MEMBER
: ID du compte de service que vous avez copié précédemment
Créer une table d'objets
Pour analyser des images sans les déplacer depuis Cloud Storage, créez une table d'objets.
Pour créer une table d'objets, procédez comme suit :
SQL
Utilisez l'instruction CREATE EXTERNAL TABLE
.
Dans la console Google Cloud, accédez à la page BigQuery Studio.
Dans l'éditeur de requête, saisissez l'instruction suivante :
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET_ID.TABLE_NAME` WITH CONNECTION {`PROJECT_ID.REGION.CONNECTION_ID`| DEFAULT} OPTIONS( object_metadata = 'SIMPLE', uris = ['BUCKET_PATH'[,...]], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE');
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet.DATASET_ID
: ID de l'ensemble de données que vous avez créé.TABLE_NAME
: nom de la table d'objets.REGION
: région ou emplacement multirégional contenant la connexion.CONNECTION_ID
: ID de la connexion que vous avez créée.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
).Pour utiliser une connexion par défaut, spécifiez
DEFAULT
au lieu de la chaîne de connexion contenantPROJECT_ID.REGION.CONNECTION_ID
.BUCKET_PATH
: chemin d'accès au bucket Cloud Storage contenant les images, au format['gs://bucket_name/[folder_name/]*']
.Le bucket Cloud Storage que vous utilisez doit se trouver dans le même projet que celui dans lequel vous prévoyez de créer le modèle et d'appeler la fonction
ML.GENERATE_EMBEDDING
. Si vous souhaitez appeler la fonctionML.GENERATE_EMBEDDING
dans un projet différent de celui qui contient le bucket Cloud Storage utilisé par la table d'objets, vous devez attribuer le rôle "Administrateur de l'espace de stockage" au niveau du bucket au compte de serviceservice-A@gcp-sa-aiplatform.iam.gserviceaccount.com
.STALENESS_INTERVAL
: indique si les métadonnées mises en cache sont utilisées par les opérations sur la table d'objets et indique le niveau nécessaire de fraîcheur des métadonnées mises en cache pour que l'opération puisse les utiliser. Pour en savoir plus sur les considérations liées à la mise en cache des métadonnées, consultez la section Mise en cache des métadonnées pour améliorer les performances.Pour désactiver la mise en cache des métadonnées, spécifiez 0. Il s'agit de la valeur par défaut.
Pour activer la mise en cache des métadonnées, spécifiez une valeur de littéral d'intervalle comprise entre 30 minutes et 7 jours. Par exemple, spécifiez
INTERVAL 4 HOUR
pour un intervalle d'obsolescence de quatre heures. Avec cette valeur, les opérations sur la table utilisent les métadonnées mises en cache si elles ont été actualisées au cours des quatre dernières heures. Si les métadonnées mises en cache sont plus anciennes, l'opération extrait les métadonnées de Cloud Storage.CACHE_MODE
: indique si le cache de métadonnées est actualisé automatiquement ou manuellement. Pour en savoir plus sur les considérations liées à la mise en cache des métadonnées, consultez la section Mise en cache des métadonnées pour améliorer les performances.Définissez cet élément sur
AUTOMATIC
pour que le cache de métadonnées soit actualisé à un intervalle défini par le système, généralement entre 30 et 60 minutes.Définissez la valeur sur
MANUAL
si vous souhaitez actualiser le cache de métadonnées selon une programmation que vous déterminez. Dans ce cas, vous pouvez appeler la procédure systèmeBQ.REFRESH_EXTERNAL_METADATA_CACHE
pour actualiser le cache.Vous devez définir
CACHE_MODE
siSTALENESS_INTERVAL
est défini sur une valeur supérieure à 0.
Cliquez sur
Exécuter.
Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.
bq
Utilisez la commande bq mk
.
bq mk --table \ --external_table_definition=BUCKET_PATH@REGION.CONNECTION_ID \ --object_metadata=SIMPLE \ --max_staleness=STALENESS_INTERVAL \ --metadata_cache_mode=CACHE_MODE \ PROJECT_ID:DATASET_ID.TABLE_NAME
Remplacez l'élément suivant :
BUCKET_PATH
: chemin d'accès au bucket Cloud Storage contenant les images, au format['gs://bucket_name/[folder_name/]*']
.Le bucket Cloud Storage que vous utilisez doit se trouver dans le même projet que celui dans lequel vous prévoyez de créer le modèle et d'appeler la fonction
ML.GENERATE_EMBEDDING
. Si vous souhaitez appeler la fonctionML.GENERATE_EMBEDDING
dans un projet différent de celui qui contient le bucket Cloud Storage utilisé par la table d'objets, vous devez attribuer le rôle "Administrateur de l'espace de stockage" au niveau du bucket au compte de serviceservice-A@gcp-sa-aiplatform.iam.gserviceaccount.com
.REGION
: région ou emplacement multirégional contenant la connexion.CONNECTION_ID
: ID de la connexion que vous avez créée.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
).STALENESS_INTERVAL
: indique si les métadonnées mises en cache sont utilisées par les opérations sur la table d'objets et indique le niveau nécessaire de fraîcheur des métadonnées mises en cache pour que l'opération puisse les utiliser. Pour en savoir plus sur les considérations liées à la mise en cache des métadonnées, consultez la section Mise en cache des métadonnées pour améliorer les performances.Pour désactiver la mise en cache des métadonnées, spécifiez 0. Il s'agit de la valeur par défaut.
Pour activer la mise en cache des métadonnées, spécifiez une valeur de littéral d'intervalle comprise entre 30 minutes et 7 jours. Par exemple, spécifiez
INTERVAL 4 HOUR
pour un intervalle d'obsolescence de quatre heures. Avec cette valeur, les opérations sur la table utilisent les métadonnées mises en cache si elles ont été actualisées au cours des quatre dernières heures. Si les métadonnées mises en cache sont plus anciennes, l'opération extrait les métadonnées de Cloud Storage.CACHE_MODE
: indique si le cache de métadonnées est actualisé automatiquement ou manuellement. Pour en savoir plus sur les considérations liées à la mise en cache des métadonnées, consultez la section Mise en cache des métadonnées pour améliorer les performances.Définissez cet élément sur
AUTOMATIC
pour que le cache de métadonnées soit actualisé à un intervalle défini par le système, généralement entre 30 et 60 minutes.Définissez la valeur sur
MANUAL
si vous souhaitez actualiser le cache de métadonnées selon une programmation que vous déterminez. Dans ce cas, vous pouvez appeler la procédure systèmeBQ.REFRESH_EXTERNAL_METADATA_CACHE
pour actualiser le cache.Vous devez définir
CACHE_MODE
siSTALENESS_INTERVAL
est défini sur une valeur supérieure à 0.PROJECT_ID
: ID de votre projet.DATASET_ID
: ID de l'ensemble de données que vous avez créé.TABLE_NAME
: nom de la table d'objets.
Créer un modèle
Dans la console Google Cloud, accédez à la page BigQuery.
À l'aide de l'éditeur SQL, créez un modèle distant :
CREATE OR REPLACE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID` OPTIONS (ENDPOINT = 'ENDPOINT');
Remplacez l'élément suivant :
PROJECT_ID
: ID de votre projet.DATASET_ID
: ID de l'ensemble de données que vous avez créé précédemment.MODEL_NAME
: nom du modèleREGION
: région ou emplacement multirégional contenant la connexion.CONNECTION_ID
: ID de la connexion que vous avez créée.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
).ENDPOINT
: modèle d'embedding à utiliser, dans ce casmultimodalembedding@001
.Si vous spécifiez une URL comme point de terminaison lorsque vous créez le modèle distant (par exemple,
endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/text-embedding-004'
), assurez-vous que le projet que vous spécifiez dans l'URL est celui dans lequel vous avez attribué le rôle Utilisateur Vertex AI à la connexion. particulier.Le modèle
multimodalembedding@001
doit être disponible à l'emplacement où vous créez le modèle distant. Pour en savoir plus, consultez la section Emplacements.
Générer des embeddings d'images
Générez des embeddings d'images à l'aide de la fonction ML.GENERATE_EMBEDDING
à l'aide des données d'image d'une table d'objets :
SELECT * FROM ML.GENERATE_EMBEDDING( MODEL<var>PROJECT_ID</var>.<var>DATASET_ID</var>.<var>MODEL_NAME</var>
, TABLE<var>PROJECT_ID</var>.<var>DATASET_ID</var>.<var>TABLE_NAME</var>
, STRUCT(FLATTEN_JSON AS flatten_json_output, OUTPUT_DIMENSIONALITY AS output_dimensionality) );
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet.DATASET_ID
: ID de l'ensemble de données contenant le modèle.MODEL_NAME
: nom du modèle distant sur un modèlemultimodalembedding@001
.TABLE_NAME
: nom de la table d'objets contenant les images à intégrer.FLATTEN_JSON
:BOOL
qui indique s'il faut analyser l'embedding dans une colonne distincte. La valeur par défaut estTRUE
.OUTPUT_DIMENSIONALITY
: valeurINT64
qui spécifie le nombre de dimensions à utiliser lors de la génération d'embeddings. Les valeurs acceptables sont128
,256
,512
et1408
. La valeur par défaut est1408
. Par exemple, si vous spécifiez256 AS output_dimensionality
, la colonne de sortieml_generate_embedding_result
va contenir 256 embeddings pour chaque valeur d'entrée.
Exemple
L'exemple suivant montre comment créer des embeddings pour les images de la table d'objets images
:
SELECT * FROM ML.GENERATE_EMBEDDING( MODEL `mydataset.embedding_model`, TABLE `mydataset.images`, STRUCT(TRUE AS flatten_json_output, 512 AS output_dimensionality) );