En este instructivo, se muestra cómo exportar un modelo de BigQuery ML y, luego, implementarlo en Vertex AI 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
- Vertex AI (opcional, se usa para la predicción en línea)
Para obtener más información sobre los costos de BigQuery ML, consulta los 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 Vertex AI, consulta Modelos entrenados de forma personalizada.
Antes de comenzar
- 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- BigQuery se habilita automáticamente en proyectos nuevos.
Para activar BigQuery en un proyecto existente, ve 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 theserviceusage.services.enablepermission. Learn how to grant roles. -
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 theserviceusage.services.enablepermission. Learn how to grant roles. - Instala Google Cloud CLI y Google Cloud CLI.
Crea el conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA.
Console
En la consola de Google Cloud , ve a la página BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haz clic en Ver acciones > Crear conjunto de datos.
En la página Crear conjunto de datos, haz lo siguiente:
En ID del conjunto de datos, ingresa
bqml_tutorial.En Tipo de ubicación, selecciona Multirregión y, luego, EE.UU. (varias regiones en Estados Unidos).
Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.
bq
Para crear un conjunto de datos nuevo, usa el comando bq mk con la marca --location. Para obtener una lista completa de los parámetros posibles, consulta la
referencia del
comando bq mk --dataset.
Crea un conjunto de datos llamado
bqml_tutorialcon la ubicación de los datos establecida enUSy una descripción deBigQuery 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 omites-dy--dataset, el comando crea un conjunto de datos de manera predeterminada.Confirma que se haya 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" } }
Permite trabajar con BigQuery DataFrames.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames 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 BigQuery DataFrames.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local.
Entrena e implementa un modelo de regresión logística
Usa las siguientes secciones para aprender a entrenar y, luego, implementar 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 declaración 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
gcloud storage cp gs://some/gcs/path/iris_model tmp_dir --recursive
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 CLI de Google Cloud para implementar y ejecutar predicciones en el modelo exportado.
Si deseas obtener más información para implementar un modelo en Vertex AI para predicciones en línea o por lotes, consulta Implementa un modelo en un extremo.
Cómo crear un recurso del modelo
MODEL_NAME="IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME
Cómo crear una versión del 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
Para obtener más información sobre cómo ejecutar predicciones en línea en un modelo implementado, consulta Obtén inferencias en línea a partir de un modelo entrenado personalizado.
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, y luego, implementa un modelo clasificador de árbol mejorado
Usa las siguientes secciones para aprender a entrenar y, luego, implementar un modelo de clasificador de árbol potenciado.
Entrena el modelo
Entrena un modelo clasificador de árbol mejorado que prediga el tipo de iris mediante la declaración CREATE MODEL. 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
gcloud storage cp gs://some/gcs/path/boosted_tree_iris_model serving_dir --recursive
Predictor de extracción
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 CLI de Google Cloud para implementar y ejecutar predicciones en el modelo exportado. Para obtener más información, consulta Cómo obtener inferencias en línea a partir de un modelo entrenado personalizado.
Si deseas obtener más información para implementar un modelo en Vertex AI para predicciones en línea o por lotes con rutinas personalizadas, consulta Implementa un modelo en un extremo.
Cómo crear un recurso del modelo
MODEL_NAME="BOOSTED_TREE_IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME
Cómo crear una versión del 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 información sobre cómo ejecutar predicciones en línea en un modelo implementado, consulta Obtén inferencias en línea a partir de un modelo entrenado personalizado.
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
Usa las siguientes secciones para aprender a entrenar e implementar un modelo de clasificador de AutoML.
Entrena el modelo
Entrena un modelo clasificador de AutoML que prediga el tipo de iris mediante la sentencia CREATE MODEL. 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
gcloud storage cp gs://some/gcs/path/automl_iris_model/* automl_serving_dir/ --recursive
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 Vertex AI.
Realiza una limpieza
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 Vertex AI
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 tu 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:
Si es necesario, abre la página de BigQuery en la consola deGoogle Cloud .
En el panel de navegación, haz clic en el conjunto de datos bqml_tutorial que creaste.
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.
En el cuadro de diálogo Borrar conjunto de datos, escribe el nombre del conjunto de datos (
bqml_tutorial) para confirmar el comando de borrado y, luego, haz clic en Borrar.
Borra el bucket de Cloud Storage
Si borras el proyecto, se quitarán todos los buckets de Cloud Storage del proyecto. Si prefieres volver a usar el proyecto, puedes borrar el bucket que creaste en este instructivo.
- En la consola de Google Cloud , ve a la página Buckets de Cloud Storage.
Selecciona la casilla de verificación del bucket que desees borrar.
Haz clic en Borrar.
En la ventana de superposición que aparece, haz clic en Borrar para confirmar que deseas borrar el bucket y su contenido.
Borra tu proyecto
Para borrar el proyecto, haz lo siguiente:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
¿Qué sigue?
- 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.