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 os 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. O BigQuery é ativado automaticamente em novos projetos. Para ativar o BigQuery em um projeto preexistente, acesse

    Enable the BigQuery API.

    Enable the API

  7. Enable the AI Platform Training and Prediction API and Compute Engine APIs.

    Enable the APIs

  8. Instale a Google Cloud CLI e a Google Cloud CLI.

Criar seu conjunto de dados

Crie um conjunto de dados do BigQuery para armazenar o modelo de ML:

  1. No console do Google Cloud, acesse a página do BigQuery.

    Acesse a página do BigQuery

  2. No painel Explorer, clique no nome do seu projeto.

  3. Clique em Conferir ações > 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 Tipo de local, selecione Multirregião e EUA (várias regiões nos Estados Unidos).

      Os conjuntos de dados públicos são armazenados na multirregião US. Para simplificar, armazene seus conjuntos de dados no mesmo local.

    • Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.

      Página 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 prevê 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 Docker (em inglês).

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

mkdir tmp_dir
gcloud storage cp gs://some/gcs/path/iris_model tmp_dir --recursive

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

Extrair 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, usamos a Google Cloud CLI 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 do 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. Será exibida a mensagem Creating version (this might take a few minutes).......

3) (opcional) Consulte 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 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 de árvore otimizada

Treine o modelo

Treine um modelo de classificador de árvore otimizada que preveja o tipo de íris usando a instrução CREATE MODEL. 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
gcloud storage cp gs://some/gcs/path/boosted_tree_iris_model serving_dir --recursive

Extrair Preditor

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, usamos a Google Cloud CLI para implantar e executar previsões do modelo exportado na previsão on-line do AI Platform.

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 do 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. Será exibida a mensagem Creating version (this might take a few minutes).......

3) (opcional) Consulte 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 íris usando a instrução CREATE MODEL. 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 conferir detalhes sobre como criar contêineres do AutoML, consulte Como exportar modelos. As etapas a seguir exigem a Docker (em inglês).

Copiar arquivos de modelo exportados para um diretório local

mkdir automl_serving_dir
gcloud storage cp gs://some/gcs/path/automl_iris_model/* automl_serving_dir/ --recursive

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.

Limpar

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.

Interromper 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

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

Excluir o 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 Google 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.

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 Buckets do Cloud Storage.

    Acessar buckets

  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 e confirme a exclusão do bucket e do respectivo conteúdo.

Excluir o projeto

Para excluir o projeto:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

A seguir