Como exportar um modelo do BigQuery ML para previsão on-line

Neste tutorial, mostramos como exportar um modelo do BigQuery ML e implantá-lo no AI Platform ou em uma máquina local. Você usará a tabela iris dos conjuntos de dados públicos do BigQuery e trabalhará no seguinte cenário completo:

  • Treine e implante um modelo de regressão logística. Ele também se aplica a modelos de fatoração de matrizes, regressão linear e k-means.

Custos

Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:

  • BigQuery ML
  • Cloud Storage
  • AI Platform (opcional, usado para previsão on-line)

Para mais informações sobre os custos do BigQuery ML, consulte a página Preços do BigQuery ML.

Para mais informações sobre os custos do Cloud Storage, consulte a página Preços do Cloud Storage.

Para mais informações sobre os custos do AI Platform, consulte a página nós de previsão e alocação de recursos.

Antes de começar

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do Cloud, na página de seletor de projetos, selecione ou crie um projeto do Cloud.

    Acessar a página do seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud. Saiba como confirmar se a cobrança está ativada para o seu projeto.

  4. O BigQuery é ativado automaticamente em novos projetos. Para ativar o BigQuery em um projeto preexistente, acesse Ative a API BigQuery.

    Ative a API

  5. Ative as APIs AI Platform Training and Prediction API and Compute Engine.

    Ative as APIs

  6. Instale o SDK do Google Cloud e a ferramenta de linha de comando gcloud.

Criar seu conjunto de dados

O primeiro passo é criar um conjunto de dados do BigQuery para armazenar seu modelo de ML. Para criar o conjunto de dados, faça o seguinte:

  1. No Console do Google Cloud, acesse a IU da Web do BigQuery.

    Acesse a IU da Web do BigQuery

  2. No painel de navegação, seção Recursos, clique no nome do projeto.

  3. No painel de detalhes, à direita, clique em Criar conjunto de dados.

    Criar conjunto de dados.

  4. Na página Criar conjunto de dados, faça o seguinte:

    • Para o código do conjunto de dados, insira bqml_tutorial.
    • Para Local dos dados, escolha Estados Unidos (EUA). Atualmente, os conjuntos de dados públicos são armazenados no local multirregional US. Para simplificar, coloque seu conjunto de dados nesse mesmo local.

      Página Criar conjunto de dados.

  5. Mantenha todas as outras configurações padrão e clique em Criar conjunto de dados.

Treinar e implantar um modelo de regressão logística

Treinar o modelo

Treine um modelo de regressão logística que preveja o tipo de íris usando a instrução CREATE MODEL do BigQuery ML. Esse job de treinamento leva aproximadamente um minuto para ser concluído.

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.iris_model`
  OPTIONS (model_type="logistic_reg",
      max_iterations=10, input_label_cols=["species"])
  AS SELECT
    *
  FROM
    `bigquery-public-data.ml_datasets.iris`;'

Exportar o modelo

Exporte o modelo para um bucket do Cloud Storage usando a ferramenta de linha de comando bq. Para outras maneiras de exportar modelos, consulte Como exportar modelos do BigQuery ML. Esse job de extração leva menos de um minuto para ser concluído.

bq extract -m bqml_tutorial.iris_model gs://some/gcs/path/iris_model

Implantação e exibição local

É possível implantar modelos exportados do TensorFlow usando o contêiner do Docker do TensorFlow Serving. As etapas a seguir exigem a instalação do Docker (em inglês).

Fazer o download dos arquivos de modelo exportados para um diretório temporário

mkdir tmp_dir
gsutil cp -r gs://some/gcs/path/iris_model tmp_dir

Criar um subdiretório de versão

Esta etapa define um número de versão (neste caso, 1) para o modelo.

mkdir -p serving_dir/iris_model/1
cp -r tmp_dir/iris_model/* serving_dir/iris_model/1
rm -r tmp_dir

Receber a imagem do Docker

docker pull tensorflow/serving

Executar o contêiner do Docker

docker run -p 8500:8500 --network="host" --mount type=bind,source=`pwd`/serving_dir/iris_model,target=/models/iris_model -e MODEL_NAME=iris_model -t tensorflow/serving &

Executar a previsão

curl -d '{"instances": [{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]}' -X POST http://localhost:8501/v1/models/iris_model:predict

Implantação e exibição on-line

Nesta seção, a ferramenta de linha de comando gcloud é usada para implantar e executar previsões no modelo exportado.

Para mais detalhes sobre como implantar um modelo no AI Platform para previsões on-line/em lote, consulte Como implantar modelos.

Criar um recurso de modelo

MODEL_NAME="IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME

Criar uma versão de modelo

1) Defina as variáveis de ambiente.

MODEL_DIR="gs://some/gcs/path/iris_model"
// Select a suitable version for this model
VERSION_NAME="v1"
FRAMEWORK="TENSORFLOW"

2) Crie a versão.

gcloud ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --runtime-version=1.15 --framework=$FRAMEWORK

Esta etapa leva alguns minutos para ser concluída. Você verá a mensagem Creating version (this might take a few minutes).......

3) (opcional) Veja informações sobre sua nova versão.

gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME

A resposta será parecida com esta:

createTime: '2020-02-28T16:30:45Z'
deploymentUri: gs://your_bucket_name
framework: TENSORFLOW
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/IRIS_MODEL/versions/v1
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY

Previsão on-line

Os detalhes sobre como executar previsões on-line em um modelo implantado estão disponíveis em https://cloud.google.com/ai-platform/prediction/docs/online-predict#requesting_predictions

1) Crie um arquivo JSON delimitado por nova linha para entradas, por exemplo, o arquivo instances.json com o seguinte conteúdo.

{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}

2) Configure variáveis de ambiente para previsão.

INPUT_DATA_FILE="instances.json"

3) Execute a previsão.

gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

Como limpar

Para evitar que os recursos usados neste tutorial sejam cobrados na conta do Google Cloud Platform, faça uma das coisas a seguir:

  • Exclua o projeto que você criou.
  • Se preferir, mantenha-o e exclua o conjunto de dados e o bucket do Cloud Storage.

Como interromper o contêiner do Docker

1) Liste todos os contêineres do Docker em execução.

docker ps

2) Pare o contêiner com o ID aplicável a partir da lista de contêineres.

docker stop container_id

Como excluir recursos do AI Platform

1) Exclua a versão do modelo.

gcloud ai-platform versions delete $VERSION_NAME --model=$MODEL_NAME

2) Exclua o modelo.

gcloud ai-platform models delete $MODEL_NAME

Como excluir seu conjunto de dados

A exclusão do seu projeto removerá todos os conjuntos de dados e tabelas no projeto. Caso prefira reutilizá-lo, exclua o conjunto de dados criado neste tutorial:

  1. Se necessário, abra a IU da Web do BigQuery.

    Acesse a IU da Web do BigQuery

  2. Na navegação, clique no conjunto de dados bqml_tutorial criado.

  3. Clique em Excluir conjunto de dados no lado direito da janela. Essa ação exclui o conjunto, a tabela e todos os dados.

  4. Na caixa de diálogo Excluir conjunto de dados, confirme o comando de exclusão digitando o nome do seu conjunto de dados (bqml_tutorial) e clique em Excluir.

Como excluir o bucket do Cloud Storage

A exclusão do projeto remove todos os buckets do Cloud Storage no projeto. Se você preferir reutilizar o projeto, exclua o bucket criado neste tutorial:

  1. Abra o navegador do Cloud Storage no Console do Google Cloud.
    Abrir o navegador do Cloud Storage
  2. Marque a caixa de seleção do bucket que pretende excluir.

  3. Clique em Excluir.

  4. Na janela de sobreposição que aparece, clique em Excluir para confirmar a exclusão do bucket e do respectivo conteúdo.

Como excluir o projeto

Para excluir o projeto, faça o seguinte:

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar a página Gerenciar recursos

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir