Como exportar um modelo de 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á nos três cenários completos a seguir:

  • Treine e implante um modelo de regressão logística que também se aplica a regressor e modelos de classificador DNN, k-means, regressão linear e fatoração de matriz.
  • Treine e implante um modelo de classificador de árvore otimizada que também se aplica ao modelo de regressor de árvore otimizada.
  • Treine e implante um modelo de classificador do AutoML que também se aplica ao modelo de regressor do AutoML.

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 de preços.

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 Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o 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 página do BigQuery.

    Acesse a página 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.
    • Em Local dos dados, selecione Estados Unidos. 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

Treine 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

Treinar e implantar um modelo de classificador de árvore otimizada

Treine o modelo

Treine um modelo de classificador de árvore otimizada que prevê o tipo de iris com a instrução CREATE MODEL do BigQuery ML. Esse job de treinamento leva aproximadamente sete minutos para ser concluído.

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.boosted_tree_iris_model`
  OPTIONS (model_type="boosted_tree_classifier",
      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 com a ferramenta de linha de comando bq. Para encontrar outras maneiras de exportar modelos, consulte Como exportar modelos do BigQuery ML.

bq extract --destination_format ML_XGBOOST_BOOSTER -m bqml_tutorial.boosted_tree_iris_model gs://some/gcs/path/boosted_tree_iris_model

Implantação e exibição local

Nos arquivos exportados, há um arquivo main.py para execução local.

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

mkdir serving_dir
gsutil cp -r gs://some/gcs/path/boosted_tree_iris_model serving_dir

Extrair o predictor.py

tar -xvf serving_dir/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz -C serving_dir/boosted_tree_iris_model/

Instalar a biblioteca XGBoost

Instale a biblioteca XGBoost (em inglês) para versão 0.82 ou posterior.

Executar a previsão

cd serving_dir/boosted_tree_iris_model/
python main.py '[{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]'

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 na AI Platform para previsões on-line/em lote por meio de rotinas personalizadas, consulte Como implantar modelos.

Criar um recurso de modelo

MODEL_NAME="BOOSTED_TREE_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/boosted_tree_iris_model"
VERSION_NAME="v1"

2) Crie a versão.

gcloud beta ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --package-uris=${MODEL_DIR}/xgboost_predictor-0.1.tar.gz --prediction-class=predictor.Predictor --runtime-version=1.15

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-07T00:35:42Z'
deploymentUri: gs://some/gcs/path/boosted_tree_iris_model
etag: rp090ebEnQk=
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/BOOSTED_TREE_IRIS_MODEL/versions/v1
packageUris:
- gs://some/gcs/path/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz
predictionClass: predictor.Predictor
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY

Previsão on-line

Para mais detalhes sobre como executar previsões on-line em um modelo implantado, consulte Como solicitar previsões.

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

Treinar e implantar um modelo de classificador do AutoML

Treine o modelo

Treine um modelo de classificador do AutoML que prevê o tipo de iris por meio da instrução CREATE MODEL do BigQuery ML. Os modelos do AutoML precisam de pelo menos 1.000 linhas de dados de entrada. Como ml_datasets.iris tem apenas 150 linhas, duplicamos os dados 10 vezes. Esse job de treinamento leva cerca de duas horas para ser concluído.

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.automl_iris_model`
  OPTIONS (model_type="automl_classifier",
      budget_hours=1, input_label_cols=["species"])
  AS SELECT
    * EXCEPT(multiplier)
  FROM
    `bigquery-public-data.ml_datasets.iris`, unnest(GENERATE_ARRAY(1, 10)) as multiplier;'

Exportar o modelo

Exporte o modelo para um bucket do Cloud Storage com a ferramenta de linha de comando bq. Para encontrar outras maneiras de exportar modelos, consulte Como exportar modelos do BigQuery ML.

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

Implantação e exibição local

Para ver detalhes sobre como criar contêineres do AutoML, consulte Como exportar modelos. As etapas a seguir exigem a instalação do Docker (em inglês).

Copiar arquivos de modelo exportados para um diretório local

mkdir automl_serving_dir
gsutil cp -r gs://some/gcs/path/automl_iris_model/* automl_serving_dir/

Extrair imagem do Docker do AutoML

docker pull gcr.io/cloud-automl-tables-public/model_server

Iniciar contêiner do Docker

docker run -v `pwd`/automl_serving_dir:/models/default/0000001 -p 8080:8080 -it gcr.io/cloud-automl-tables-public/model_server

Executar a previsão

1) Crie um arquivo JSON delimitado por nova linha para entradas. Por exemplo, o arquivo input.json com este conteúdo:

{"instances": [{"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) Faça a chamada de previsão

curl -X POST --data @input.json http://localhost:8080/predict

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

A previsão on-line para modelos de regressor e de classificador do AutoML não é compatível com a AI Platform.

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

  • exclua o projeto que você criou; ou
  • 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 página do BigQuery no Console do Cloud.

    Acesse a página 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. No Console do Cloud, acesse a página Navegador do Cloud Storage.

    Acessar o navegador

  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 "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