Como exportar modelos

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:

  1. Exportar o modelo.
  2. Executar o servidor de modelo.
  3. Solicitar previsões.

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

  1. Acesse a página do AutoML Tables no console do Google Cloud.

    Acessar a página do AutoML Tables

  2. Selecione a guia Modelos no painel de navegação à esquerda.

  3. No menu Mais ações do modelo que você quer exportar, clique em Exportar modelo.

    Menu Mais ações com Exportar modelo

  4. 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.

  5. Clique em Exportar.

    Janela de exportação do modelo

    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 e eu-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 ou eu 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:

  1. Na máquina que você executará o modelo, mude para o diretório em que você quer salvar o modelo exportado.

  2. 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>

  3. 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.

  4. 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

  1. 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.

  2. 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
  ]
}