Dans ce tutoriel, vous allez utiliser la CLI Hugging Face Optimum pour exporter le modèle sentence-transformers/all-MiniLM-L6-v2 au format Open Neural Network Exchange (ONNX). Vous utilisez l'instruction CREATE MODEL pour importer le modèle ONNX dans BigQuery. Enfin, vous utilisez la fonction ML.PREDICT pour générer des embeddings avec le modèle ONNX importé.
Ce tutoriel utilise le modèle sentence-transformers/all-MiniLM-L6-v2. Ce modèle de transformateur de phrases est connu pour sa rapidité et son efficacité dans la génération d'intégrations de phrases. L'embedding de phrases permet d'effectuer des tâches telles que la recherche sémantique, le clustering et la similarité de phrases en capturant la signification sous-jacente du texte.
ONNX fournit un format uniforme conçu pour représenter tous les frameworks de machine learning (ML). La compatibilité de BigQuery ML avec ONNX vous permet de :
- Entraîner un modèle à l'aide du framework de votre choix
- Convertir le modèle au format ONNX
- Importer le modèle ONNX dans BigQuery et effectuer des prédictions à l'aide de BigQuery ML
Objectifs
- Exporter le modèle
sentence-transformers/all-MiniLM-L6-v2au format ONNX - importer le modèle ONNX dans BigQuery ;
- Utilisez la fonction
ML.PREDICTpour générer des embeddings avec le modèle ONNX importé.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Cloud de Confiance by S3NS :
Une fois que vous avez terminé les tâches décrites dans ce document, supprimez les ressources que vous avez créées pour éviter que des frais vous soient facturés. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Vérifiez que la facturation est activée pour votre projet Cloud de Confiance .
Activez les API BigQuery et Cloud Storage.
Rôles requis pour activer les API
Pour activer les API, vous devez disposer de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.- Assurez-vous de disposer des autorisations nécessaires pour effectuer les tâches décrites dans ce document.
Rôles requis
Pour obtenir les autorisations nécessaires pour suivre ce tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet :
-
Créer des ensembles de données, des tables et des modèles, et exécuter des jobs BigQuery : Administrateur BigQuery Studio (
roles/bigquery.studioAdmin) -
Créez un bucket Cloud Storage et des objets de stockage (si vous convertissez manuellement les fichiers de modèle Transformer au format ONNX) :
Administrateur de l'espace de stockage (
roles/storage.admin)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Si vous créez un projet, vous en êtes le propriétaire et vous disposez de toutes les autorisations IAM (Identity and Access Management) requises pour suivre ce tutoriel.
Pour en savoir plus sur les autorisations IAM dans BigQuery, consultez Autorisations IAM.
Facultatif : Convertir manuellement les fichiers de modèle Transformer au format ONNX
Si vous convertissez manuellement le modèle sentence-transformers/all-MiniLM-L6-v2 et le tokenizer au format ONNX, suivez les étapes décrites dans les sections suivantes. Vous pouvez également utiliser les exemples de fichiers dans le bucket Cloud Storage gs://cloud-samples-data.
Les fichiers de ce bucket sont déjà convertis. Si vous utilisez les fichiers exemples, passez à Créer un ensemble de données.
Si vous choisissez de convertir manuellement les fichiers, vous devez disposer d'un environnement de ligne de commande local avec Python installé. Pour en savoir plus sur l'installation de Python, consultez Téléchargements Python.
Exporter le modèle Transformer vers ONNX
Utilisez l'interface de ligne de commande Hugging Face Optimum pour exporter le modèle sentence-transformers/all-MiniLM-L6-v2 vers ONNX.
Pour en savoir plus sur l'exportation de modèles avec la CLI Optimum, consultez Exporter un modèle au format ONNX avec optimum.exporters.onnx.
Pour exporter le modèle, ouvrez un environnement de ligne de commande et procédez comme suit :
Installez la CLI Optimum :
pip install optimum[onnx]Exporter le modèle :
optimum-cli export onnx \ --model sentence-transformers/all-MiniLM-L6-v2 \ --task sentence-similarity \ --opset 17 all-MiniLM-L6-v2/L'argument
--modelspécifie l'ID du modèle Hugging Face. L'argument--opsetspécifie la version de la bibliothèque ONNXRuntime et est défini sur17pour maintenir la compatibilité avec la bibliothèque ONNXRuntime compatible avec BigQuery.
Le fichier de modèle est exporté vers le répertoire all-MiniLM-L6-v2 sous le nom model.onnx.
Appliquer la quantification au modèle Transformer
Utilisez la CLI Optimum pour appliquer la quantification au modèle Transformer exporté afin de réduire la taille du modèle et d'accélérer l'inférence. Pour en savoir plus, consultez Quantification.
Pour appliquer la quantification au modèle, exécutez la commande suivante :
optimum-cli onnxruntime quantize \
--onnx_model all-MiniLM-L6-v2/ \
--avx512_vnni -o all-MiniLM-L6-v2_quantized
Le fichier de modèle quantifié est exporté dans le répertoire all-MiniLM-L6-v2_quantized sous le nom model_quantized.onnx.
Convertir le tokenizer au format ONNX
Pour générer des embeddings à l'aide d'un modèle Transformer au format ONNX, vous utilisez généralement un tokeniseur pour produire deux entrées pour le modèle, input_ids et attention_mask.
Pour générer ces entrées, convertissez le tokenizer du modèle sentence-transformers/all-MiniLM-L6-v2 au format ONNX à l'aide de la bibliothèque onnxruntime-extensions. Une fois le tokenizer converti, vous pouvez effectuer la tokenisation directement sur les entrées de texte brut pour générer des prédictions ONNX.
Pour convertir le tokenizer, procédez comme suit sur la ligne de commande :
Installez la CLI Optimum :
pip install optimum[onnx]À l'aide de l'éditeur de texte de votre choix, créez un fichier nommé
convert-tokenizer.py. L'exemple suivant utilise l'éditeur de texte nano :nano convert-tokenizer.pyCopiez et collez le script Python suivant dans le fichier
convert-tokenizer.py:from onnxruntime_extensions import gen_processing_models # Load the Huggingface tokenizer tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2") # Export the tokenizer to ONNX using gen_processing_models onnx_tokenizer_path = "tokenizer.onnx" # Generate the tokenizer ONNX model, and set the maximum token length. # Ensure 'max_length' is set to a value less than the model's maximum sequence length, failing to do so will result in error during inference. tokenizer_onnx_model = gen_processing_models(tokenizer, pre_kwargs={'max_length': 256})[0] # Modify the tokenizer ONNX model signature. # This is because certain tokenizers don't support batch inference. tokenizer_onnx_model.graph.input[0].type.tensor_type.shape.dim[0].dim_value = 1 # Save the tokenizer ONNX model with open(onnx_tokenizer_path, "wb") as f: f.write(tokenizer_onnx_model.SerializeToString())Enregistrez le fichier
convert-tokenizer.py.Pour convertir le tokenizer, exécutez le script Python :
python convert-tokenizer.py
Le tokenizer converti est exporté vers le répertoire all-MiniLM-L6-v2_quantized sous le nom tokenizer.onnx.
Importer les fichiers de modèle convertis dans Cloud Storage
Une fois le modèle Transformer et le tokenizer convertis, procédez comme suit :
- Créez un bucket Cloud Storage pour stocker les fichiers convertis.
- Importez les fichiers du modèle Transformer converti et du tokenizer dans votre bucket Cloud Storage.
Créer un ensemble de données
Pour créer un ensemble de données BigQuery, sélectionnez l'une des options suivantes :Console
Dans la console Cloud de Confiance , accédez à la page BigQuery.
Dans le volet de gauche, cliquez sur Explorateur :

Si le volet de gauche ne s'affiche pas, cliquez sur Développer le volet de gauche pour l'ouvrir.
Dans l'explorateur, développez votre projet, puis cliquez sur Ensembles de données.
Sur la page Ensembles de données, cliquez sur Créer un ensemble de données.
Dans le volet Créer un ensemble de données, procédez comme suit :
Dans le champ ID de l'ensemble de données, saisissez
bqml_tutorial.Pour Emplacement des données, sélectionnez États-Unis.
Ne modifiez pas les autres paramètres par défaut.
Cliquez sur Créer un ensemble de données.
bq
Pour créer un ensemble de données, utilisez la commande bq mk --dataset.
Créez un ensemble de données nommé
bqml_tutorialavec l'emplacement des données défini surUS:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Vérifiez que l'ensemble de données a été créé :
bq ls
API
Appelez la méthode datasets.insert avec une ressource d'ensemble de données définie :
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
Avant d'essayer cet exemple, suivez les instructions de configuration pour BigQuery DataFrames du guide de démarrage rapide de BigQuery DataFrames. Pour en savoir plus, consultez la documentation de référence sur BigQuery DataFrames.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer les ADC pour un environnement de développement local.
Importer les modèles ONNX dans BigQuery
Importez les modèles de tokenizer et de sentence transformer convertis en tant que modèles BigQuery ML.
Sélectionnez l'une des options suivantes :
Console
Dans la console Cloud de Confiance , accédez à la page Studio de BigQuery.
Dans l'éditeur de requête, exécutez l'instruction
CREATE MODELsuivante pour créer le modèletokenizer:CREATE OR REPLACE MODEL `bqml_tutorial.tokenizer` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='TOKENIZER_BUCKET_PATH');
Remplacez
TOKENIZER_BUCKET_PATHpar le chemin d'accès au modèle que vous avez importé dans Cloud Storage. Si vous utilisez l'exemple de modèle, remplacezTOKENIZER_BUCKET_PATHpar la valeur suivante :gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/tokenizer.onnx.Une fois l'opération terminée, un message semblable à celui-ci s'affiche dans le volet Résultats de la requête :
Successfully created model named tokenizer.Pour ouvrir le volet Détails, cliquez sur Accéder au modèle.
Pour afficher les entrées et les sorties du modèle dans la colonne "Libellé", consultez la section Colonnes de caractéristiques :
Pour créer le modèle
all-MiniLM-L6-v2, exécutez l'instructionCREATE MODELsuivante dans l'éditeur de requête :CREATE OR REPLACE MODEL `bqml_tutorial.all-MiniLM-L6-v2` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='TRANSFORMER_BUCKET_PATH');
Remplacez
TRANSFORMER_BUCKET_PATHpar le chemin d'accès au modèle que vous avez importé dans Cloud Storage. Si vous utilisez l'exemple de modèle, remplacezTRANSFORMER_BUCKET_PATHpar la valeur suivante :gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/model_quantized.onnx.Une fois l'opération terminée, un message semblable à celui-ci s'affiche dans le volet Résultats de la requête :
Successfully created model named all-MiniLM-L6-v2.Pour ouvrir le volet Détails, cliquez sur Accéder au modèle.
Pour afficher les entrées et les sorties du modèle dans la colonne "Libellé", consultez la section Colonnes de caractéristiques :
bq
Exécutez l'instruction CREATE MODEL à l'aide de la commande query de l'outil de ligne de commande bq.
Créez le modèle
tokenizer:bq query --use_legacy_sql=false \ "CREATE OR REPLACE MODEL `bqml_tutorial.tokenizer` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='TOKENIZER_BUCKET_PATH')"Remplacez
TOKENIZER_BUCKET_PATHpar le chemin d'accès au modèle que vous avez importé dans Cloud Storage. Si vous utilisez l'exemple de modèle, remplacezTOKENIZER_BUCKET_PATHpar la valeur suivante :gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/tokenizer.onnx.Une fois l'opération terminée, un message semblable à celui-ci s'affiche :
Successfully created model named tokenizer.Créez le modèle
all-MiniLM-L6-v2:bq query --use_legacy_sql=false \ "CREATE OR REPLACE MODEL `bqml_tutorial.all-MiniLM-L6-v2` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='TRANSFORMER_BUCKET_PATH')"Remplacez
TRANSFORMER_BUCKET_PATHpar le chemin d'accès au modèle que vous avez importé dans Cloud Storage. Si vous utilisez l'exemple de modèle, remplacezTRANSFORMER_BUCKET_PATHpar la valeur suivante :gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/model_quantized.onnx.Une fois l'opération terminée, un message semblable à celui-ci s'affiche :
Successfully created model named all-MiniLM-L6-v2.Une fois les modèles importés, vérifiez qu'ils apparaissent dans l'ensemble de données.
bq ls -m bqml_tutorial
Le résultat ressemble à ce qui suit :
tableId Type ------------------------ tokenizer MODEL all-MiniLM-L6-v2 MODEL
API
Utilisez la méthode jobs.insert pour importer les modèles. Renseignez le paramètre query de la ressource QueryRequest dans le corps de la requête avec l'instruction CREATE MODEL.
Pour créer le modèle
tokenizer, utilisez le paramètrequerysuivant :{ "query": "CREATE MODEL `PROJECT_ID :bqml_tutorial.tokenizer` OPTIONS(MODEL_TYPE='ONNX' MODEL_PATH='TOKENIZER_BUCKET_PATH')" }Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet.TOKENIZER_BUCKET_PATH: chemin d'accès au modèle que vous avez importé dans Cloud Storage. Si vous utilisez l'exemple de modèle, remplacezTOKENIZER_BUCKET_PATHpar la valeur suivante :gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/tokenizer.onnx.
Pour créer le modèle
all-MiniLM-L6-v2, utilisez la valeur de paramètrequerysuivante :{ "query": "CREATE MODEL `PROJECT_ID :bqml_tutorial.all-MiniLM-L6-v2` OPTIONS(MODEL_TYPE='ONNX' MODEL_PATH='TRANSFORMER_BUCKET_PATH')" }Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet.TRANSFORMER_BUCKET_PATH: chemin d'accès au modèle que vous avez importé dans Cloud Storage. Si vous utilisez l'exemple de modèle, remplacezTRANSFORMER_BUCKET_PATHpar la valeur suivante :gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/model_quantized.onnx.
BigQuery DataFrames
Avant d'essayer cet exemple, suivez les instructions de configuration pour BigQuery DataFrames du guide de démarrage rapide de BigQuery DataFrames. Pour en savoir plus, consultez la documentation de référence sur BigQuery DataFrames.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer les ADC pour un environnement de développement local.
Importez les modèles de tokenizer et de sentence transformer à l'aide de l'objet ONNXModel.
import bigframes from bigframes.ml.imported import ONNXModel bigframes.options.bigquery.project = PROJECT_ID bigframes.options.bigquery.location = "US" tokenizer = ONNXModel( model_path= "TOKENIZER_BUCKET_PATH" ) imported_onnx_model = ONNXModel( model_path="TRANSFORMER_BUCKET_PATH" )
Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet.TOKENIZER_BUCKET_PATH: chemin d'accès au modèle que vous avez importé dans Cloud Storage. Si vous utilisez l'exemple de modèle, remplacezTOKENIZER_BUCKET_PATHpar la valeur suivante :gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/tokenizer.onnx.TRANSFORMER_BUCKET_PATH: chemin d'accès au modèle que vous avez importé dans Cloud Storage. Si vous utilisez l'exemple de modèle, remplacezTRANSFORMER_BUCKET_PATHpar la valeur suivante :gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/model_quantized.onnx.
Générer des embeddings avec les modèles ONNX importés
Utilisez le tokenizer importé et les modèles Sentence Transformer pour générer des embeddings basés sur les données de l'ensemble de données public bigquery-public-data.imdb.reviews.
Sélectionnez l'une des options suivantes :
Console
Utilisez la fonction ML.PREDICT pour générer des embeddings avec les modèles.
La requête utilise un appel ML.PREDICT imbriqué pour traiter le texte brut directement via le tokenizer et le modèle d'embedding, comme suit :
- Tokenisation (requête interne) : l'appel
ML.PREDICTinterne utilise le modèlebqml_tutorial.tokenizer. Il utilise la colonnetitlede l'ensemble de données publicbigquery-public-data.imdb.reviewscomme entréetext. Le modèletokenizerconvertit les chaînes de texte brut en entrées de jetons numériques requises par le modèle principal, y compris les entréesinput_idsetattention_mask. - Génération d'embeddings (requête externe) : l'appel
ML.PREDICTexterne utilise le modèlebqml_tutorial.all-MiniLM-L6-v2. La requête utilise les colonnesinput_idsetattention_maskde la sortie de la requête interne comme entrée.
L'instruction SELECT récupère la colonne sentence_embedding, qui est un tableau de valeurs FLOAT représentant l'intégration sémantique du texte.
Pour générer les embeddings, procédez comme suit :
Dans la console Cloud de Confiance , accédez à la page Studio de BigQuery.
Dans l'éditeur de requête, exécutez la requête suivante.
SELECT sentence_embedding FROM ML.PREDICT (MODEL `bqml_tutorial.all-MiniLM-L6-v2`, ( SELECT input_ids, attention_mask FROM ML.PREDICT(MODEL `bqml_tutorial.tokenizer`, ( SELECT title AS text FROM `bigquery-public-data.imdb.reviews` limit 10))));
Le résultat ressemble à ce qui suit :
+-----------------------+ | sentence_embedding | +-----------------------+ | -0.02361682802438736 | | 0.02025664784014225 | | 0.005168713629245758 | | -0.026361213997006416 | | 0.0655381828546524 | | ... | +-----------------------+
bq
Utilisez la commande query de l'outil de ligne de commande bq pour exécuter une requête. La requête utilise la fonction ML.PREDICT pour générer des embeddings avec les modèles.
La requête utilise un appel ML.PREDICT imbriqué pour traiter le texte brut directement via le tokenizer et le modèle d'embedding, comme suit :
- Tokenisation (requête interne) : l'appel
ML.PREDICTinterne utilise le modèlebqml_tutorial.tokenizer. Il utilise la colonnetitlede l'ensemble de données publicbigquery-public-data.imdb.reviewscomme entréetext. Le modèletokenizerconvertit les chaînes de texte brut en entrées de jetons numériques requises par le modèle principal, y compris les entréesinput_idsetattention_mask. - Génération d'embeddings (requête externe) : l'appel
ML.PREDICTexterne utilise le modèlebqml_tutorial.all-MiniLM-L6-v2. La requête utilise les colonnesinput_idsetattention_maskde la sortie de la requête interne comme entrée.
L'instruction SELECT récupère la colonne sentence_embedding, qui est un tableau de valeurs FLOAT représentant l'intégration sémantique du texte.
Dans la ligne de commande, exécutez la commande suivante pour exécuter la requête.
bq query --use_legacy_sql=false \ 'SELECT sentence_embedding FROM ML.PREDICT (MODEL `bqml_tutorial.all-MiniLM-L6-v2`, ( SELECT input_ids, attention_mask FROM ML.PREDICT(MODEL `bqml_tutorial.tokenizer`, ( SELECT title AS text FROM `bigquery-public-data.imdb.reviews` limit 10))))'
Le résultat ressemble à ce qui suit :
+-----------------------+ | sentence_embedding | +-----------------------+ | -0.02361682802438736 | | 0.02025664784014225 | | 0.005168713629245758 | | -0.026361213997006416 | | 0.0655381828546524 | | ... | +-----------------------+
BigQuery DataFrames
Avant d'essayer cet exemple, suivez les instructions de configuration pour BigQuery DataFrames du guide de démarrage rapide de BigQuery DataFrames. Pour en savoir plus, consultez la documentation de référence sur BigQuery DataFrames.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer les ADC pour un environnement de développement local.
Utilisez la méthode predict pour générer des embeddings à l'aide des modèles ONNX.
import bigframes.pandas as bpd
df = bpd.read_gbq("bigquery-public-data.imdb.reviews", max_results=10)
df_pred = df.rename(columns={"title": "text"})
tokens = tokenizer.predict(df_pred)
predictions = imported_onnx_model.predict(tokens)
predictions.peek(5)
Le résultat ressemble à ce qui suit :
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
Console
- Dans la console Cloud de Confiance , accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
gcloud
Supprimer un projet Cloud de Confiance :
gcloud projects delete PROJECT_ID
Supprimer des ressources individuelles
Vous pouvez également conserver le projet et supprimer les ressources utilisées dans ce tutoriel en procédant comme suit :
Dans la console Cloud de Confiance , accédez à la page Studio de BigQuery.
Dans le volet de gauche, développez votre projet, puis cliquez sur Ensembles de données.
Pour l'ensemble de données
bqml_tutorial, cliquez sur Ouvrir les actions > Supprimer.Dans la boîte de dialogue Supprimer l'ensemble de données, cliquez sur Supprimer pour confirmer l'opération.
Si vous avez suivi la procédure pour convertir manuellement les fichiers de modèle Transformer au format ONNX, supprimez le bucket Cloud Storage.
Étapes suivantes
- Découvrez comment utiliser les embeddings de texte pour la recherche sémantique et la génération augmentée par récupération (RAG).
- Pour en savoir plus sur la conversion de modèles Transformers au format ONNX, consultez Exporter un modèle au format ONNX avec
optimum.exporters.onnx. - Pour en savoir plus sur l'importation de modèles ONNX, consultez la page Instruction
CREATE MODELpour les modèles ONNX. - Pour en savoir plus sur l'exécution de prédictions, consultez la section Fonction
ML.PREDICT. - Pour obtenir plus d'informations sur BigQuery ML, consultez la page Présentation de BigQuery ML.
- Pour commencer à utiliser BigQuery ML, consultez la page Créer des modèles de machine learning dans BigQuery ML.