Nesta página, descrevemos como receber inferências em lote usando o BigQuery.
1. Preparar suas entradas
Entrada de armazenamento do BigQuery
Sua conta de serviço precisa ter as permissões adequadas do BigQuery. Para conceder à conta de serviço o papel de Usuário do BigQuery,
use o comando gcloud iam service-accounts add-iam-policy-binding
da seguinte maneira:
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 ID do projeto em que a conta de serviço foi criada.
- SERVICE_ACCOUNT_ID: o ID da conta de serviço.
Uma coluna request é obrigatória e precisa ser um JSON válido. Esses dados JSON representam a entrada do modelo.
O conteúdo da coluna request precisa corresponder à estrutura de um
GenerateContentRequest.
A tabela de entrada pode ter tipos de dados de coluna diferentes de request. Essas colunas podem ter tipos de dados do BigQuery exceto
os seguintes: array, struct, range, datetime e
geography. Essas colunas são ignoradas para geração de conteúdo, mas incluídas na tabela de saída.
| Exemplo de entrada (JSON) |
|---|
|
2. Enviar um job em lote
É possível criar um job em lote pelo Google Cloud console, pelo SDK de IA Generativa do Google, ou pela API REST.
O job e a tabela precisam estar na mesma região.
Console
- Na seção "Agent Platform" do Google Cloud console, acesse a página Inferência em lote.
- Clique em Criar.
REST
Para criar um job de inferência em lote, use o
projects.locations.batchPredictionJobs.create método.
Antes de usar os dados da solicitação abaixo, faça estas substituições:
- ENDPOINT_PREFIX: a região do recurso do modelo seguida por
-. Por exemplo,us-central1-. Se você estiver usando o endpoint global, deixe em branco. Observação:o endpoint global não é compatível com a inferência em lote usando modelos ajustados. - LOCATION: uma região compatível com
modelos Gemini. Se você estiver usando o endpoint global, insira
global. - PROJECT_ID: o ID do projeto .
- MODEL_PATH: o nome do modelo do editor, por exemplo,
publishers/google/models/gemini-2.0-flash-001; ou o nome do endpoint ajustado, por exemplo,projects/PROJECT_ID/locations/LOCATION/models/MODEL_ID, em que MODEL_ID é o ID do modelo ajustado. - INPUT_URI: a tabela do BigQuery em que a entrada de inferência em lote está localizada, como
bq://myproject.mydataset.input_table. O conjunto de dados precisa estar na mesma região que o job de inferência em lote. Não há suporte para conjuntos de dados multirregionais. - OUTPUT_FORMAT: para gerar a saída em
uma tabela do BigQuery, especifique
bigquery. Para gerar a saída em um bucket 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 o local da tabela, como
bq://myproject.mydataset.output_result. A região do conjunto de dados de saída BigQuery precisa ser a mesma do job de inferência em lote da Agent Platform. Para o Cloud Storage, especifique o bucket e o local do diretório, comogs://mybucket/path/to/output.
Método HTTP e URL:
POST https://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs
Corpo JSON da solicitação:
{
"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"
}
}
}
Para enviar a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs"
PowerShell
Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:
$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://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs" | Select-Object -Expand Content
Você receberá uma resposta JSON semelhante a seguinte.
A resposta inclui um identificador exclusivo para a job em lote. É possível sondar o status do job em lote usando o BATCH_JOB_ID. Para mais informações, consulte Monitorar o status do job. Observação: não há suporte para os relatórios de conta de serviço personalizada, andamento em tempo real, CMEK e VPCSC.Python
Instalar
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 Generativa do Google com a 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_ENTERPRISE=True
3. Monitorar o status e o progresso do job
Depois que o job for enviado, você poderá verificar o status do job em lote usando a API, o SDK e o Google Cloud console.
Console
- Acesse a página Inferência em lote.
- Selecione o job em lote para monitorar o progresso dele.
REST
Para monitorar um job de inferência em lote, use o
projects.locations.batchPredictionJobs.get método e confira o CompletionStats campo na resposta.
Antes de usar os dados da solicitação abaixo, faça estas substituições:
- ENDPOINT_PREFIX: a região do recurso do modelo seguida por
-. Por exemplo,us-central1-. Se você estiver usando o endpoint global, deixe em branco. - LOCATION: uma região compatível com
modelos Gemini. Se você estiver usando o endpoint global, insira
global. - PROJECT_ID: o ID do projeto.
- BATCH_JOB_ID: o ID do job 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 a solicitação, 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
Você receberá uma resposta JSON semelhante a seguinte.
Python
Instalar
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 Generativa do Google com a 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_ENTERPRISE=True
O status de um determinado job em lote pode ser um dos seguintes:
JOB_STATE_PENDING: fila de capacidade. O job pode ficar no estadoqueuepor até 72 horas antes de entrar no estadorunning.JOB_STATE_RUNNING: o arquivo de entrada foi validado e o lote está sendo executado.JOB_STATE_SUCCEEDED: o lote foi concluído e os resultados estão prontos.JOB_STATE_FAILED: o arquivo de entrada falhou no processo de validação ou não pôde ser concluído na janela de 24 horas após entrar no estadoRUNNING.JOB_STATE_CANCELLING: o lote está sendo cancelado.JOB_STATE_CANCELLED: o lote foi cancelado.
4. Recuperar saída em lote
Quando uma tarefa de inferência em lote é concluída, a saída é armazenada na tabela do BigQuery especificada na solicitação.
Para linhas bem-sucedidas, as respostas do modelo são armazenadas na coluna response.
Caso contrário, os detalhes do erro 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
Solicitação
{"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"}}
Retomar um job em lote incompleto
Se um job de inferência em lote falhar, for cancelado ou expirar, você poderá retomá-lo criando um novo job em lote. O novo job processa apenas as solicitações incompletas ou com falha do job anterior, mesclando os novos resultados com aqueles das solicitações concluídas anteriormente. Por exemplo, se o job em lote incompleto estiver 90% concluído, o novo job processará os 10% restantes das solicitações.
Para retomar um job em lote, crie um novo job em lote, fornecendo a saída da tabela do BigQuery como entrada para o novo job.