Exportar un modelo de BigQuery ML para hacer predicciones online

En este tutorial se muestra cómo exportar un modelo de BigQuery ML y, a continuación, desplegarlo en Vertex AI o en una máquina local. Usarás la tabla iris de los conjuntos de datos públicos de BigQuery y seguirás estos tres casos prácticos completos:

  • Entrenar e implementar un modelo de regresión logística (también se aplica a los modelos de clasificador de DNN, regresor de DNN, k-medias, regresión lineal y factorización de matriz).
  • Entrenar y desplegar un modelo de clasificador de árbol reforzado (también se aplica a los modelos de regresión de árbol reforzado).
  • Entrenar y desplegar un modelo de clasificador de AutoML (también se aplica a los modelos de regresión de AutoML).

Crea tu conjunto de datos

Crea un conjunto de datos de BigQuery para almacenar tu modelo de aprendizaje automático.

Consola

  1. En la Cloud de Confiance consola, ve a la página BigQuery.

    Ir a la página de BigQuery

  2. En el panel Explorador, haz clic en el nombre de tu proyecto.

  3. Haga clic en Ver acciones > Crear conjunto de datos.

  4. En la página Crear conjunto de datos, haz lo siguiente:

    • En ID del conjunto de datos, introduce bqml_tutorial.

    • En Tipo de ubicación, selecciona Multirregión y, a continuación, EE. UU. (varias regiones de Estados Unidos).

    • Deje el resto de los ajustes predeterminados como están y haga clic en Crear conjunto de datos.

bq

Para crear un conjunto de datos, usa el comando bq mk con la marca --location. Para ver una lista completa de los parámetros posibles, consulta la referencia del comando bq mk --dataset.

  1. Crea un conjunto de datos llamado bqml_tutorial con la ubicación de los datos definida como US y la descripción BigQuery ML tutorial dataset:

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

    En lugar de usar la marca --dataset, el comando usa el acceso directo -d. Si omite -d y --dataset, el comando creará un conjunto de datos de forma predeterminada.

  2. Confirma que se ha creado el conjunto de datos:

    bq ls

API

Llama al método datasets.insert con un recurso de conjunto de datos definido.

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

BigQuery DataFrames

Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de los DataFrames de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.

import google.cloud.bigquery

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

Entrenar y desplegar un modelo de regresión logística

En las secciones siguientes se explica cómo entrenar y desplegar un modelo de regresión logística.

Preparar el modelo

Entrena un modelo de regresión logística que prediga el tipo de iris mediante la instrucción CREATE MODEL de BigQuery ML. Este trabajo de entrenamiento debería tardar aproximadamente 1 minuto en completarse.

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 el modelo

Exporta el modelo a un segmento de Cloud Storage con la herramienta de línea de comandos bq. Para ver otras formas de exportar modelos, consulta Exportar modelos de BigQuery ML. Este trabajo de extracción debería tardar menos de 1 minuto en completarse.

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

Despliegue y publicación locales

Puedes desplegar modelos de TensorFlow exportados con el contenedor Docker de TensorFlow Serving. Para seguir los pasos que se indican a continuación, debes instalar Docker.

Descarga los archivos del modelo exportado en un directorio temporal.

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

Crear un subdirectorio de versión

En este paso se asigna un número de versión (1 en este caso) al modelo.

mkdir -p serving_dir/iris_model/1
cp -r tmp_dir/iris_model/* serving_dir/iris_model/1
rm -r tmp_dir

Extraer la imagen de Docker

docker pull tensorflow/serving

Ejecutar el contenedor 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 &

Ejecutar la predicción

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

Despliegue y servicio online

En esta sección se usa la CLI de Google Cloud para desplegar y ejecutar predicciones con el modelo exportado.

Para obtener más información sobre cómo desplegar un modelo en Vertex AI para obtener predicciones online o por lotes, consulta Desplegar un modelo en un endpoint.

Crear un recurso de modelo

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

Crear una versión de un modelo

1) Define las variables de entorno:

MODEL_DIR="gs://some/gcs/path/iris_model"
// Select a suitable version for this model
VERSION_NAME="v1"
FRAMEWORK="TENSORFLOW"

2) Crea la versión:

gcloud ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --runtime-version=1.15 --framework=$FRAMEWORK

Este paso puede tardar unos minutos en completarse. Deberías ver el mensaje Creating version (this might take a few minutes).......

3) (Opcional) Obtén información sobre la nueva versión:

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

Debería ver un resultado similar a este:

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

Predicción online

Para obtener más información sobre cómo ejecutar predicciones online con un modelo implementado, consulte Obtener inferencias online a partir de un modelo entrenado de forma personalizada.

1) Crea un archivo JSON delimitado por líneas nuevas para las entradas. Por ejemplo, instances.json con el siguiente contenido:

{"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) Configura las variables de entorno para la predicción:

INPUT_DATA_FILE="instances.json"

3) Ejecuta la predicción:

gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

Entrenar y desplegar un modelo de clasificador de árbol reforzado

En las siguientes secciones se explica cómo entrenar y desplegar un modelo de clasificador de árbol reforzado.

Preparar el modelo

Entrena un modelo de clasificador de árbol de refuerzo que prediga el tipo de iris mediante la instrucción CREATE MODEL. Este trabajo de entrenamiento debería tardar unos 7 minutos en completarse.

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 el modelo

Exporta el modelo a un segmento de Cloud Storage con la herramienta de línea de comandos bq. Para ver otras formas de exportar modelos, consulta Exportar modelos de BigQuery ML.

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

Despliegue y publicación locales

En los archivos exportados, hay un archivo main.py para la ejecución local.

Descargar los archivos del modelo exportado en un directorio local

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

Extraer predictor

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

Instalar la biblioteca XGBoost

Instala la biblioteca XGBoost (versión 0.82 o posterior).

Ejecutar la predicción

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

Despliegue y servicio online

En esta sección se usa la CLI de Google Cloud para desplegar y ejecutar predicciones con el modelo exportado. Para obtener más información, consulte el artículo Obtener inferencias online a partir de un modelo con entrenamiento personalizado.

Para obtener más información sobre cómo desplegar un modelo en Vertex AI para obtener predicciones online o por lotes mediante rutinas personalizadas, consulta el artículo Desplegar un modelo en un endpoint.

Crear un recurso de modelo

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

Crear una versión de un modelo

1) Define las variables de entorno:

MODEL_DIR="gs://some/gcs/path/boosted_tree_iris_model"
VERSION_NAME="v1"

2) Crea la versión:

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 paso puede tardar unos minutos en completarse. Deberías ver el mensaje Creating version (this might take a few minutes).......

3) (Opcional) Obtén información sobre la nueva versión:

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

Debería ver un resultado similar a este:

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

Predicción online

Para obtener más información sobre cómo ejecutar predicciones online con un modelo implementado, consulte Obtener inferencias online a partir de un modelo entrenado de forma personalizada.

1) Crea un archivo JSON delimitado por líneas nuevas para las entradas. Por ejemplo, instances.json con el siguiente contenido:

{"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) Configura las variables de entorno para la predicción:

INPUT_DATA_FILE="instances.json"

3) Ejecuta la predicción:

gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

Entrenar y desplegar un modelo de clasificador de AutoML

En las siguientes secciones se explica cómo entrenar y desplegar un modelo de clasificación de AutoML.

Preparar el modelo

Entrena un modelo de clasificador de AutoML que prediga el tipo de iris con la instrucción CREATE MODEL. Los modelos de AutoML necesitan al menos 1000 filas de datos de entrada. Como ml_datasets.iris solo tiene 150 filas, duplicamos los datos 10 veces. Este trabajo de entrenamiento debería tardar unas 2 horas en completarse.

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 el modelo

Exporta el modelo a un segmento de Cloud Storage con la herramienta de línea de comandos bq. Para ver otras formas de exportar modelos, consulta el artículo Exportar modelos de BigQuery ML.

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

Despliegue y publicación locales

Para obtener información sobre cómo crear contenedores de AutoML, consulta la sección Exportar modelos. Para seguir los pasos que se indican a continuación, debes instalar Docker.

Copiar archivos de modelo exportados en un directorio local

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

Extraer la imagen Docker de AutoML

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

Iniciar el contenedor Docker

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

Ejecutar la predicción

1) Crea un archivo JSON delimitado por líneas nuevas para las entradas. Por ejemplo, input.json con el siguiente contenido:

{"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) Haz la llamada de predicción:

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

Despliegue y servicio online

Vertex AI no admite la predicción online para modelos de regresión y clasificación de AutoML.