Nesta página, você verá como usar o AutoML Tables na exportação do modelo personalizado para o Cloud Storage, fazer o download do modelo no seu servidor e disponibilizar o modelo para previsões usando o Docker.
O modelo exportado só pode ser executado em CPUs de arquitetura x86 compatíveis com conjuntos de instruções Advanced Vector Extensions (AVX).
Introdução
As etapas para a exportação do modelo são:
Antes de começar
Antes de concluir esta tarefa, é preciso que você tenha concluído as seguintes tarefas:
- Configurar seu projeto, conforme descrito em Antes de começar.
- Treinar o modelo de que você quer fazer o download.
- Instale e inicialize o Google Cloud CLI no servidor que você usará para executar o modelo exportado.
- Instalar o Docker no seu servidor.
Extrair a imagem do Docker do servidor de modelo do AutoML Tables:
sudo docker pull gcr.io/cloud-automl-tables-public/model_server
Como exportar um modelo
Não é possível exportar um modelo criado antes de 23 de agosto de 2019.
Console
Acesse a página do AutoML Tables no console do Google Cloud.
Selecione a guia Modelos no painel de navegação à esquerda.
No menu Mais ações do modelo que você quer exportar, clique em Exportar modelo.
Selecione ou crie uma pasta do Cloud Storage no local desejado.
O bucket precisa atender aos requisitos de bucket.
Não é possível exportar um modelo para um bucket de nível superior. Você precisa usar pelo menos um nível de pasta.
Clique em Exportar.
Você fará o download do modelo exportado para seu servidor na próxima seção.
REST
Use o método models.export para exportar um modelo para o Cloud Storage.Antes de usar os dados da solicitação, faça as substituições a seguir:
-
endpoint:
automl.googleapis.com
para o local global eeu-automl.googleapis.com
para a região da UE. - project-id: é seu ID do projeto no Google Cloud.
- location: o local do recurso:
us-central1
para global oueu
para a União Europeia. -
model-id: o código do modelo que você quer implantar. Por exemplo,
TBL543
. - gcs-destination: a pasta de destino no Cloud Storage. Por exemplo,
gs://export-bucket/exports
.Não é possível exportar um modelo para um bucket de nível superior. Você precisa usar pelo menos um nível de pasta.
Método HTTP e URL:
POST https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:export
Corpo JSON da solicitação:
{ "outputConfig": { "modelFormat": "tf_saved_model", "gcsDestination": { "outputUriPrefix": "gcs-destination" } } }
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 "x-goog-user-project: project-id" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:export"
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"; "x-goog-user-project" = "project-id" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:export" | Select-Object -Expand Content
Você receberá uma resposta JSON semelhante a esta:
{ "name": "projects/292381/locations/us-central1/operations/TBL543", "metadata": { "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata", "createTime": "2019-12-30T18:23:47.728373Z", "updateTime": "2019-12-30T18:23:47.728373Z", "worksOn": [ "projects/292381/locations/us-central1/models/TBL543" ], "exportModelDetails": { "outputInfo": { "gcsOutputDirectory": "gs://export-bucket/exports/model-export/tbl/tf_saved_model-automl_integration_test_model-2019-12-30T18:23:47.461Z/" } }, "state": "RUNNING" } }
A exportação de um modelo é uma operação de longa duração. É possível pesquisar o status de uma operação ou esperar que a operação seja retornada. Saiba mais.
Executar o servidor de modelo
Nesta tarefa, você fará o download do modelo exportado do Cloud Storage e iniciará o contêiner do Docker para que seu modelo esteja pronto para receber solicitações de previsão.
Seu modelo precisa ser executado dentro de um contêiner do Docker.
Para executar o servidor de modelo:
Na máquina que você executará o modelo, mude para o diretório em que você quer salvar o modelo exportado.
Faça o download do modelo exportado:
gsutil cp -r gcs-destination/* .
Em que gcs-destination é o caminho para o local do modelo exportado no Cloud Storage. Exemplo:
gsutil cp -r gs://export-us-central1/models/* .
O modelo é copiado para o diretório atual, no seguinte caminho:
./model-export/tbl/tf_saved_model-<model-name>-<export-timestamp>
Renomeie o diretório em que está o carimbo de data/hora.
mv model-export/tbl/tf_saved_model-<model-name>-<export-timestamp> model-export/tbl/<new-dir-name>
O formato do carimbo de data/hora torna o diretório inválido para o Docker.
Inicie o contêiner do Docker usando o nome do diretório que você acabou de criar:
docker run -v `pwd`/model-export/tbl/new_folder_name:/models/default/0000001 -p 8080:8080 -it gcr.io/cloud-automl-tables-public/model_server
É possível parar o servidor de modelo a qualquer momento, basta usar Ctrl-C
.
Como atualizar o contêiner do docker do servidor de modelo
Como você faz o download do contêiner do servidor do modelo ao exportar o modelo, é necessário atualizar explicitamente o servidor do modelo para receber atualizações e correções de bugs. Atualize o servidor de modelos periodicamente usando o seguinte comando:
docker pull gcr.io/cloud-automl-tables-public/model_server
Como receber previsões do seu modelo exportado
O servidor de modelo no contêiner de imagem do AutoML Tables gere solicitações de previsão e retorna resultados de previsão.
A previsão em lote não está disponível para modelos exportados.
Formato de dados de previsão
Você fornece os dados (campo payload
) para sua solicitação de previsão no
seguinte formato JSON:
{ "instances": [ { "column_name_1": value, "column_name_2": value, … } , … ] }
Os tipos de dados JSON exigidos dependem do tipo de dados do AutoML Tables da coluna. Consulte Formato de objeto Row para mais detalhes.
O exemplo a seguir mostra uma solicitação com três colunas: uma coluna categórica, uma matriz numérica e uma struct. A solicitação inclui duas linhas.
{ "instances": [ { "categorical_col": "mouse", "num_array_col": [ 1, 2, 3 ], "struct_col": { "foo": "piano", "bar": "2019-05-17T23:56:09.05Z" } }, { "categorical_col": "dog", "num_array_col": [ 5, 6, 7 ], "struct_col": { "foo": "guitar", "bar": "2019-06-17T23:56:09.05Z" } } ] }
Como fazer uma solicitação de previsão
Coloque os dados da solicitação em um arquivo de texto, por exemplo,
tmp/request.json
.O número de linhas de dados na solicitação de previsão, chamado de tamanho de minilote, afeta a latência de previsão e a capacidade. Quanto maior o tamanho do minilote, maior a latência e a capacidade. Para reduzir a latência, use um minilote menor. Para maior capacidade, aumente o tamanho do minilote. Os tamanhos de minilote mais usados são 1, 32, 64, 128, 256, 512 e 1024.
Solicite a previsão:
curl -X POST --data @/tmp/request.json http://localhost:8080/predict
Formato dos resultados de previsão
O formato dos seus resultados depende do tipo do seu modelo.
Resultados do modelo de classificação
Os resultados de previsão para modelos de classificação (binários e multiclasses) retornam uma pontuação de probabilidade para cada valor potencial da coluna de destino. Você precisa determinar como quer usar as pontuações. Por exemplo, para receber uma classificação binária a partir das pontuações fornecidas, você identificaria um valor limite. Se houver duas classes, "A" e "B", classifique o exemplo como "A" se a pontuação de "A" for maior que o limite escolhido, e como "B" se for menor. Em conjuntos de dados desequilibrados, o limite pode se aproximar de 100% ou de 0%.
O payload de resultados de um modelo de classificação é semelhante a este exemplo:
{ "predictions": [ { "scores": [ 0.539999994635582, 0.2599999845027924, 0.2000000208627896 ], "classes": [ "apple", "orange", "grape" ] }, { "scores": [ 0.23999999463558197, 0.35999998450279236, 0.40000002086278963 ], "classes": [ "apple", "orange", "grape" ] } ] }
Resultados do modelo de regressão
Um valor previsto é retornado para cada linha válida da solicitação de previsão. Os intervalos de previsão não são retornados para modelos exportados.
O payload de resultados de um modelo de regressão é semelhante a este exemplo:
{ "predictions": [ 3982.3662109375, 3982.3662109375 ] }