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 com reforço. Também se aplica ao modelo de regressor de árvore com reforço.
  • Prepare e implemente um modelo de classificador do AutoML. Também se aplica ao modelo de regressão do AutoML.

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.