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-bindingda 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
requeste tem de ser um JSON válido. Estes dados JSON representam a sua entrada para o modelo. - O conteúdo na coluna
requesttem 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 estadoqueueaté 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"}}