Vertex AI Workbench: Compila un modelo de clasificación de imágenes con aprendizaje por transferencia y el ejecutor de notebooks

1. Descripción general

En este lab, aprenderás a configurar e iniciar ejecuciones de notebooks con Vertex AI Workbench.

Qué aprenderá

Aprenderás a hacer lo siguiente:

  • Usa parámetros en un notebook
  • Configura e inicia ejecuciones de notebooks desde la IU de Vertex AI Workbench

El costo total de la ejecución de este lab en Google Cloud es de aproximadamente $2.

2. Introducción a Vertex AI

En este lab, se utiliza la oferta de productos de IA más reciente de Google Cloud. Vertex AI integra las ofertas de AA de Google Cloud en una experiencia de desarrollo fluida. Anteriormente, se podía acceder a los modelos personalizados y a los entrenados con AutoML mediante servicios independientes. La nueva oferta combina ambos en una sola API, junto con otros productos nuevos. También puedes migrar proyectos existentes a Vertex AI. Para enviarnos comentarios, visita la página de asistencia.

Vertex AI incluye muchos productos distintos para respaldar flujos de trabajo de AA de extremo a extremo. Este lab se enfocará en Vertex AI Workbench.

Vertex AI Workbench ayuda a los usuarios a compilar con rapidez flujos de trabajo basados en notebooks de extremo a extremo a través de la integración profunda a servicios de datos (como Dataproc, Dataflow, BigQuery y Dataplex) y Vertex AI. Permite a los científicos de datos conectarse a servicios de datos de GCP, analizar conjuntos de datos, experimentar con diferentes técnicas de modelado, implementar modelos entrenados en producción y administrar MLOps durante el ciclo de vida del modelo.

3. Descripción general del caso de uso

En este lab, usarás el aprendizaje por transferencia para entrenar un modelo de clasificación de imágenes en el conjunto de datos DeepWeeds de TensorFlow Datasets. Usarás TensorFlow Hub para experimentar con vectores de atributos extraídos de diferentes arquitecturas de modelos, como ResNet50, Inception y MobileNet, todos previamente entrenados en el conjunto de datos de comparativas de ImageNet. Si aprovechas el ejecutor de notebooks a través de la IU de Vertex AI Workbench, iniciarás trabajos en Vertex AI Training que usan estos modelos previamente entrenados y volverás a entrenar la última capa para reconocer las clases del conjunto de datos de DeepWeeds.

4. Configura el entorno

Para ejecutar este codelab, necesitarás un proyecto de Google Cloud Platform que tenga habilitada la facturación. Para crear un proyecto, sigue estas instrucciones.

Paso 1: Habilita la API de Compute Engine

Ve a Compute Engine y selecciona Habilitar (si aún no está habilitada).

Paso 2: Habilita la API de Vertex AI

Navegue hasta la sección de Vertex AI en la consola de Cloud y haga clic en Habilitar API de Vertex AI.

Panel de Vertex AI

Paso 3: Crea una instancia de Vertex AI Workbench

En la sección Vertex AI de Cloud Console, haz clic en Workbench:

Menú Vertex AI

Habilita la API de Notebooks si aún no está habilitada.

Notebook_api

Una vez habilitada, haz clic en NOTEBOOKS ADMINISTRADOS (MANAGED NOTEBOOKS):

Notebooks_UI

Luego, selecciona NUEVO NOTEBOOK (NEW NOTEBOOK).

new_notebook

Asígnale un nombre al notebook y, luego, haz clic en Configuración avanzada (Advanced settings).

create_notebook

En Configuración avanzada (Advanced settings), activa la opción Habilitar el cierre inactivo (Enable Idle Shutdown) y establece la cantidad de minutos en 60. Esto provocará que el notebook se cierre automáticamente cuando no esté en uso para que no se generen costos innecesarios.

idle_timeout

Puedes dejar el resto de la configuración avanzada tal como está.

Luego, haz clic en Crear.

Una vez que se crea la instancia, selecciona Abrir JupyterLab (Open JupyterLab).

open_jupyterlab

La primera vez que uses una instancia nueva, se te solicitará que te autentiques.

autenticar

Vertex AI Workbench tiene una capa de compatibilidad de procesamiento que te permite iniciar kernels para TensorFlow, PySpark, R, etc., desde una sola instancia de notebook. Después de autenticarte, podrás seleccionar el tipo de notebook que quieres usar desde el selector.

Para este lab, selecciona el kernel de TensorFlow 2.

tf_kernel

5. Escribe el código de entrenamiento

El conjunto de datos de DeepWeeds consta de 17,509 imágenes que capturan ocho especies de malezas diferentes nativas de Australia. En esta sección, escribirás el código para procesar previamente el conjunto de datos de DeepWeeds y compilarás y entrenarás un modelo de clasificación de imágenes con vectores de atributos descargados de TensorFlow Hub.

Deberás copiar los siguientes fragmentos de código en las celdas de tu notebook. Ejecutar las celdas es opcional.

Paso 1: Descarga y procesa previamente el conjunto de datos

Primero, instala la versión nocturna de los conjuntos de datos de TensorFlow para asegurarte de que tomamos la versión más reciente del conjunto de datos de DeepWeeds.

!pip install tfds-nightly

Luego, importa las bibliotecas necesarias:

import tensorflow as tf
import tensorflow_datasets as tfds
import tensorflow_hub as hub

Descargar los datos de TensorFlow Datasets y extraer la cantidad de clases y el tamaño del conjunto de datos

data, info = tfds.load(name='deep_weeds', as_supervised=True, with_info=True)
NUM_CLASSES = info.features['label'].num_classes
DATASET_SIZE = info.splits['train'].num_examples

Define una función de procesamiento previo para escalar los datos de imagen en 255.

def preprocess_data(image, label):
  image = tf.image.resize(image, (300,300))
  return tf.cast(image, tf.float32) / 255., label

El conjunto de datos de DeepWeeds no incluye divisiones de entrenamiento/validación. Solo incluye un conjunto de datos de entrenamiento. En el siguiente código, usarás el 80% de esos datos para el entrenamiento y el 20% restante para la validación.

# Create train/validation splits

# Shuffle dataset
dataset = data['train'].shuffle(1000)

train_split = 0.8
val_split = 0.2
train_size = int(train_split * DATASET_SIZE)
val_size = int(val_split * DATASET_SIZE)

train_data = dataset.take(train_size)
train_data  = train_data.map(preprocess_data)
train_data  = train_data.batch(64)

validation_data = dataset.skip(train_size)
validation_data  = validation_data.map(preprocess_data)
validation_data  = validation_data.batch(64)

Paso 2: Crear el modelo

Ahora que creaste los conjuntos de datos de entrenamiento y validación, tienes todo listo para compilar el modelo. TensorFlow Hub proporciona vectores de atributos, que son modelos previamente entrenados sin la capa de clasificación superior. Crearás un extractor de atributos uniendo el modelo previamente entrenado con hub.KerasLayer, que une un modelo guardado de TensorFlow como una capa de Keras. Luego, agregarás una capa de clasificación y crearás un modelo con la API secuencial de Keras.

Primero, define el parámetro feature_extractor_model, que es el nombre del vector de atributos de TensorFlow Hub que usarás como base para tu modelo.

feature_extractor_model = "inception_v3"

A continuación, convertirás esta celda en una celda de parámetro, lo que te permitirá pasar un valor para feature_extractor_model en el entorno de ejecución.

Primero, selecciona la celda y haz clic en el inspector de propiedades en el panel derecho.

property_inspector

Las etiquetas son una forma sencilla de agregar metadatos a tu notebook. Escribe “parámetros” en el cuadro Agregar etiqueta y presiona Intro. Más adelante, cuando configures la ejecución, pasarás los diferentes valores (en este caso, el modelo de TensorFlow Hub) que quieres probar. Ten en cuenta que debes escribir la palabra “parámetros” (y ninguna otra palabra), ya que así es como el ejecutor de notebooks sabe qué celdas debe parametrizar.

add_tag

Puedes cerrar el inspector de propiedades si vuelves a hacer clic en el ícono de doble engranaje.

Crea una nueva celda y define el tf_hub_uri, en el que usarás la interpolación de cadenas para sustituir el nombre del modelo previamente entrenado que quieres usar como modelo base para una ejecución específica de tu notebook. De forma predeterminada, estableciste feature_extractor_model en "inception_v3", pero otros valores válidos son "resnet_v2_50" o "mobilenet_v1_100_224". Puedes explorar opciones adicionales en el catálogo de TensorFlow Hub.

tf_hub_uri = f"https://tfhub.dev/google/imagenet/{feature_extractor_model}/feature_vector/5"

A continuación, crea el extractor de atributos usando hub.KerasLayer y pasa el tf_hub_uri que definiste antes. Establece el argumento trainable=False para inmovilizar las variables, de modo que el entrenamiento solo modifique la nueva capa del clasificador que agregarás en la parte superior.

feature_extractor_layer = hub.KerasLayer(
    tf_hub_uri,
    trainable=False)

Para completar el modelo, une la capa del extractor de atributos a un modelo tf.keras.Sequential y agrega una capa completamente conectada para la clasificación. El número de unidades en este encabezado de clasificación debe ser igual al número de clases en el conjunto de datos:

model = tf.keras.Sequential([
  feature_extractor_layer,
  tf.keras.layers.Dense(units=NUM_CLASSES)
])

Por último, compila y ajusta el modelo.

model.compile(
  optimizer=tf.keras.optimizers.Adam(),
  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
  metrics=['acc'])

model.fit(train_data, validation_data=validation_data, epochs=3)

6. Ejecutar notebook

Haz clic en el ícono de Executor en la parte superior del notebook.

ejecutor

Paso 1: Configura el trabajo de entrenamiento

Asígnale un nombre a tu ejecución y proporciona un bucket de almacenamiento en tu proyecto.

executor_config

Configura el Tipo de máquina en 4 CPUs, 15 GB RAM.

Además, agrega 1 GPU NVIDIA.

Configura el entorno en TensorFlow Enterprise 2.6 (GPU).

Elige Ejecución única.

Paso 2: Configura los parámetros

Haz clic en el menú desplegable OPCIONES AVANZADAS para configurar el parámetro. En el cuadro, escribe feature_extractor_model=resnet_v2_50. Esta acción anulará inception_v3, el valor predeterminado que estableces para este parámetro en el notebook, con resnet_v2_50.

advanced_options

Puedes dejar marcada la casilla Usar la cuenta de servicio predeterminada.

Luego, haz clic en ENVIAR.

Paso 3: Examina los resultados

En la pestaña Ejecuciones de la IU de la consola, podrás ver el estado de ejecución de tu notebook.

executions_UI

Si haces clic en el nombre de la ejecución, se te redireccionará al trabajo de Vertex AI Training en el que se ejecuta tu notebook.

vertex_training

Cuando se complete el trabajo, haz clic en VER RESULTADO para ver el notebook de salida.

view_result

En el notebook de salida, verás que el valor de feature_extractor_model se reemplazó por el que pasaste en el entorno de ejecución.

param_cells

🎉 ¡Felicitaciones! 🎉

Aprendiste a usar Vertex AI Workbench para hacer lo siguiente:

  • Usa parámetros en un notebook
  • Configura e inicia ejecuciones de notebooks desde la IU de Vertex AI Workbench

Si quieres obtener más información sobre los diferentes componentes de Vertex AI, consulta la documentación.

7. Limpieza

De forma predeterminada, los notebooks administrados se cierran automáticamente después de 180 minutos de inactividad. Si quieres cerrar la instancia de forma manual, haz clic en el botón Detener (Stop) en la sección Vertex AI Workbench de la consola. Si quieres borrar el notebook por completo, haz clic en el botón Borrar (Delete).

borrar

Para borrar el bucket de almacenamiento, en el menú de navegación de Cloud Console, navega a Almacenamiento, selecciona tu bucket y haz clic en Borrar (Delete):

Borrar almacenamiento