Exporta un modelo de BigQuery ML para la predicción en línea

En este instructivo, se muestra cómo exportar un modelo de BigQuery ML y, luego, implementarlo en AI Platform o en una máquina local. Usarás la tabla iris de los conjuntos de datos públicos de BigQuery y trabajarás en las siguientes tres situaciones de extremo a extremo:

  • Entrena y, luego, implementa un modelo de regresión logística (también se aplica al clasificador de DNN, el regresor de DNN, el k-means, la regresión lineal y los modelos de factorización de matrices).
  • Entrena y, luego, implementa un modelo clasificador de árbol mejorado (también se aplica al modelo regresor de árbol mejorado).
  • Entrena y, luego, implementa un modelo clasificador de AutoML (también se aplica al modelo regresor de AutoML).

Costos

En este instructivo, se usan los siguientes componentes facturables de Google Cloud:

  • BigQuery ML
  • Cloud Storage
  • AI Platform (opcional, se usa para la predicción en línea)

Para obtener más información sobre los costos de BigQuery ML, consulta la página de precios de BigQuery ML.

Para obtener más información sobre los costos de Cloud Storage, consulta la página de precios de Cloud Storage.

Para obtener más información sobre los costos de AI Platform, consulta la página de asignación de recursos y nodos de predicción.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

  4. BigQuery se habilita de forma automática en proyectos nuevos. Para activar BigQuery en un proyecto existente, ve a Habilita la API BigQuery.

    Habilita la API

  5. Habilita las API de AI Platform Training and Prediction API and Compute Engine.

    Habilita las API

  6. Instala el SDK de Google Cloud y la herramienta de línea de comandos de gcloud.

Crea el conjunto de datos

El primer paso es crear un conjunto de datos de BigQuery en el que se almacenará el modelo de AA. Para crear el conjunto de datos, haz lo siguiente:

  1. En Google Cloud Console, ve a la página de BigQuery.

    Ir a la página de BigQuery

  2. En el panel de navegación, en la sección Recursos, haz clic en el nombre de tu proyecto.

  3. En el panel de detalles a la derecha, haz clic en Crear conjunto de datos (Create dataset).

    Crea un conjunto de datos.

  4. En la página Crear conjunto de datos, sigue estos pasos:

    • En ID del conjunto de datos, ingresa bqml_tutorial.
    • En Ubicación de los datos, elija Estados Unidos (EE.UU.). Actualmente, los conjuntos de datos públicos se almacenan en la ubicación multirregional US. Para que sea más simple, debes colocar tu conjunto de datos en la misma ubicación.

      Crea la página de conjunto de datos.

  5. Usa los valores predeterminados para el resto de la configuración y haz clic en Crear conjunto de datos.

Entrena e implementa un modelo de regresión logística

Entrena el modelo

Entrena un modelo de regresión logística que prediga el tipo de iris mediante la sentencia CREATE MODEL de BigQuery ML. Este trabajo de entrenamiento debería llevar alrededor de 1 minuto.

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

Exporta el modelo

Exporta el modelo a un bucket de Cloud Storage mediante la herramienta de línea de comandos de bq. Para conocer más formas de exportar modelos, consulta Exporta modelos de BigQuery ML. Este trabajo de extracción debería llevar menos de 1 minuto.

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

Implementación y entrega locales

Puedes implementar modelos exportados de TensorFlow mediante el contenedor de Docker de TensorFlow Serving. Para los siguientes pasos, debes instalar Docker.

Descarga los archivos del modelo exportado en un directorio temporal

mkdir tmp_dir
gsutil cp -r gs://some/gcs/path/iris_model tmp_dir

Crea un subdirectorio de la versión

Con este paso, se establece un número de versión (1 en este caso) para el modelo.

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

Extrae la imagen de Docker

docker pull tensorflow/serving

Ejecuta el contenedor de 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 &

Ejecuta 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

Implementación y entrega en línea

En esta sección, se usa la herramienta de línea de comandos de gcloud para implementar y ejecutar predicciones en el modelo exportado.

Si deseas obtener más detalles sobre la implementación de un modelo en AI Platform para predicciones en línea o por lotes, consulta Implementa modelos.

Crea un recurso de modelo

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

Crea una versión de modelo

1) Configura 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 llevar unos minutos en completarse. Debería aparecer el mensaje Creating version (this might take a few minutes).......

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

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

Deberías 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 en línea

Los detalles sobre cómo ejecutar predicciones en línea en un modelo implementado están disponibles en https://cloud.google.com/ai-platform/prediction/docs/online-predict#requesting_predictions

1) Crea un archivo JSON delimitado por saltos de línea para entradas, por ejemplo, un archivo 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 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

Entrena e implementa un modelo clasificador de árbol mejorado

Entrena el modelo

Entrena un modelo clasificador de árbol mejorado que prediga el tipo de iris mediante la sentencia CREATE MODEL de BigQuery ML. Este trabajo de entrenamiento debería tomar alrededor de 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`;'

Exporta el modelo

Exporta el modelo a un bucket de Cloud Storage mediante la herramienta de línea de comandos de bq. Para conocer más formas de exportar modelos, consulta Exporta 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

Implementación y entrega locales

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

Descarga los archivos del modelo exportado a un directorio local

mkdir serving_dir
gsutil cp -r gs://some/gcs/path/boosted_tree_iris_model serving_dir

Extrae predictor.py

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

Instala la biblioteca XGBoost

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

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

Implementación y entrega en línea

En esta sección, se usa la herramienta de línea de comandos de gcloud para implementar y ejecutar predicciones en el modelo exportado.

Si deseas obtener más detalles sobre la implementación de un modelo en AI Platform para predicciones en línea o por lotes mediante rutinas personalizadas, consulta Implementa modelos.

Crea un recurso de modelo

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

Crea una versión de modelo

1) Configura 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 llevar unos minutos en completarse. Debería aparecer el mensaje Creating version (this might take a few minutes).......

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

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

Deberías 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 en línea

Para obtener más detalles sobre la ejecución de predicciones en línea en un modelo implementado, consulta Solicita predicciones.

1) Crea un archivo JSON delimitado por saltos de línea para entradas, por ejemplo, un archivo 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 variables de entorno para predecir

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

Entrena e implementa un modelo clasificador de AutoML

Entrena el modelo

Entrena un modelo clasificador de AutoML que prediga el tipo de iris mediante la sentencia CREATE MODEL de BigQuery ML. Los modelos de AutoML necesitan al menos 1,000 filas de datos de entrada. Debido a que ml_datasets.iris solo tiene 150 filas, duplicamos los datos 10 veces. Este trabajo de entrenamiento debería tomar alrededor de 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;'

Exporta el modelo

Exporta el modelo a un bucket de Cloud Storage mediante la herramienta de línea de comandos de bq. Para conocer más formas de exportar modelos, consulta Exporta modelos de BigQuery ML.

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

Implementación y entrega locales

Para obtener detalles sobre la compilación de contenedores de AutoML, consulta Exporta modelos. Para los siguientes pasos, debes instalar Docker.

Copia los archivos del modelo exportado a un directorio local

mkdir automl_serving_dir
gsutil cp -r gs://some/gcs/path/automl_iris_model/* automl_serving_dir/

Extrae una imagen de Docker de Auto ML

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

Inicia el contenedor de Docker

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

Ejecuta la predicción

1) Crea un archivo JSON delimitado por saltos de línea para entradas, por ejemplo, un archivo 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) Realiza la llamada de predicción

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

Implementación y entrega en línea

La predicción en línea para los modelos regresor de AutoML y clasificador de AutoML no es compatible con AI Platform.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

  • Puedes borrar el proyecto que creaste.
  • También puedes conservar el proyecto y borrar el conjunto de datos y el bucket de Cloud Storage.

Detén el contenedor de Docker

1) Enumera todos los contenedores de Docker en ejecución.

docker ps

2) Detén el contenedor con el ID de contenedor aplicable de la lista de contenedores.

docker stop container_id

Borra recursos de AI Platform

1) Borra la versión del modelo.

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

2) Borra el modelo.

gcloud ai-platform models delete $MODEL_NAME

Borra el conjunto de datos

Borrar tu proyecto quita todos sus conjuntos de datos y tablas. Si prefieres volver a usar el proyecto, puedes borrar el conjunto de datos que creaste en este instructivo:

  1. Si es necesario, abre la página de BigQuery en Cloud Console.

    Ir a la página de BigQuery

  2. En el panel de navegación, haz clic en el conjunto de datos bqml_tutorial que creaste.

  3. Haz clic en Borrar conjunto de datos en el lado derecho de la ventana. Esta acción borra el conjunto de datos, la tabla y todos los datos.

  4. En el cuadro de diálogo Borrar conjunto de datos, ingresa el nombre del conjunto de datos (bqml_tutorial) y, luego, haz clic en Borrar para confirmar el comando de borrado.

Borra el bucket de Cloud Storage

Si borras el proyecto, se quitarán todos los depósitos de Cloud Storage del proyecto. Si prefieres volver a usar el proyecto, puedes borrar el bucket que creaste en este instructivo.

  1. En Cloud Console, ve a la página Navegador de Cloud Storage.

    Ir al navegador

  2. Selecciona la casilla de verificación del bucket que desees borrar.

  3. Haz clic en Borrar.

  4. En la ventana de superposición que aparece, haz clic en Borrar para confirmar que deseas borrar el depósito y su contenido.

Borra el proyecto

Para borrar el proyecto, haz lo siguiente:

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Próximos pasos

  • Para obtener una descripción general de BigQuery ML, consulta Introducción a BigQuery ML.
  • Para obtener información sobre la exportación de modelos, consulta Exporta modelos.
  • Para obtener información sobre cómo crear modelos, consulta la página de sintaxis de CREATE MODEL.