Con los algoritmos integrados en AI Platform Training, puedes enviar los datos de entrenamiento, seleccionar un algoritmo y permitir que AI Platform Training se encargue del procesamiento previo y el entrenamiento, sin tener que escribir ningún código para una aplicación de entrenamiento. Los algoritmos de imagen integrados te permiten entrenar en TPU con una configuración mínima. El modelo guardado de TensorFlow resultante es compatible con la deriva en CPU y GPU.
Descripción general
En este instructivo, entrenarás un modelo de clasificación de imágenes sin escribir ningún código. Envía el conjunto de datos de flores a AI Platform Training para el entrenamiento e implementa el modelo en AI Platform Prediction para obtener las predicciones. El modelo resultante clasifica las imágenes de flores según las especies (margarita, tulipán, rosa, girasol o diente de león).
Antes de comenzar
Para completar este instructivo en la línea de comandos, usa Cloud Shell o cualquier entorno en el que esté instalado Google Cloud CLI.
Completa los siguientes pasos para configurar una cuenta de GCP, habilitar las API necesarias y, también, instalar y activar Google Cloud CLI.
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Autoriza a Cloud TPU para que tenga acceso al proyecto
Sigue estos pasos para autorizar el nombre de la cuenta de servicio de Cloud TPU asociada con tu proyecto de Google Cloud:
Llama a
projects.getConfig
para obtener el nombre de la cuenta de servicio de Cloud TPU. Ejemplo:PROJECT_ID=PROJECT_ID curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://ml.googleapis.com/v1/projects/$PROJECT_ID:getConfig
Guarda el valor de los campos
serviceAccountProject
ytpuServiceAccount
que muestra la API.Inicializa la cuenta de servicio de Cloud TPU:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" -d '{}' \ https://serviceusage.googleapis.com/v1beta1/projects/<serviceAccountProject>/services/tpu.googleapis.com:generateServiceIdentity
A continuación, agrega la cuenta de servicio de Cloud TPU como miembro del proyecto con la función de agente de servicios de Cloud ML. Completa los siguientes pasos en la consola de Google Cloud o usa el comando gcloud
:
Console
- Accede a la consola de Google Cloud y elige el proyecto en el que usas la TPU.
- Elige IAM y administración > IAM.
- Haz clic en el botón Agregar para agregar un miembro al proyecto.
- Ingresa la cuenta de servicio de la TPU en el cuadro de texto Miembros.
- Haz clic en la lista desplegable Funciones.
- Habilita la función Agente de servicios de Cloud ML (Administración de servicios > Agente de servicios de Cloud ML).
gcloud
Configura las variables de entorno que contengan el ID del proyecto y la cuenta de servicio de Cloud TPU:
PROJECT_ID=PROJECT_ID SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
Otorga la función
ml.serviceAgent
a la cuenta de servicio de Cloud TPU:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
Si quieres obtener más detalles para otorgar funciones a las cuentas de servicio, consulta la documentación de IAM.
Configuración
Modificamos el conjunto de datos de flores de TensorFlow para usarlo en este instructivo y lo alojamos en un depósito público de Cloud Storage, gs://cloud-samples-data/ai-platform/built-in/image/flowers/
.
Console
Selecciona tu algoritmo
Ve a la página Trabajos de AI Platform Training en la consola de Google Cloud:
Haz clic en el botón Trabajo de entrenamiento nuevo. En las opciones que se muestran a continuación, haz clic en Entrenamiento de algoritmos integrados. Aparecerá la página Crear un trabajo de entrenamiento nuevo.
La creación de un trabajo de entrenamiento se divide en cuatro pasos. El primero es Algoritmo de entrenamiento. Selecciona clasificación de imágenes y haz clic en Siguiente.
Datos de entrenamiento
En la sección Datos de entrenamiento, selecciona los datos de entrenamiento para el conjunto de datos de muestra, que está alojado en nuestro depósito público de Cloud Storage:
Selecciona Usar varios archivos almacenados en un directorio de Cloud Storage.
En Ruta de acceso al directorio, completa: “cloud-samples-data/ai-platform/built-in/image/flowers/”
En Nombre del comodín, completa “flowers_train*” para seleccionar todos los archivos de entrenamiento del directorio.
A continuación, se muestra la ruta de acceso a GCS completa: “gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_train*”
En la sección Datos de validación, selecciona los datos de validación para el conjunto de datos de muestra, que está alojado en nuestro depósito público de Cloud Storage:
Selecciona Usar varios archivos almacenados en un directorio de Cloud Storage.
En Ruta de acceso al directorio, completa: “cloud-samples-data/ai-platform/built-in/image/flowers/”
En Nombre del comodín, completa “flowers_validation*” para seleccionar todos los archivos de validación en el directorio.
A continuación, se muestra la ruta de acceso a GCS completa: “gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_validation*”
Especifica el directorio de resultados en tu depósito de Cloud Storage en el que deseas que AI Platform Training almacene el modelo entrenado, los puntos de control y otros resultados del trabajo de entrenamiento. Puedes completar la ruta de acceso exacta en el depósito o usar el botón Explorar para seleccionar la ruta.
gcloud
Configura las variables de entorno para el ID de tu proyecto, tu bucket de Cloud Storage, la ruta de acceso de Cloud Storage a los datos de entrenamiento y la selección del algoritmo.
Los algoritmos integrados de AI Platform Training se encuentran en contenedores de Docker que se alojan en Container Registry.
PROJECT_ID="YOUR_PROJECT_ID"
BUCKET_NAME="YOUR_BUCKET_NAME"
REGION="us-central1"
gcloud config set project $PROJECT_ID
gcloud config set compute/region $REGION
# Set paths to the training and validation data.
TRAINING_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_train*"
VALIDATION_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_validation*"
# Specify the Docker container for your built-in algorithm selection.
IMAGE_URI="gcr.io/cloud-ml-algos/image_classification:latest"
Envía un trabajo de entrenamiento
Para enviar un trabajo, debes especificar algunos argumentos básicos de entrenamiento y algunos argumentos básicos relacionados con el algoritmo de clasificación de imágenes.
Argumentos generales para el trabajo de entrenamiento:
Argumentos del trabajo de entrenamiento | |
---|---|
Argumento | Descripción |
job-id |
ID único para el trabajo de entrenamiento. Puedes usarlo para buscar registros del estado de tu trabajo de entrenamiento una vez que lo hayas enviado. |
job-dir |
Es la ruta de acceso de Cloud Storage en la que AI Platform Training guarda los archivos de entrenamiento tras completar un trabajo de entrenamiento de forma correcta. |
scale-tier |
Especifica los tipos de máquinas para el entrenamiento. Usa BASIC para seleccionar una configuración de una sola máquina.
|
master-image-uri |
Es el URI de Container Registry usado para especificar qué contenedor de Docker se usará en el trabajo de entrenamiento. Usa el contenedor para el algoritmo integrado de clasificación de imágenes definido antes como IMAGE_URI .
|
region |
Especifica la región disponible en la que deseas ejecutar el trabajo de entrenamiento. Para este instructivo, puedes usar la región us-central1 .
|
Argumentos específicos del algoritmo integrado de clasificación de imágenes:
Argumentos del algoritmo | |
---|---|
Argumento | Descripción |
training_data_path |
Es la ruta de acceso a un patrón de ruta de TFRecord que se usa para el entrenamiento. |
validation_data_path |
Es la ruta de acceso a un patrón de ruta de TFRecord que se usa para la validación. |
pretrained_checkpoint_path |
Es la ruta de acceso de los puntos de control previamente entrenados. Puedes usar algunos puntos de control publicados. |
num_classes |
Es la cantidad de clases en los datos de entrenamiento o validación. |
max_steps |
Es la cantidad de pasos que ejecutará el trabajo de entrenamiento. |
train_batch_size |
Es la cantidad de imágenes que se usarán por cada paso de entrenamiento. |
num_eval_images |
Es la cantidad total de imágenes que se usan para la evaluación. Si es 0, todas las imágenes en validation_data_path se usarán para la evaluación.
|
learning_rate_decay_type |
Es el método por el que la tasa de aprendizaje disminuye durante el entrenamiento. |
warmup_learning_rate |
Es la tasa de aprendizaje al comienzo de la fase de preparación. |
warmup_steps |
Es la cantidad de pasos que se deben ejecutar durante la fase de preparación o su duración en pasos.
El trabajo de entrenamiento usa warmup_learning_rate durante la fase de preparación. Cuando finaliza la fase de preparación, el trabajo de entrenamiento usa initial_learning_rate .
|
initial_learning_rate |
Es la tasa de aprendizaje inicial después de que se complete la fase de preparación. |
stepwise_learning_rate_steps |
Son los pasos para disminuir o cambiar las tasas de aprendizaje en el tipo de disminución gradual de la tasa. Por ejemplo, 100,200 significa que la tasa de aprendizaje cambiará (con respecto a stepwise_learning_rate_levels ) en el paso 100 y en el paso 200. Ten en cuenta que solo se respetará cuando learning_rate_decay_type esté configurado como gradual.
|
stepwise_learning_rate_levels |
Es el valor de la tasa de aprendizaje de cada paso en el tipo de disminución gradual de la tasa. Ten en cuenta que solo se respetará cuando learning_rate_decay_type esté configurado como gradual.
|
image_size |
Es el tamaño de la imagen (ancho y alto) que se usa para el entrenamiento. |
optimizer_type |
Es el optimizador que se usa para el entrenamiento. Debe ser uno de los siguientes: {momentum, adam, rmsprop}
|
optimizer_arguments |
Se trata de los argumentos para el optimizador. Es una lista separada por comas de pares “nombre=valor”. Debe ser compatible con optimizer_type . Ejemplos:
|
model_type |
Es el tipo de arquitectura de modelo que se usa para entrenar modelos. Puede ser uno de los siguientes:
|
label_smoothing |
Es el parámetro de alisamiento de etiquetas usado en softmax_cross_entropy . |
weight_decay |
Es el coeficiente de disminución de peso para la regularización L2. loss = cross_entropy + params['weight_decay'] * l2_loss |
Para obtener una lista detallada de todas las demás marcas del algoritmo de clasificación de imágenes, consulta la referencia del algoritmo integrado de clasificación de imágenes.
Console
Argumentos del algoritmo
En la primera parte de la pestaña Argumentos del algoritmo, escribe los siguientes valores:
- Cantidad de clases: 5
- Pasos máximos: 15,000
- Tamaño del lote de entrenamiento: 128
- Cantidad de imágenes de evaluación: 1
En la Sección del modelo de la pestaña Argumentos del algoritmo, haz lo siguiente:
- En Tipo de modelo, selecciona Efficientnet-b4.
- Deja en blanco el campo Ruta de acceso al punto de control previamente entrenado.
- Deja Alisamiento de etiquetas y Disminución de peso en sus valores predeterminados.
Configuración del trabajo
En la pestaña Configuración del trabajo, haz lo siguiente:
- Ingresa un ID del trabajo único (por ejemplo, “image_classification_example”).
- Ingresa una región disponible (como “us-central1”).
- A fin de elegir los tipos de máquinas, selecciona “CUSTOM” para el nivel de escala.
Aparecerá una sección para que proporciones la especificación personalizada del clúster.
- En Tipo de instancia principal, selecciona complex_model_m.
- En Tipo de trabajador, selecciona cloud_tpu. El recuento de trabajadores se establece de forma predeterminada en 1.
Haz clic en Listo para enviar el trabajo de entrenamiento.
gcloud
Configura todos los argumentos para el trabajo de entrenamiento y el algoritmo antes de usar
gcloud
a fin de enviar el trabajo:DATASET_NAME="flowers" ALGORITHM="image_classification" MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_model" # Give a unique name to your training job. DATE="$(date '+%Y%m%d_%H%M%S')" JOB_ID="${MODEL_NAME}_${DATE}" # Make sure you have access to this Cloud Storage bucket. JOB_DIR="gs://${BUCKET_NAME}/algorithms_training/${MODEL_NAME}/${DATE}"
Envía el trabajo:
gcloud ai-platform jobs submit training $JOB_ID \ --region=$REGION \ --config=config.yaml \ --master-image-uri=$IMAGE_URI \ -- \ --training_data_path=$TRAINING_DATA_PATH \ --validation_data_path=$VALIDATION_DATA_PATH \ --job-dir=$JOB_DIR \ --max_steps=30000 \ --train_batch_size=128 \ --num_classes=5 \ --num_eval_images=100 \ --initial_learning_rate=0.128 \ --warmup_steps=1000 \ --model_type='efficientnet-b4'
Una vez que enviaste el trabajo de forma correcta, puedes ver los registros si ejecutas los siguientes comandos de
gcloud
:gcloud ai-platform jobs describe $JOB_ID gcloud ai-platform jobs stream-logs $JOB_ID
Conoce tu directorio de trabajos
Después de completar con éxito un trabajo de entrenamiento, AI Platform Training crea un modelo entrenado en el bucket de Cloud Storage, junto con otros artefactos. Encontrarás la siguiente estructura de directorio dentro de tu JOB_DIR
:
- model/ (un directorio de modelo guardado de TensorFlow que también contiene un archivo
deployment_config.yaml
)- saved_model.pb
- deployment_config.yaml
- eval/
- events.out.tfevents.[timestamp].cmle-training-[timestamp]
- events.out.tfevents...
- …
- variables/
- variables.data-00000-of-00001
- variables.index
El directorio de trabajos también contiene varios archivos de puntos de control del modelo.
Confirma que la estructura de tu directorio en JOB_DIR
coincida con la siguiente:
gcloud storage ls $JOB_DIR/* --all-versions
Implementa el modelo entrenado
AI Platform Training organiza los modelos entrenados mediante recursos de modelo y de versión. Un modelo AI Platform Training es un contenedor para las versiones del modelo de aprendizaje automático.
Para implementar un modelo, debes crear un recurso de modelo en AI Platform Training, crear una versión de ese modelo y, luego, usar el modelo y la versión para solicitar predicciones en línea.
Para obtener más información sobre cómo implementar modelos en AI Platform Training, consulta Cómo implementar un modelo de TensorFlow.
Console
En la página Trabajos, puedes encontrar una lista de todos tus trabajos de entrenamiento. Haz clic en el nombre del trabajo de entrenamiento que acabas de enviar (“image_classification” o el nombre que le diste al trabajo).
En la página Detalles del trabajo, puedes ver el progreso general de tu trabajo, o haz clic en Ver registros para obtener una vista más detallada de su progreso.
Cuando el trabajo se haya completado correctamente, aparecerá el botón Implementar modelo en la parte superior. Haz clic en Implementar modelo.
Selecciona Implementar como modelo nuevo y, luego, ingresa un nombre de modelo, como “algorithms_image_classification_model”. Luego, haz clic en Confirmar.
En la página Crear versión, ingresa un nombre de versión, como "v1", y deja todos los otros campos con su configuración predeterminada. Haz clic en Guardar.
gcloud
El proceso de entrenamiento con el algoritmo integrado de clasificación de imágenes genera un archivo, deployment_config.yaml
, que facilita la implementación del modelo en AI Platform Training para las predicciones.
Copia el archivo en tu directorio local y visualiza su contenido:
gcloud storage cp $JOB_DIR/model/deployment_config.yaml . cat deployment_config.yaml
El archivo
deployment_config.yaml
debería ser similar al que se muestra a continuación:deploymentUri: gs://BUCKET_NAME/algorithms_training/flowers_image_classification/model framework: TENSORFLOW labels: global_step: '1000' job_id: flowers_image_classification_20190227060114 runtimeVersion: '1.14'
Crea el modelo y la versión en AI Platform Training:
gcloud ai-platform models create $MODEL_NAME --regions $REGION # Create a model and a version using the file above. VERSION_NAME="v_${DATE}" gcloud ai-platform versions create $VERSION_NAME \ --model $MODEL_NAME \ --config deployment_config.yaml
La versión tarda unos minutos en crearse.
Obtén predicciones en línea
Cuando solicitas predicciones, debes asegurarte de que tus datos de entrada tengan el formato JSON.
Descarga los archivos de artefactos de entrenamiento:
gcloud storage cp $JOB_DIR/artifacts/* .
Prepara la entrada de predicción para una imagen.
Para enviar una solicitud de predicción en línea mediante la CLI de Google Cloud, como en este ejemplo, escribe cada instancia en una fila del archivo JSON delimitado por saltos de línea.
Ejecuta los siguientes comandos en tu terminal a fin de crear entradas para una sola instancia que puedas enviar a AI Platform Prediction:
Con la siguiente secuencia de comandos de Python, se codifica una sola imagen con
base64
, se le da el formato adecuado para la predicción, se agrega una clave de instancia y se escribe el resultado en un archivo llamadoprediction_instances.json
:import json import base64 import tensorflow as tf IMAGE_URI='gs://cloud-samples-data/ai-platform/built-in/image/tutorial_examples/daisy.jpg' with tf.gfile.Open(IMAGE_URI, 'rb') as image_file: encoded_string = base64.b64encode(image_file.read()).decode('utf-8') image_bytes = {'b64': str(encoded_string)} instances = {'image_bytes': image_bytes, 'key': '1'} with open("prediction_instances.json","w") as f: f.write(json.dumps(instances))
Envía la solicitud de predicción:
gcloud ai-platform predict --model $MODEL_NAME \ --version $VERSION_NAME \ --json-instances prediction_instances.json
Lo más probable es que el resultado de la predicción incluya la clase daisy
, lo que indica que el modelo implementado clasificó la imagen de entrada como una margarita. (Debido a que el entrenamiento no es determinista, el modelo puede variar).
Acerca de los datos
El equipo de TensorFlow proporciona el conjunto de datos de flores que se usa en este ejemplo para el entrenamiento.
¿Qué sigue?
- Obtén más información sobre cómo usar el algoritmo integrado de clasificación de imágenes.