Exportar um modelo de BigQuery ML para previsão on-line

Neste tutorial, mostramos como exportar um modelo do BigQuery ML e implantá-lo na Vertex AI 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, usamos componentes faturáveis do Google Cloud, incluindo:

  • BigQuery ML
  • Cloud Storage
  • Vertex AI (opcional, usada 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 da Vertex AI, consulte Modelos treinados de maneira personalizada.

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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify 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.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    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 seu modelo de ML.

Console

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

    Acessar a página do BigQuery

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

  3. Clique em Ver ações > 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).

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

bq

Para criar um novo conjunto de dados, utilize o comando bq mk com a sinalização --location. Para obter uma lista completa de parâmetros, consulte a referência comando bq mk --dataset.

  1. Crie um conjunto de dados chamado bqml_tutorial com o local dos dados definido como US e uma descrição de BigQuery ML tutorial dataset:

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    Em vez de usar a flag --dataset, o comando usa o atalho -d. Se você omitir -d e --dataset, o comando vai criar um conjunto de dados por padrão.

  2. Confirme se o conjunto de dados foi criado:

    bq ls

API

Chame o método datasets.insert com um recurso de conjunto de dados definido.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

BigQuery DataFrames

Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local.

import google.cloud.bigquery

bqclient = google.cloud.bigquery.Client()
bqclient.create_dataset("bqml_tutorial", exists_ok=True)

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

Use as seções a seguir para aprender a 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 instalação do 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 informações sobre como implantar um modelo na Vertex AI para previsões on-line ou em lote, consulte Implantar um modelo em um endpoint.

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

Para mais informações sobre como executar previsões on-line em um modelo implantado, consulte Receber inferências on-line de um modelo treinado personalizado.

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

Use as seções a seguir para aprender a treinar e implantar um modelo de classificador de árvore otimizado.

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 no modelo exportado. Para mais informações, consulte Receber inferências on-line de um modelo treinado personalizado.

Para mais informações sobre como implantar um modelo na Vertex AI para previsões on-line ou em lote usando rotinas personalizadas, consulte Implantar um modelo em um endpoint.

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 informações sobre como executar previsões on-line em um modelo implantado, consulte Receber inferências on-line de um modelo treinado personalizado.

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

Use as seções a seguir para saber como 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 instalação do 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 Vertex AI.

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 Vertex AI

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 consoleGoogle 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). Em seguida, clique em Excluir.

Exclua 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 Google 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