Cette page explique comment obtenir des prédictions par lots à l'aide de BigQuery.
1. Préparer les entrées
Entrée de stockage BigQuery
- Votre compte de service doit disposer des autorisations BigQuery appropriées. Pour attribuer le rôle Utilisateur BigQuery au compte de service, utilisez la commande
gcloud iam service-accounts add-iam-policy-binding
comme suit :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/bigquery.user"
Remplacez les valeurs suivantes :
* <var>PROJECT_ID</var>: The project that your service account was
created in.
* <var>SERVICE_ACCOUNT_ID</var>: The ID for the service account.
- Une colonne
request
est obligatoire et doit être au format JSON valide. Ces données JSON représentent votre entrée pour le modèle. - Le contenu de la colonne
request
doit correspondre à la structure deGenerateContentRequest
. + Votre table d'entrée peut comporter des types de données de colonne autres querequest
. Ces colonnes peuvent avoir des types de données BigQuery, à l'exception des suivants : array, struct, range, datetime et geography. Ces colonnes sont ignorées pour la génération de contenu, mais sont incluses dans la table de sortie.
Exemple d'entrée (JSON) |
---|
|
2. Envoyer un job par lot
Vous pouvez créer un job par lot à l'aide de la console Google Cloud , du SDK Google Gen AI ou de l'API REST.
Le job et votre table doivent se trouver dans la même région.
Console
- Dans la section Vertex AI de la console Google Cloud , accédez à la page Inférence par lot.
- Cliquez sur Créer.
REST
Pour créer un job de prédiction par lots, utilisez la méthode projects.locations.batchPredictionJobs.create
.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- LOCATION : région compatible avec les modèles Gemini.
- PROJECT_ID : l'ID de votre projet.
- MODEL_PATH : nom du modèle d'éditeur (par exemple,
publishers/google/models/gemini-2.0-flash-001
) ou nom du point de terminaison réglé (par exemple,projects/PROJECT_ID/locations/LOCATION/models/MODEL_ID
), où MODEL_ID est l'ID du modèle réglé. - INPUT_URI : table BigQuery où se trouve votre entrée de prédiction par lots, par exemple
bq://myproject.mydataset.input_table
. L'ensemble de données doit se trouver dans la même région que le job de prédiction par lots. Les ensembles de données multirégionaux ne sont pas acceptés. - OUTPUT_FORMAT : pour générer une sortie dans une table BigQuery, spécifiez
bigquery
. Pour générer la sortie dans un bucket Cloud Storage, spécifiezjsonl
. - DESTINATION : pour BigQuery, spécifiez
bigqueryDestination
. Pour Cloud Storage, spécifiezgcsDestination
. - OUTPUT_URI_FIELD_NAME : pour BigQuery, spécifiez
outputUri
. Pour Cloud Storage, spécifiezoutputUriPrefix
. - OUTPUT_URI : pour BigQuery, spécifiez l'emplacement de la table, par exemple
bq://myproject.mydataset.output_result
. La région de l'ensemble de données BigQuery de sortie doit être identique à celle du job de prédiction par lots Vertex AI. Pour Cloud Storage, spécifiez l'emplacement du bucket et du répertoire, par exemplegs://mybucket/path/to/output
.
Méthode HTTP et URL :
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs
Corps JSON de la requête :
{ "displayName": "my-bigquery-batch-prediction-job", "model": "MODEL_PATH", "inputConfig": { "instancesFormat": "bigquery", "bigquerySource":{ "inputUri" : "INPUT_URI" } }, "outputConfig": { "predictionsFormat": "OUTPUT_FORMAT", "DESTINATION": { "OUTPUT_URI_FIELD_NAME": "OUTPUT_URI" } } }
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs"
PowerShell
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs" | Select-Object -Expand Content
Vous devriez recevoir une réponse JSON semblable à la suivante.
La réponse inclut un identifiant unique pour le job par lot. Vous pouvez interroger l'état de la job par lot à l'aide de BATCH_JOB_ID. Pour en savoir plus, consultez Surveiller l'état du job. Remarque : Les rapports sur le compte de service personnalisé, la progression en temps réel, les clés CMEK et les rapports VPCSC ne sont pas pris en charge.Python
Installer
pip install --upgrade google-genai
Pour en savoir plus, lisez la documentation de référence du SDK.
Définissez les variables d'environnement pour utiliser le SDK Gen AI avec Vertex AI :
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=global export GOOGLE_GENAI_USE_VERTEXAI=True
3. Surveiller l'état et la progression du job
Une fois le job envoyé, vous pouvez vérifier son état à l'aide de l'API, du SDK et de la console Cloud.
Console
- Accédez à la page Inférer par lot.
- Sélectionnez votre job par lot pour suivre sa progression.
REST
Pour surveiller un job de prédiction par lots, utilisez la méthode projects.locations.batchPredictionJobs.get
et affichez le champ CompletionStats
dans la réponse.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- LOCATION : région compatible avec les modèles Gemini.
- PROJECT_ID : .
- BATCH_JOB_ID : ID de votre job par lot.
Méthode HTTP et URL :
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/BATCH_JOB_ID
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Exécutez la commande suivante :
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/BATCH_JOB_ID"
PowerShell
Exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/BATCH_JOB_ID" | Select-Object -Expand Content
Vous devriez recevoir une réponse JSON semblable à la suivante.
Python
Installer
pip install --upgrade google-genai
Pour en savoir plus, lisez la documentation de référence du SDK.
Définissez les variables d'environnement pour utiliser le SDK Gen AI avec Vertex AI :
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=global export GOOGLE_GENAI_USE_VERTEXAI=True
L'état d'un job par lot donné peut être l'un des suivants :
JOB_STATE_PENDING
: file d'attente pour la capacité. La tâche peut être à l'étatqueue
jusqu'à 72 heures avant de passer à l'étatrunning
.JOB_STATE_RUNNING
: le fichier d'entrée a été validé et le lot est en cours d'exécution.JOB_STATE_SUCCEEDED
: le lot est terminé et les résultats sont prêts.JOB_STATE_FAILED
: le fichier d'entrée n'a pas réussi le processus de validation ou n'a pas pu être terminé dans le délai de 24 heures après l'entrée dans l'étatRUNNING
.JOB_STATE_CANCELLING
: le lot est en cours d'annulationJOB_STATE_CANCELLED
: le lot a été annulé
4. Récupérer une sortie par lot
Lorsqu'une tâche de prédiction par lots est terminée, le résultat est stocké dans la table BigQuery que vous avez spécifiée dans votre requête.
Pour les lignes réussies, les réponses du modèle sont stockées dans la colonne response
.
Sinon, les détails de l'erreur sont stockés dans la colonne status
en vue d'une inspection plus approfondie.
Exemple de sortie
Exemple de réussite
{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"text": "In a medium bowl, whisk together the flour, baking soda, baking powder."
}
]
},
"finishReason": "STOP",
"safetyRatings": [
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"probability": "NEGLIGIBLE",
"probabilityScore": 0.14057204,
"severity": "HARM_SEVERITY_NEGLIGIBLE",
"severityScore": 0.14270912
}
]
}
],
"usageMetadata": {
"promptTokenCount": 8,
"candidatesTokenCount": 396,
"totalTokenCount": 404
}
}
Exemple d'échec
Requête
{"contents":[{"parts":{"text":"Explain how AI works in a few words."},"role":"tester"}]}
Réponse
Bad Request: {"error": {"code": 400, "message": "Please use a valid role: user, model.", "status": "INVALID_ARGUMENT"}}