Nesta página, mostramos como fazer uma solicitação de previsão em lote para o modelo de classificação ou regressão treinado usando o Console do Google Cloud ou a API Vertex AI.
Uma solicitação de previsão em lote é uma solicitação assíncrona, em oposição à previsão on-line, que é uma solicitação síncrona. Solicite previsões em lote diretamente do recurso do modelo sem precisar implantá-lo em um endpoint. Para dados tabulares, use previsões em lote quando não precisar de uma resposta imediata e quiser processar dados acumulados usando uma única solicitação.
Para fazer uma previsão em lote, especifique uma origem de entrada e um formato de saída em que a Vertex AI armazena os resultados das previsões.
Antes de começar
Antes de fazer uma solicitação de previsão em lote, treine um modelo.
Dados de entrada
Os dados de entrada para as solicitações de previsão em lote são aqueles usados pelo modelo para fazer previsões. Para modelos de classificação ou regressão, é possível fornecer dados de entrada em um destes dois formatos:
- Tabelas do BigQuery
- Objetos CSV no Cloud Storage
Recomendamos o mesmo formato para os dados de entrada, que foi utilizado no treinamento do modelo. Por exemplo, se você treinou o modelo usando dados no BigQuery, é melhor usar uma tabela do BigQuery como a entrada para previsão em lote. Como a Vertex AI trata todos os campos de entrada CSV como strings, a combinação de formatos de dados de treinamento e de entrada pode causar erros.
Sua fonte de dados precisa conter dados tabulares que incluam todas as colunas, em qualquer ordem, que foi usada para treinar o modelo. É possível incluir colunas que não estejam nos dados de treinamento ou que estejam nos dados, mas não tenham sido usadas para o treinamento. Essas colunas extras são incluídas na saída, mas não afetam os resultados da previsão.
Requisitos de dados de entrada
Tabela do BigQuery
Se você escolher uma tabela do BigQuery como entrada, verifique se:
- As tabelas de origem de dados do BigQuery não podem ser maiores que 100 GB.
- Se a tabela estiver em um projeto diferente, será preciso fornecer o
papel
BigQuery Data Editor
à conta de serviço da Vertex AI nesse projeto.
Arquivo CSV
Se você escolher um objeto CSV no Cloud Storage como entrada, verifique se:
- A fonte de dados precisa começar com uma linha de cabeçalho com os nomes das colunas.
- Cada objeto de fonte de dados não pode ser maior do que 10 GB. É possível incluir vários arquivos até o máximo de 100 GB.
- Se o bucket do Cloud Storage estiver em um projeto diferente, você precisará conceder o papel
Storage Object Creator
à conta de serviço do Vertex AI nesse projeto. - Coloque todas as strings entre aspas duplas (").
Formato da saída
O formato de saída da sua solicitação de previsão em lote não precisa ser o mesmo usado para a entrada. Por exemplo, se você usou a tabela do BigQuery como entrada, é possível gerar resultados para um objeto CSV no Cloud Storage.
Fazer uma solicitação de previsão em lote ao seu modelo
Para fazer solicitações de previsão em lote, use o Console do Google Cloud ou a API Vertex AI. A fonte de dados de entrada pode ser objetos CSV armazenados em um bucket do Cloud Storage ou tabelas do BigQuery. Dependendo da quantidade de dados enviados como entrada, uma tarefa de previsão em lote pode levar algum tempo para ser concluída.
Console do Google Cloud
Use o console do Google Cloud para solicitar uma previsão em lote.
- No console do Google Cloud, na seção Vertex AI, acesse a página Previsões em lote.
- Clique em Criar para abrir a janela Nova previsão em lote.
- Para Definir a previsão em lote, conclua as seguintes etapas:
- Insira um nome para a previsão em lote.
- Em Nome do modelo, selecione o nome do modelo a ser usado para a previsão em lote.
- Em Versão, selecione a versão do modelo a ser usada nesta previsão em lote.
- Em Selecionar origem, selecione se os dados de entrada de origem serão um arquivo CSV no Cloud Storage ou uma tabela no BigQuery.
- Para arquivos CSV, especifique o local do Cloud Storage em que seu arquivo de entrada CSV está localizado.
- Para tabelas do BigQuery, especifique o ID do projeto em que a tabela está localizada, o ID do conjunto de dados do BigQuery e o ID da tabela ou visualização do BigQuery.
- Em Saída, selecione CSV ou BigQuery.
- Em CSV, especifique o bucket do Cloud Storage em que a Vertex AI armazena a saída.
- No BigQuery, especifique um ID de projeto ou um conjunto de dados
existente:
- Para especificar o ID do projeto, insira-o no campo ID do projeto do Google Cloud. A Vertex AI cria um novo conjunto de dados de saída para você.
- Para especificar um conjunto de dados existente, insira o caminho do BigQuery
no campo ID do projeto do Google Cloud, como
bq://projectid.datasetid
.
- Opcional: a análise do Monitoramento de modelos
para previsões em lote está disponível em Visualização. Consulte os
Pré-requisitos
para adicionar a configuração de detecção de desvio ao job de previsão em lote.
- Clique em Ativar monitoramento de modelos para esta previsão em lote.
- Selecione uma Fonte de dados de treinamento. Insira o caminho ou o local dos dados para a fonte de dados de treinamento selecionada.
- Opcional: em Limites de alerta, especifique limites para acionar alertas.
- Em E-mails de notificação, insira um ou mais endereços de e-mail separados por vírgula para receber alertas quando um modelo exceder um limite de alerta.
- Opcional: em Canais de notificação, adicione canais do Cloud Monitoring para receber alertas quando um modelo exceder um limite de alertas. Selecione canais existentes do Cloud Monitoring ou crie um novo clicando em Gerenciar canais de notificação. O Console é compatível com os canais de notificação PagerDuty, Slack e Pub/Sub.
- Clique em Criar.
API: BigQuery
REST
batchPredictionJobs.createbatchPredictionJobs.create para solicitar uma previsão em lote.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- LOCATION_ID: região em que o modelo está armazenado e o job de previsão em lote é executado. Por exemplo,
us-central1
. - PROJECT_ID: o ID do projeto
- BATCH_JOB_NAME: nome de exibição do job em lote
- MODEL_ID: o ID do modelo a ser usado para fazer previsões
-
INPUT_URI: referência à fonte de dados do BigQuery. No formulário, siga estas etapas:
bq://bqprojectId.bqDatasetId.bqTableId
-
OUTPUT_URI: referência ao destino do BigQuery (em que as previsões serão gravadas). Especifique o ID do projeto e, opcionalmente, um ID do conjunto de dados existente. Se você especificar apenas o ID do projeto, o Vertex AI criará um novo conjunto de dados de saída para você. Use o seguinte formulário:
bq://bqprojectId.bqDatasetId
- MACHINE_TYPE: os recursos de máquina a serem usados para este job de previsão em lote. Saiba mais.
- STARTING_REPLICA_COUNT: o número inicial de nós deste job de previsão em lote. A contagem de nós pode ser aumentada ou reduzida conforme necessário pela carga, até o número máximo de nós, mas nunca ficará abaixo desse número.
- MAX_REPLICA_COUNT: o número máximo de nós para este job de previsão em lote. A contagem de nós pode ser aumentada ou diminuída conforme necessário para o carregamento, mas nunca excederá o máximo. Opcional: o valor padrão é 10.
Método HTTP e URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
Corpo JSON da solicitação:
{ "displayName": "BATCH_JOB_NAME", "model": "MODEL_ID", "inputConfig": { "instancesFormat": "bigquery", "bigquerySource": { "inputUri": "INPUT_URI" } }, "outputConfig": { "predictionsFormat": "bigquery", "bigqueryDestination": { "outputUri": "OUTPUT_URI" } }, "dedicatedResources": { "machineSpec": { "machineType": "MACHINE_TYPE", "acceleratorCount": "0" }, "startingReplicaCount": STARTING_REPLICA_COUNT, "maxReplicaCount": MAX_REPLICA_COUNT }, }
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://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/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://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
Você receberá uma resposta JSON semelhante a esta:
{ "name": "projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs/67890", "displayName": "batch_job_1 202005291958", "model": "projects/12345/locations/us-central1/models/5678", "state": "JOB_STATE_PENDING", "inputConfig": { "instancesFormat": "bigquery", "bigquerySource": { "inputUri": "INPUT_URI" } }, "outputConfig": { "predictionsFormat": "bigquery", "bigqueryDestination": { "outputUri": bq://12345 } }, "dedicatedResources": { "machineSpec": { "machineType": "n1-standard-32", "acceleratorCount": "0" }, "startingReplicaCount": 2, "maxReplicaCount": 6 }, "manualBatchTuningParameters": { "batchSize": 4 }, "generateExplanation": false, "outputInfo": { "bigqueryOutputDataset": "bq://12345.reg_model_2020_10_02_06_04 } "state": "JOB_STATE_PENDING", "createTime": "2020-09-30T02:58:44.341643Z", "updateTime": "2020-09-30T02:58:44.341643Z", }
Java
Antes de testar esse exemplo, siga as instruções de configuração para Java no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Java.
Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
No exemplo a seguir, substitua INSTANCES_FORMAT e PREDICTIONS_FORMAT por `bigquery`. Para aprender a substituir os outros marcadores de posição, consulte a guia `REST & CMD LINE` desta seção.Python
Para saber como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Para mais informações, consulte a documentação de referência da API Python.
Na amostra a seguir, defina os parâmetros "instances_format" e "predicts_format" como "bigquery". Para saber como definir os outros parâmetros, consulte a guia "REST e CMD LINE" nesta seção.API: Cloud Storage
REST
Use o método batchPredictionJobs.create para solicitar uma previsão em lote.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- LOCATION_ID: região em que o modelo está armazenado e o job de previsão em lote é executado. Por exemplo,
us-central1
. - PROJECT_ID: o ID do projeto
- BATCH_JOB_NAME: nome de exibição do job em lote
- MODEL_ID: o ID do modelo a ser usado para fazer previsões
-
URI: caminhos (URIs) para os buckets do Cloud Storage que contêm os dados de treinamento.
Pode haver mais de um. Cada URI tem o seguinte formato:
gs://bucketName/pathToFileName
-
OUTPUT_URI_PREFIX: caminho para um destino do Cloud Storage em que as
previsões serão gravadas. A Vertex AI grava previsões em lote em um subdiretório com
carimbo de data/hora deste caminho. Defina esse valor como uma string com o seguinte formato:
gs://bucketName/pathToOutputDirectory
- MACHINE_TYPE: os recursos de máquina a serem usados para este job de previsão em lote. Saiba mais.
- STARTING_REPLICA_COUNT: o número inicial de nós deste job de previsão em lote. A contagem de nós pode ser aumentada ou reduzida conforme necessário pela carga, até o número máximo de nós, mas nunca ficará abaixo desse número.
- MAX_REPLICA_COUNT: o número máximo de nós para este job de previsão em lote. A contagem de nós pode ser aumentada ou diminuída conforme necessário para o carregamento, mas nunca excederá o máximo. Opcional: o valor padrão é 10.
Método HTTP e URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
Corpo JSON da solicitação:
{ "displayName": "BATCH_JOB_NAME", "model": "MODEL_ID", "inputConfig": { "instancesFormat": "csv", "gcsSource": { "uris": [ URI1,... ] }, }, "outputConfig": { "predictionsFormat": "csv", "gcsDestination": { "outputUriPrefix": "OUTPUT_URI_PREFIX" } }, "dedicatedResources": { "machineSpec": { "machineType": "MACHINE_TYPE", "acceleratorCount": "0" }, "startingReplicaCount": STARTING_REPLICA_COUNT, "maxReplicaCount": MAX_REPLICA_COUNT }, }
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://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/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://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
Você receberá uma resposta JSON semelhante a esta:
{ "name": "projects/PROJECT__ID/locations/LOCATION_ID/batchPredictionJobs/67890", "displayName": "batch_job_1 202005291958", "model": "projects/12345/locations/us-central1/models/5678", "state": "JOB_STATE_PENDING", "inputConfig": { "instancesFormat": "csv", "gcsSource": { "uris": [ "gs://bp_bucket/reg_mode_test" ] } }, "outputConfig": { "predictionsFormat": "csv", "gcsDestination": { "outputUriPrefix": "OUTPUT_URI_PREFIX" } }, "dedicatedResources": { "machineSpec": { "machineType": "n1-standard-32", "acceleratorCount": "0" }, "startingReplicaCount": 2, "maxReplicaCount": 6 }, "manualBatchTuningParameters": { "batchSize": 4 } "outputInfo": { "gcsOutputDataset": "OUTPUT_URI_PREFIX/prediction-batch_job_1 202005291958-2020-09-30T02:58:44.341643Z" } "state": "JOB_STATE_PENDING", "createTime": "2020-09-30T02:58:44.341643Z", "updateTime": "2020-09-30T02:58:44.341643Z", }
Recuperar resultados de predição em lote
A Vertex AI envia a saída das previsões em lote para o destino especificado, que pode ser o BigQuery ou o Cloud Storage.
BigQuery
Conjunto de dados de saída
Se você estiver usando o BigQuery, a saída da previsão em lote será armazenada em um conjunto de dados de saída. Se você forneceu um conjunto de dados à Vertex AI, o nome do conjunto de dados (BQ_DATASET_NAME) é o nome que você forneceu anteriormente. Se você não forneceu um conjunto de dados de saída, a Vertex AI criou um para você. Para encontrar o nome (BQ_DATASET_NAME), siga estas etapas:
- No console do Google Cloud, acesse a página Previsões em lote da Vertex AI.
- Selecione a previsão que você criou.
-
O conjunto de dados de saída é fornecido em Local de exportação. O nome do recurso é criado da seguinte maneira:
prediction_MODEL_NAME_TIMESTAMP
O conjunto de dados de saída contém uma ou mais das três tabelas de saída a seguir:
-
Tabela de previsões
A tabela contém uma linha para cada linha dos dados de entrada, em que uma previsão foi solicitada (por exemplo, TARGET_COLUMN_NAME = nulo).
-
Tabela de erros
Esta tabela contém uma linha para cada erro não crítico encontrado durante a previsão em lote. Cada erro não crítico corresponde a uma linha nos dados de entrada para a qual a Vertex AI não conseguiu retornar uma previsão.
Tabela de previsões
O nome da tabela (BQ_PREDICTIONS_TABLE_NAME) é formado pela
adição de "predictions_" com o carimbo de data/hora em que o job de previsão em
lote começou: predictions_TIMESTAMP
Para recuperar previsões, acesse a página do BigQuery.
O formato da consulta depende do seu tipo de modelo:Classificação:
SELECT predicted_TARGET_COLUMN_NAME.classes AS classes, predicted_TARGET_COLUMN_NAME.scores AS scores FROM BQ_DATASET_NAME.BQ_PREDICTIONS_TABLE_NAME
classes
é a lista de classes em potencial e scores
são as pontuações de confiança correspondentes.
Regressão:
SELECT predicted_TARGET_COLUMN_NAME.value FROM BQ_DATASET_NAME.BQ_PREDICTIONS_TABLE_NAME
Se o modelo usa inferência probabilística, predicted_TARGET_COLUMN_NAME.value
contém o minimizador do objetivo de otimização. Por exemplo, se o objetivo de otimização for minimize-rmse
, predicted_TARGET_COLUMN_NAME.value
terá o valor médio. Se for minimize-mae
, predicted_TARGET_COLUMN_NAME.value
conterá o valor mediano.
Se o modelo usa inferência probabilística com quantis, a Vertex AI fornece valores e previsões de quantis, além de minimizar o objetivo de otimização. Os valores de quantis são definidos durante o treinamento do modelo. As previsões de quantis são os valores de previsão associados aos valores de quantis.
Tabela de erros
O nome da tabela (BQ_ERRORS_TABLE_NAME) é formado pela adição deerrors_
com o carimbo de data/hora em que o job de previsão em lote foi iniciado: errors_TIMESTAMP
Para recuperar a validação de erros tabela:
-
No console, acesse a página do IAM:
-
Execute a seguinte consulta:
SELECT * FROM BQ_DATASET_NAME.BQ_ERRORS_TABLE_NAME
- erros_TARGET_COLUMN_NAME.code
- erros_TARGET_COLUMN_NAME.mensagem
Cloud Storage
Se você tiver especificado o Cloud Storage como destino de saída, os resultados da solicitação de previsão em lote serão retornados como objetos CSV em uma nova pasta no bucket especificado. O nome da pasta é o nome do modelo, precedido por "prediction-" e anexado ao carimbo de data/hora do momento em que o job de previsão em lote foi iniciado. Encontre o nome da pasta do Cloud Storage na guia Previsões em lote do modelo.
A pasta do Cloud Storage contém dois tipos de objetos:-
Objetos de previsão
Os objetos de previsão são chamados "predictions_1.csv", "predictions_2.csv" e assim por diante. Esses objetos contêm uma linha de cabeçalho com os nomes das colunas e uma linha para cada previsão retornada. Nos objetos de previsão, a Vertex AI retorna os dados de previsão e cria uma ou mais colunas para os resultados da previsão, com base no tipo de modelo:
-
Classificação: para cada valor potencial da coluna de destino, uma
coluna chamada
TARGET_COLUMN_NAME_VALUE_score
é adicionada aos resultados. Essa coluna contém a pontuação ou a estimativa de confiança desse valor. -
Regressão: o valor previsto para essa linha é retornado em uma coluna
chamada
predicted_TARGET_COLUMN_NAME
. O intervalo de previsão não é retornado para a saída CSV.
-
Classificação: para cada valor potencial da coluna de destino, uma
coluna chamada
-
Objetos de erro
Os objetos de erro são denominados "errors_1.csv", "errors_2.csv" e assim por diante. Eles contêm uma linha de cabeçalho e uma linha para cada linha dos dados de entrada para a qual a Vertex AI não conseguiu retornar uma previsão (por exemplo, se um atributo não anulável fosse nulo).
Observação: se os resultados forem grandes, ele será dividido em vários objetos.
Interpretar resultados de previsão
Classificação
Os modelos de classificação retornam uma pontuação de confiança.
A pontuação de confiança informa o quanto o modelo associa cada classe ou rótulo a um item de teste. Quanto maior o número, maior a confiança do modelo de que o rótulo precisa ser aplicado a esse item. Você decide o nível de confiança necessário para aceitar os resultados do modelo.
Regressão
Os modelos de regressão retornam um valor de previsão.
Se o modelo usar a inferência probabilística, o campo value
vai conter o
minimizador do objetivo de otimização. Por exemplo, se o objetivo de otimização for minimize-rmse
, o campo value
conterá o valor médio.
Se for minimize-mae
, o campo value
conterá o valor médio.
Se o modelo usa inferência probabilística com quantis, a Vertex AI fornece valores e previsões de quantis, além de minimizar o objetivo de otimização. Os valores de quantis são definidos durante o treinamento do modelo. As previsões de quantis são os valores de previsão associados aos valores de quantis.
A seguir
- Saiba como exportar seu modelo.
- Saiba mais sobre os preços das previsões em lote.