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
En la Google Cloud consola, ve a la página BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haga 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, 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
.
Crea un conjunto de datos llamado
bqml_tutorial
con la ubicación de los datos definida comoUS
y la descripciónBigQuery 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.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.
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.