Questa pagina descrive come ottenere inferenze batch utilizzando BigQuery.
1. Preparare gli input
Input di archiviazione BigQuery
Il account di servizio deve disporre delle autorizzazioni BigQuery appropriate. Per concedere all'account di servizio il ruolo Utente BigQuery,
utilizza il comando gcloud iam service-accounts add-iam-policy-binding nel seguente modo:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/bigquery.user"
Sostituisci i seguenti valori:
- PROJECT_ID: l'ID del progetto in cui è stato creato il account di servizio.
- SERVICE_ACCOUNT_ID: l'ID del account di servizio.
È necessaria una colonna request, che deve essere un JSON valido. Questi
dati JSON rappresentano l'input per il modello.
I contenuti della colonna request devono corrispondere alla struttura di un
GenerateContentRequest.
La tabella di input può avere tipi di dati delle colonne diversi da
request. Queste colonne possono avere tipi di dati BigQuery, ad eccezione di quanto segue: array, struct, intervallo, datetime e geografia. Queste colonne vengono ignorate per la generazione di contenuti, ma
sono incluse nella tabella di output.
| Input di esempio (JSON) |
|---|
|
2. Invia un job batch
Puoi creare un job batch tramite la console Google Cloud , l'SDK Google Gen AI o l'API REST.
Il job e la tabella devono trovarsi nella stessa regione.
Console
- Nella sezione Vertex AI della console Google Cloud , vai alla pagina Inferenza batch.
- Fai clic su Crea.
REST
Per creare un job di inferenza batch, utilizza il
metodo projects.locations.batchPredictionJobs.create.
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- LOCATION: una regione che supporta i modelli Gemini.
- PROJECT_ID: il tuo ID progetto
- MODEL_PATH: il nome del modello dell'editore, ad esempio
publishers/google/models/gemini-2.0-flash-001; o il nome dell'endpoint ottimizzato, ad esempioprojects/PROJECT_ID/locations/LOCATION/models/MODEL_ID, dove MODEL_ID è l'ID modello del modello ottimizzato. - INPUT_URI: la
tabella BigQuery in cui si trova l'input dell'inferenza batch,
ad esempio
bq://myproject.mydataset.input_table. Il set di dati deve trovarsi nella stessa regione del job di inferenza batch. I set di dati multiregionali non sono supportati. - OUTPUT_FORMAT: per l'output in
una tabella BigQuery, specifica
bigquery. Per l'output in un bucket Cloud Storage, specificajsonl. - DESTINATION: per
BigQuery, specifica
bigqueryDestination. Per Cloud Storage, specificagcsDestination. - OUTPUT_URI_FIELD_NAME:
Per BigQuery, specifica
outputUri. Per Cloud Storage, specificaoutputUriPrefix. - OUTPUT_URI: per
BigQuery, specifica la posizione della tabella, ad esempio
bq://myproject.mydataset.output_result. La regione del set di dati BigQuery di output deve essere la stessa del job di inferenza batch Vertex AI. Per Cloud Storage, specifica la posizione del bucket e della directory, ad esempiogs://mybucket/path/to/output.
Metodo HTTP e URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs
Corpo JSON della richiesta:
{
"displayName": "my-bigquery-batch-inference-job",
"model": "MODEL_PATH",
"inputConfig": {
"instancesFormat": "bigquery",
"bigquerySource":{
"inputUri" : "INPUT_URI"
}
},
"outputConfig": {
"predictionsFormat": "OUTPUT_FORMAT",
"DESTINATION": {
"OUTPUT_URI_FIELD_NAME": "OUTPUT_URI"
}
}
}
Per inviare la richiesta, scegli una di queste opzioni:
curl
Salva il corpo della richiesta in un file denominato request.json,
quindi esegui il comando seguente:
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
Salva il corpo della richiesta in un file denominato request.json,
quindi esegui il comando seguente:
$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
Dovresti ricevere una risposta JSON simile alla seguente.
La risposta include un identificatore univoco per il job batch. Puoi eseguire il polling dello stato del job batch utilizzando BATCH_JOB_ID. Per saperne di più, vedi Monitorare lo stato del job. Nota: i report su service account personalizzato, stato di avanzamento in tempo reale, CMEK e VPCSC non sono supportati.Python
Installa
pip install --upgrade google-genai
Per saperne di più, consulta la documentazione di riferimento dell'SDK.
Imposta le variabili di ambiente per utilizzare l'SDK Gen AI con 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. Monitorare lo stato e l'avanzamento del job
Dopo l'invio del job, puoi controllare lo stato del job batch utilizzando API, SDK e Cloud Console.
Console
- Vai alla pagina Inferenza batch.
- Seleziona il job batch per monitorarne l'avanzamento.
REST
Per monitorare un job di inferenza batch, utilizza il metodo
projects.locations.batchPredictionJobs.get e visualizza il campo CompletionStats nella risposta.
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- ENDPOINT_PREFIX: la regione della risorsa modello seguita da
-. Ad esempio:us-central1-. Se utilizzi l'endpoint globale, lascia vuoto questo campo. Nota:l'endpoint globale non è supportato per l'inferenza batch utilizzando modelli ottimizzati. - LOCATION: una regione che supporta
i modelli Gemini. Se utilizzi l'endpoint globale, inserisci
global. - PROJECT_ID: il tuo ID progetto.
- BATCH_JOB_ID: l'ID del job batch.
Metodo HTTP e URL:
GET https://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/BATCH_JOB_ID
Per inviare la richiesta, scegli una di queste opzioni:
curl
Esegui questo comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/BATCH_JOB_ID"
PowerShell
Esegui questo comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/BATCH_JOB_ID" | Select-Object -Expand Content
Dovresti ricevere una risposta JSON simile alla seguente.
Python
Installa
pip install --upgrade google-genai
Per saperne di più, consulta la documentazione di riferimento dell'SDK.
Imposta le variabili di ambiente per utilizzare l'SDK Gen AI con 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
Lo stato di un determinato job batch può essere uno dei seguenti:
JOB_STATE_PENDING: Accoda per capacità. La prestazione può trovarsi nello statoqueuefino a 72 ore prima di passare allo statorunning.JOB_STATE_RUNNING: il file di input è stato convalidato correttamente e il batch è attualmente in esecuzione.JOB_STATE_SUCCEEDED: Il batch è stato completato e i risultati sono prontiJOB_STATE_FAILED: il file di input non ha superato la procedura di convalida o non è stato possibile completarla entro il periodo di 24 ore dopo l'inserimento dello statoRUNNING.JOB_STATE_CANCELLING: il batch è in fase di annullamentoJOB_STATE_CANCELLED: il batch è stato annullato
4. Recuperare l'output batch
Al termine di un'attività di inferenza batch, l'output viene archiviato nella tabella BigQuery specificata nella richiesta.
Per le righe riuscite, le risposte del modello vengono memorizzate nella colonna response.
In caso contrario, i dettagli dell'errore vengono memorizzati nella colonna status per ulteriori
ispezioni.
Esempio di output
Esempio riuscito
{
"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
}
}
Esempio di operazione non riuscita
Richiesta
{"contents":[{"parts":{"text":"Explain how AI works in a few words."},"role":"tester"}]}Risposta
Bad Request: {"error": {"code": 400, "message": "Please use a valid role: user, model.", "status": "INVALID_ARGUMENT"}}