Exporte um modelo do BigQuery ML para a previsão online


Este tutorial mostra como exportar um modelo do BigQuery ML e, em seguida, implementar o modelo no Vertex AI ou numa máquina local. Vai usar a tabela iris dos conjuntos de dados públicos do BigQuery e trabalhar nos três cenários completos seguintes:

  • Prepare e implemente um modelo de regressão logística. Também se aplica ao classificador de RND, ao regressor de RND, ao k-means, à regressão linear e aos modelos de fatorização de matrizes.
  • Prepare e implemente um modelo de classificador de árvore reforçada. Também se aplica ao modelo de regressor de árvore reforçada.
  • Prepare e implemente um modelo de classificador do AutoML. Também se aplica ao modelo de regressão do AutoML.

Custos

Este tutorial usa componentes faturáveis do Google Cloud, incluindo:

  • BigQuery ML
  • Cloud Storage
  • Vertex AI (opcional, usado para previsão online)

Para mais informações acerca dos 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 de preços do Cloud Storage.

Para mais informações sobre os custos do Vertex AI, consulte o artigo Modelos preparados de forma 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 (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 (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 num projeto pré-existente, aceda a

    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 CLI do Google Cloud e a CLI do Google Cloud.

Crie o seu conjunto de dados

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

Consola

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda à página do BigQuery

  2. No painel Explorador, clique no nome do 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 ID do conjunto de dados, introduza bqml_tutorial.

    • Em Tipo de localização, selecione Várias regiões e, de seguida, selecione EUA (várias regiões nos Estados Unidos).

    • Deixe as restantes predefinições como estão e clique em Criar conjunto de dados.

bq

Para criar um novo conjunto de dados, use o comando bq mk com a flag --location. Para uma lista completa de parâmetros possíveis, consulte a referência do comando bq mk --dataset.

  1. Crie um conjunto de dados com o nome bqml_tutorial com a localização dos dados definida 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 omitir -d e --dataset, o comando cria um conjunto de dados por predefinição.

  2. Confirme que 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"
  }
}

DataFrames do BigQuery

Antes de experimentar este exemplo, siga as instruções de configuração dos DataFrames do BigQuery no início rápido do BigQuery com os DataFrames do BigQuery. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure 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)

Prepare e implemente um modelo de regressão logística

Use as secções seguintes para saber como preparar e implementar um modelo de regressão logística.

Prepare o modelo

Prepare um modelo de regressão logística que preveja o tipo de íris usando a declaração BigQuery ML CREATE MODEL. Esta tarefa de preparação deve demorar aproximadamente 1 minuto a concluir.

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`;'

Exporte o modelo

Exporte o modelo para um contentor do Cloud Storage através da ferramenta de linhas de comando bq. Para ver formas adicionais de exportar modelos, consulte o artigo Exporte modelos do BigQuery ML. Esta tarefa de extração deve demorar menos de 1 minuto a concluir.

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

Implementação e publicação locais

Pode implementar modelos do TensorFlow exportados através do contentor do Docker do TensorFlow Serving. Os passos seguintes requerem a instalação do Docker.

Transfira os ficheiros do modelo exportados para um diretório temporário

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

Crie um subdiretório de versão

Este passo define um número de versão (1 neste caso) 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

Extraia a imagem de Docker

docker pull tensorflow/serving

Execute o contentor 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 &

Execute 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

Implementação e publicação online

Esta secção usa a CLI do Google Cloud para implementar e executar previsões com base no modelo exportado.

Para mais informações sobre a implementação de um modelo no Vertex AI para previsões online ou em lote, consulte o artigo Implemente um modelo num ponto final.

Crie um recurso de modelo

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

Crie 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

Este passo pode demorar alguns minutos a ser concluído. Deverá ver a mensagem Creating version (this might take a few minutes).......

3) (Opcional) Obtenha informações sobre a nova versão:

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

Deverá ver uma saída semelhante a 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 online

Para mais informações sobre a execução de previsões online num modelo implementado, consulte o artigo Obtenha inferências online a partir de um modelo personalizado preparado.

1) Crie um ficheiro JSON delimitado por novas linhas para as entradas, por exemplo, instances.json um ficheiro 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 a 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

Prepare e implemente um modelo de classificador de árvore de reforço

Use as secções seguintes para saber como formar e implementar um modelo de classificador de árvores melhoradas.

Prepare o modelo

Prepare um modelo de classificador de árvore melhorado que preveja o tipo de íris através da declaração CREATE MODEL. Esta tarefa de preparação deve demorar aproximadamente 7 minutos a concluir.

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`;'

Exporte o modelo

Exporte o modelo para um contentor do Cloud Storage através da ferramenta de linhas de comando bq. Para ver outras formas de exportar modelos, consulte o artigo Exporte 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

Implementação e publicação locais

Nos ficheiros exportados, existe um ficheiro main.py para execução local.

Transfira os ficheiros do modelo exportados para um diretório local

mkdir serving_dir
gcloud storage cp gs://some/gcs/path/boosted_tree_iris_model serving_dir --recursive

Extrato de previsão

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

Instale a biblioteca XGBoost

Instale a biblioteca XGBoost: versão 0.82 ou posterior.

Execute 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}]'

Implementação e publicação online

Esta secção usa a CLI do Google Cloud para implementar e executar previsões com base no modelo exportado. Para mais informações, consulte o artigo Obtenha inferências online a partir de um modelo personalizado preparado.

Para mais informações sobre a implementação de um modelo na Vertex AI para previsões online ou em lote através de rotinas personalizadas, consulte o artigo Implemente um modelo num ponto final.

Crie um recurso de modelo

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

Crie 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

Este passo pode demorar alguns minutos a ser concluído. Deverá ver a mensagem Creating version (this might take a few minutes).......

3) (Opcional) Obtenha informações sobre a nova versão:

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

Deverá ver uma saída semelhante a 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 online

Para mais informações sobre a execução de previsões online num modelo implementado, consulte o artigo Obtenha inferências online a partir de um modelo personalizado preparado.

1) Crie um ficheiro JSON delimitado por newline para as entradas. Por exemplo, instances.json ficheiro 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 a 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

Prepare e implemente um modelo de classificador do AutoML

Use as secções seguintes para saber como preparar e implementar um modelo de classificador do AutoML.

Prepare o modelo

Prepare um modelo de classificador do AutoML que preveja o tipo de íris através da declaração CREATE MODEL. Os modelos do AutoML precisam de, pelo menos, 1000 linhas de dados de entrada. Como a tabela de dados de origem tem apenas 150 linhas, duplicamos os dados 10 vezes.ml_datasets.iris Esta tarefa de preparação deve demorar cerca de 2 horas a ser concluída.

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;'

Exporte o modelo

Exporte o modelo para um contentor do Cloud Storage através da ferramenta de linhas de comando bq. Para ver formas adicionais de exportar modelos, consulte o artigo Exportar modelos do BigQuery ML.

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

Implementação e publicação locais

Para ver detalhes sobre a criação de contentores do AutoML, consulte o artigo Exportar modelos. Os passos seguintes requerem a instalação do Docker.

Copie os ficheiros do 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

Extraia a imagem de Docker do AutoML

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

Inicie o contentor do Docker

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

Execute a previsão

1) Crie um ficheiro JSON delimitado por newline para as entradas. Por exemplo, input.json ficheiro com o seguinte 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 predict:

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

Implementação e publicação online

A previsão online para modelos de regressor do AutoML e classificador do AutoML não é suportada no Vertex AI.

Limpar

Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

  • Pode eliminar o projeto que criou.
  • Em alternativa, pode manter o projeto e eliminar o conjunto de dados e o contentor do Cloud Storage.

Pare o contentor Docker

1) Apresente uma lista de todos os contentores Docker em execução.

docker ps

2) Pare o contentor com o ID do contentor aplicável na lista de contentores.

docker stop container_id

Elimine recursos do Vertex AI

1) Elimine a versão do modelo.

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

2) Elimine o modelo.

gcloud ai-platform models delete $MODEL_NAME

Elimine o conjunto de dados

A eliminação do projeto remove todos os conjuntos de dados e todas as tabelas no projeto. Se preferir reutilizar o projeto, pode eliminar o conjunto de dados que criou neste tutorial:

  1. Se necessário, abra a página do BigQuery na Google Cloud consola.

    Aceda à página do BigQuery

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

  3. Clique em Eliminar conjunto de dados no lado direito da janela. Esta ação elimina o conjunto de dados, a tabela e todos os dados.

  4. Na caixa de diálogo Eliminar conjunto de dados, confirme o comando de eliminação escrevendo o nome do conjunto de dados (bqml_tutorial) e, de seguida, clique em Eliminar.

Elimine o seu contentor do Cloud Storage

A eliminação do projeto remove todos os contentores do Cloud Storage no projeto. Se preferir reutilizar o projeto, pode eliminar o contentor que criou neste tutorial

  1. Na Google Cloud consola, aceda à página Recipientes do Cloud Storage.

    Aceda a Recipientes

  2. Selecione a caixa de verificação do contentor que quer eliminar.

  3. Clique em Eliminar.

  4. Na janela de sobreposição apresentada, clique em Eliminar para confirmar que quer eliminar o contentor e o respetivo conteúdo.

Elimine o projeto

Para eliminar 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.

O que se segue?

  • Para uma vista geral do BigQuery ML, consulte o artigo Introdução ao BigQuery ML.
  • Para obter informações sobre a exportação de modelos, consulte o artigo Exporte modelos.
  • Para obter informações sobre como criar modelos, consulte a página de sintaxe CREATE MODEL.