Améliorer les performances du modèle à l'aide des réglages et de l'évaluation
Ce document explique comment créer un modèle distant BigQuery ML faisant référence à un modèle gemini-1.5-flash-002
Vertex AI.
Vous utiliserez ensuite le
réglage supervisé pour ajuster le modèle avec de nouvelles données d'entraînement, puis l'évaluer avec la fonction ML.EVALUATE
.
Le réglage peut vous aider à traiter les scénarios dans lesquels vous devez personnaliser le modèle Vertex AI hébergé, par exemple lorsque le comportement attendu du modèle est difficile à définir de manière concise dans une requête, ou lorsque les requêtes ne produisent pas de résultats attendus suffisamment cohérents. Le réglage supervisé influence également le modèle des manières suivantes :
- Il permet de guider le modèle afin qu'il renvoie des styles de réponse spécifiques (par exemple, plus concis ou plus détaillé).
- Entraîne les nouveaux comportements du modèle, par exemple en répondant aux requêtes en tant que persona spécifique.
- Il entraîne la mise à jour du modèle avec de nouvelles informations.
Dans ce tutoriel, l'objectif est de demander au modèle de générer un texte dont le style et le contenu se conforment le plus possible au contenu de vérité terrain fourni.
Autorisations requises
Pour créer une connexion, vous avez besoin 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 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, Vertex AI, and Compute Engine APIs.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
- BigQuery: You incur costs for the queries that you run in BigQuery.
- BigQuery ML: You incur costs for the model that you create and the processing that you perform in BigQuery ML.
- Vertex AI: You incur costs for calls to and
supervised tuning of the
gemini-1.0-flash-002
model.
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Pour en savoir plus, consultez les ressources suivantes :
Créer un ensemble de données
Vous allez créer un ensemble de données BigQuery pour stocker votre modèle de ML :
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 le champ ID de l'ensemble de données, saisissez
bqml_tutorial
.Pour Type d'emplacement, sélectionnez Multirégional, puis sélectionnez US (plusieurs régions aux États-Unis).
Les ensembles de données publics sont stockés dans l'emplacement multirégional
US
. Par souci de simplicité, stockez votre ensemble de données dans le même emplacement.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
Accédez à la page BigQuery.
Pour créer une connexion, cliquez sur
Ajouter, puis sur Connexions aux sources de données externes.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 Create connection (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 de la connexion
Attribuez le rôle d'agent de service Vertex AI à votre compte de service afin qu'il puisse accéder à Vertex AI. La non-attribution de ce rôle génère une erreur. Sélectionnez l'une des options suivantes :
Console
Accédez à la page IAM et administration.
Cliquez sur
Accorder l'accès.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.
Cliquez sur Select a role (Sélectionner un rôle).
Dans le champ Filtre, saisissez
Vertex AI Service Agent
, puis sélectionnez ce rôle.Cliquez sur Enregistrer.
gcloud
Exécutez la commande gcloud projects add-iam-policy-binding
:
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.serviceAgent' --condition=None
Remplacez les éléments suivants :
PROJECT_NUMBER
: votre numéro de projetMEMBER
: ID du compte de service que vous avez copié précédemment
Le compte de service associé à votre connexion est une instance de l'agent de service de délégation de connexion BigQuery. Vous pouvez donc lui attribuer un rôle d'agent de service.
Créer des tables de test
Créez des tables de données d'entraînement et d'évaluation à partir de l'ensemble de données public task955_wiki_auto_style_transfer de Hugging Face.
Ouvrez Cloud Shell.
Dans Cloud Shell, exécutez les commandes suivantes pour créer des tableaux de données de test et d'évaluation:
python3 -m pip install pandas pyarrow fsspec huggingface_hub python3 -c "import pandas as pd; df_train = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/train-00000-of-00001.parquet').drop('id', axis=1); df_train['output'] = [x[0] for x in df_train['output']]; df_train.to_json('wiki_auto_style_transfer_train.jsonl', orient='records', lines=True);" python3 -c "import pandas as pd; df_valid = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/valid-00000-of-00001.parquet').drop('id', axis=1); df_valid['output'] = [x[0] for x in df_valid['output']]; df_valid.to_json('wiki_auto_style_transfer_valid.jsonl', orient='records', lines=True);" bq rm -t bqml_tutorial.wiki_auto_style_transfer_train bq rm -t bqml_tutorial.wiki_auto_style_transfer_valid bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_train wiki_auto_style_transfer_train.jsonl input:STRING,output:STRING bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_valid wiki_auto_style_transfer_valid.jsonl input:STRING,output:STRING
Créer un modèle de référence
Créez un modèle distant basé sur le modèle gemini-1.0-flash-002
Vertex AI.
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction suivante pour créer un modèle distant :
CREATE OR REPLACE MODEL `bqml_tutorial.gemini_baseline` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT ='gemini-1.5-flash-002');
Remplacez les éléments suivants :
LOCATION
: emplacement de la connexionCONNECTION_ID
: ID de votre connexion BigQuery.Lorsque vous affichez les détails de la connexion dans la console Google Cloud,
CONNECTION_ID
correspond à 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
gemini_baseline
apparaît dans l'ensemble de donnéesbqml_tutorial
dans le volet Explorateur. Étant donné que la requête utilise une instructionCREATE MODEL
pour créer un modèle, il n'y a aucun résultat de requête.
Vérifier les performances du modèle de référence
Exécutez la fonction ML.GENERATE_TEXT
avec le modèle distant afin de constater ses performances sur les données d'évaluation, sans aucun réglage.
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction suivante :
SELECT ml_generate_text_llm_result, ground_truth FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini_baseline`, ( SELECT input AS prompt, output AS ground_truth FROM `bqml_tutorial.wiki_auto_style_transfer_valid` LIMIT 10 ), STRUCT(TRUE AS flatten_json_output));
Si vous examinez les données de sortie et que vous comparez les valeurs
ml_generate_text_llm_result
etground_truth
, vous constatez que si le modèle de référence génère un texte qui reflète précisément les faits fournis dans le contenu de référence, le style du texte est assez différent.
Évaluer le modèle de référence
Pour effectuer une évaluation plus détaillée des performances du modèle, vous allez utiliser la fonction ML.EVALUATE
.
Cette fonction calcule les métriques du modèle qui mesurent la précision et la qualité du texte généré, afin de comparer les réponses du modèle aux réponses idéales.
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction suivante :
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.gemini_baseline`, ( SELECT input AS input_text, output AS output_text FROM `bqml_tutorial.wiki_auto_style_transfer_valid` ), STRUCT('text_generation' AS task_type));
La sortie ressemble à ceci :
+---------------------+---------------------+-------------------------------------------+--------------------------------------------+ | bleu4_score | rouge-l_precision | rouge-l_recall | rouge-l_f1_score | evaluation_status | +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+ | 0.15289758194680161 | 0.24925921915413246 | 0.44622484204944518 | 0.30851122211104348 | { | | | | | | "num_successful_rows": 176, | | | | | | "num_total_rows": 176 | | | | | | } | +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
Vous pouvez constater que les performances du modèle de référence ne sont pas mauvaises, mais que la similarité du texte généré avec la vérité terrain est faible, d'après les métriques d'évaluation. Cela indique qu'il est intéressant d'effectuer un réglage supervisé pour voir si vous pouvez améliorer les performances du modèle pour ce cas d'utilisation.
Créer un modèle réglé
Créez un modèle distant très semblable à celui que vous avez créé dans la section Créer un modèle, mais en spécifiant cette fois la clause AS SELECT
pour fournir les données d'entraînement afin de régler le modèle.
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction suivante pour créer un modèle distant :
CREATE OR REPLACE MODEL `bqml_tutorial.gemini_tuned` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS ( endpoint = 'gemini-1.5-flash-002', max_iterations = 500, data_split_method = 'no_split') AS SELECT input AS prompt, output AS label FROM `bqml_tutorial.wiki_auto_style_transfer_train`;
Remplacez les éléments suivants :
LOCATION
: emplacement de la connexionCONNECTION_ID
: ID de votre connexion BigQuery.Lorsque vous affichez les détails de la connexion dans la console Google Cloud,
CONNECTION_ID
correspond à 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 quelques minutes, après quoi le modèle
gemini_tuned
apparaît dans l'ensemble de donnéesbqml_tutorial
dans le volet Explorer. Étant donné que la requête utilise une instructionCREATE MODEL
pour créer un modèle, il n'y a aucun résultat de requête.
Vérifier les performances du modèle réglé
Exécutez la fonction ML.GENERATE_TEXT
pour constater les performances du modèle réglé sur les données d'évaluation.
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction suivante :
SELECT ml_generate_text_llm_result, ground_truth FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini_tuned`, ( SELECT input AS prompt, output AS ground_truth FROM `bqml_tutorial.wiki_auto_style_transfer_valid` LIMIT 10 ), STRUCT(TRUE AS flatten_json_output));
Si vous examinez les données de sortie, vous constatez que le modèle ajusté produit un texte dont le style est beaucoup plus proche du contenu de vérité terrain.
Évaluer le modèle réglé
Utilisez la fonction ML.EVALUATE
pour comparer les réponses du modèle réglé aux réponses idéales.
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction suivante :
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.gemini_tuned`, ( SELECT input AS prompt, output AS label FROM `bqml_tutorial.wiki_auto_style_transfer_valid` ), STRUCT('text_generation' AS task_type));
La sortie ressemble à ceci :
+---------------------+---------------------+-------------------------------------------+--------------------------------------------+ | bleu4_score | rouge-l_precision | rouge-l_recall | rouge-l_f1_score | evaluation_status | +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+ | 0.19391708685890585 | 0.34170970869469058 | 0.46793189219384496 | 0.368190192211538 | { | | | | | | "num_successful_rows": 176, | | | | | | "num_total_rows": 176 | | | | | | } | +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
Vous pouvez voir que même si l'ensemble de données d'entraînement n'a utilisé que 1 408 exemples,les performances sont nettement améliorées, comme l'indiquent les métriques d'évaluation plus élevées.
Effectuer un nettoyage
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.