Esta página descreve como obter previsões em lote através do BigQuery.
1. Prepare as suas entradas
Entrada de armazenamento do BigQuery
- A sua conta de serviço tem de ter as autorizações do BigQuery adequadas. Para conceder à conta de serviço a função Utilizador do BigQuery,
use o comando
gcloud iam service-accounts add-iam-policy-binding
da seguinte forma:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/bigquery.user"
Substitua os seguintes valores:
- PROJECT_ID: o projeto no qual a sua conta de serviço foi criada.
- SERVICE_ACCOUNT_ID: o ID da conta de serviço.
- É necessária uma coluna
request
e tem de ser um JSON válido. Estes dados JSON representam a sua entrada para o modelo. - O conteúdo na coluna
request
tem de corresponder à estrutura de umGenerateContentRequest
. + A tabela de entrada pode ter tipos de dados de coluna diferentes derequest
. Estas colunas podem ter tipos de dados do BigQuery, exceto os seguintes: matriz, struct, intervalo, data/hora e geografia. Estas colunas são ignoradas para a geração de conteúdo, mas são incluídas na tabela de saída.
Exemplo de entrada (JSON) |
---|
|
2. Envie uma tarefa de lote
Pode criar uma tarefa em lote através da Google Cloud consola, do SDK de IA gen da Google ou da API REST.
A tarefa e a tabela têm de estar na mesma região.
Consola
- Na secção Vertex AI da Google Cloud consola, aceda à página Inferência em lote.
- Clique em Criar.
REST
Para criar uma tarefa de previsão em lote, use o método
projects.locations.batchPredictionJobs.create
.
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- LOCATION: Uma região que suporta modelos Gemini.
- PROJECT_ID: o seu ID do projeto.
- MODEL_PATH: o nome do modelo do publicador, por exemplo,
publishers/google/models/gemini-2.0-flash-001
; ou o nome do ponto final otimizado, por exemplo,projects/PROJECT_ID/locations/LOCATION/models/MODEL_ID
, em que MODEL_ID é o ID do modelo otimizado. - INPUT_URI: a tabela do BigQuery onde se encontra a entrada de previsão em lote, como
bq://myproject.mydataset.input_table
. O conjunto de dados tem de estar localizado na mesma região que a tarefa de previsão em lote. Os conjuntos de dados de várias regiões não são suportados. - OUTPUT_FORMAT: para gerar resultados numa
tabela do BigQuery, especifique
bigquery
. Para gerar resultados num contentor do Cloud Storage, especifiquejsonl
. - DESTINATION: para o BigQuery, especifique
bigqueryDestination
. Para o Cloud Storage, especifiquegcsDestination
. - OUTPUT_URI_FIELD_NAME:
Para o BigQuery, especifique
outputUri
. Para o Cloud Storage, especifiqueoutputUriPrefix
. - OUTPUT_URI: para o BigQuery, especifique a localização da tabela, como
bq://myproject.mydataset.output_result
. A região do conjunto de dados do BigQuery de saída tem de ser igual à tarefa de previsão em lote do Vertex AI. Para o Cloud Storage, especifique o contentor e a localização do diretório, comogs://mybucket/path/to/output
.
Método HTTP e URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs
Corpo JSON do pedido:
{ "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" } } }
Para enviar o seu pedido, escolha uma destas opções:
curl
Guarde o corpo do pedido num ficheiro com o nome request.json
,
e execute o seguinte comando:
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
Guarde o corpo do pedido num ficheiro com o nome request.json
,
e execute o seguinte comando:
$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
Deve receber uma resposta JSON semelhante à seguinte.
A resposta inclui um identificador exclusivo para a tarefa em lote. Pode sondar o estado da tarefa em lote através do comando BATCH_JOB_ID. Para mais informações, consulte o artigo Monitorize o estado da tarefa. Nota: não são suportados relatórios de conta de serviço personalizada, progresso em direto, CMEK e VPCSC.Python
Instalação
pip install --upgrade google-genai
Para saber mais, consulte a documentação de referência do SDK.
Defina variáveis de ambiente para usar o SDK de IA gen com o 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. Monitorize o estado e o progresso da tarefa
Depois de enviar a tarefa, pode verificar o estado da tarefa em lote através da API, do SDK e da Cloud Console.
Consola
- Aceda à página Inferência em lote.
- Selecione a tarefa em lote para monitorizar o respetivo progresso.
REST
Para monitorizar uma tarefa de previsão em lote, use o método projects.locations.batchPredictionJobs.get
e veja o campo CompletionStats
na resposta.
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- ENDPOINT_PREFIX: a região do recurso do modelo seguida de
-
. Por exemplo,us-central1-
. Se usar o ponto final global, deixe em branco. Nota: o ponto final global não é suportado para a inferência em lote com modelos otimizados. - LOCATION: Uma região que suporta
modelos Gemini. Se usar o ponto final global, introduza
global
. - PROJECT_ID: o ID do seu projeto.
- BATCH_JOB_ID: o ID da tarefa em lote.
Método HTTP e URL:
GET https://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/BATCH_JOB_ID
Para enviar o seu pedido, escolha uma destas opções:
curl
Execute o seguinte 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
Execute o seguinte 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
Deve receber uma resposta JSON semelhante à seguinte.
Python
Instalação
pip install --upgrade google-genai
Para saber mais, consulte a documentação de referência do SDK.
Defina variáveis de ambiente para usar o SDK de IA gen com o 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
O estado de uma determinada tarefa em lote pode ser qualquer um dos seguintes:
JOB_STATE_PENDING
: fila para capacidade. A tarefa pode estar no estadoqueue
até 72 horas antes de entrar no estadorunning
.JOB_STATE_RUNNING
: o ficheiro de entrada foi validado com êxito e o lote está atualmente em execução.JOB_STATE_SUCCEEDED
: o lote foi concluído e os resultados estão prontosJOB_STATE_FAILED
: o ficheiro de entrada falhou no processo de validação ou não foi possível concluí-lo no período de 24 horas após a entrada no estadoRUNNING
.JOB_STATE_CANCELLING
: o lote está a ser canceladoJOB_STATE_CANCELLED
: o lote foi cancelado
4. Obtenha o resultado do lote
Quando uma tarefa de previsão em lote é concluída, o resultado é armazenado na tabela do BigQuery que especificou no seu pedido.
Para as linhas com êxito, as respostas do modelo são armazenadas na coluna response
.
Caso contrário, os detalhes dos erros são armazenados na coluna status
para inspeção
adicional.
Exemplo de saída
Exemplo bem-sucedido
{
"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
}
}
Exemplo com falha
Pedido
{"contents":[{"parts":{"text":"Explain how AI works in a few words."},"role":"tester"}]}
Resposta
Bad Request: {"error": {"code": 400, "message": "Please use a valid role: user, model.", "status": "INVALID_ARGUMENT"}}