arrow_back

Vertex AI: Ajuste de hiperparámetros

Acceder Unirse
Quick tip: Review the prerequisites before you run the lab
Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the student account, which may cause extra charges incurred to your personal account.
Pon a prueba tus conocimientos y compártelos con nuestra comunidad
done
Obtén acceso a más de 700 labs prácticos, insignias de habilidad y cursos

Vertex AI: Ajuste de hiperparámetros

Lab 2 horas 30 minutos universal_currency_alt 5 créditos show_chart Avanzado
info Es posible que este lab incorpore herramientas de IA para facilitar tu aprendizaje.
Pon a prueba tus conocimientos y compártelos con nuestra comunidad
done
Obtén acceso a más de 700 labs prácticos, insignias de habilidad y cursos

Descripción general

En este lab, aprenderás a usar Vertex AI para ejecutar un trabajo de ajuste de hiperparámetros en un modelo de TensorFlow. Si bien en este lab se usa TensorFlow para el código del modelo, puedes reemplazarlo por otro framework fácilmente.

Objetivos de aprendizaje

  • Crear un notebook de instancia de Workbench
  • Modificar el código de entrenamiento de la aplicación para el ajuste de hiperparámetros
  • Iniciar un trabajo de ajuste de hiperparámetros con la IU de Vertex AI

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 enfoca en los productos que se destacan a continuación: entrenamiento/ajuste de hiperparámetros y notebooks.

Vertex AI ofrece dos soluciones de notebook, Workbench y Colab Enterprise.

Workbench

Vertex AI Workbench es una buena opción para los proyectos que priorizan el control y la personalización. Es excelente para proyectos complejos que abarcan múltiples archivos, con dependencias complejas. También es una buena opción para científicos de datos que están haciendo la transición a la nube desde una estación de trabajo o laptop.

Las instancias de Vertex AI Workbench tienen un conjunto previamente instalado de paquetes de aprendizaje profundo, lo que incluye la compatibilidad con los frameworks de TensorFlow y PyTorch.

Configuración y requisitos

En cada lab, recibirá un proyecto de Google Cloud y un conjunto de recursos nuevos por tiempo limitado y sin costo adicional.

  1. Accede a Qwiklabs desde una ventana de incógnito.

  2. Ten en cuenta el tiempo de acceso del lab (por ejemplo, 1:15:00) y asegúrate de finalizarlo en el plazo asignado.
    No existe una función de pausa. Si lo necesita, puede reiniciar el lab, pero deberá hacerlo desde el comienzo.

  3. Cuando esté listo, haga clic en Comenzar lab.

  4. Anote las credenciales del lab (el nombre de usuario y la contraseña). Las usarás para acceder a la consola de Google Cloud.

  5. Haga clic en Abrir Google Console.

  6. Haga clic en Usar otra cuenta, copie las credenciales para este lab y péguelas en el mensaje emergente que aparece.
    Si usa otras credenciales, se generarán errores o incurrirá en cargos.

  7. Acepta las condiciones y omite la página de recursos de recuperación.

Habilita la API de Compute Engine

  1. En la consola de Cloud, haz clic en el menú de navegación > APIs y servicios > Biblioteca.

  2. Busca la API de Compute Engine y, luego, haz clic en Habilitar si aún no está habilitada. La necesitarás para crear la instancia de notebook.

Habilita la API de Container Registry

  1. En la consola de Cloud, haz clic en el menú de navegación > APIs y servicios > Biblioteca.

  2. Busca la API de Google Container Registry y selecciona Habilitar si aún no está habilitada. La usarás para crear un contenedor para tu trabajo de entrenamiento personalizado.

Tarea 1. Inicia la instancia de Vertex AI Workbench

  1. En el menú de navegación () de la consola de Google Cloud, selecciona Vertex AI.

  2. Haz clic en Habilitar todas las APIs recomendadas.

  3. En el menú de navegación, haz clic en Workbench.

    En la parte superior de la página de Workbench, asegúrate de estar en la vista Instancias.

  4. Haz clic en Crear nueva.

  5. Configura la instancia:

    • Nombre: lab-workbench
    • Región: Configura la región como
    • Zona: Establece la zona en
    • Opciones avanzadas (opcional): Si es necesario, haz clic en "Opciones avanzadas" para realizar personalizaciones adicionales (p. ej., tipo de máquina, tamaño del disco).

  1. Haz clic en Crear.

La instancia tardará algunos minutos en crearse. Se mostrará una marca de verificación verde junto a su nombre cuando esté lista.

  1. Haz clic en ABRIR JUPYTERLAB junto al nombre de la instancia para iniciar la interfaz de JupyterLab. Se abrirá una pestaña nueva en el navegador.

Nota: En este lab, entrenarás y ajustarás un modelo de clasificación de imágenes entrenado con el conjunto de datos de caballos o humanos de TensorFlow Datasets.

Haz clic en Revisar mi progreso para verificar el objetivo. Iniciar la instancia de Vertex AI Workbench

Tarea 2. Aloja en un contenedor el código de entrenamiento de la aplicación

Para enviar este trabajo de ajuste de hiperparámetros a Vertex, pon el código de entrenamiento de la aplicación en un contenedor de Docker y envíalo a Google Container Registry. Con este enfoque, puedes ajustar los hiperparámetros para un modelo compilado con cualquier framework.

  1. En el menú Launcher de JupyterLab, abre una ventana de Terminal en tu instancia de notebook.

  1. Crea un directorio nuevo llamado horses_or_humans y usa el comando cd para acceder a él:
mkdir horses_or_humans cd horses_or_humans

Crea un Dockerfile

El primer paso para alojar el código en un contenedor es crear un Dockerfile. En él, incluirás todos los comandos necesarios para ejecutar la imagen. Así, se instalarán todas las bibliotecas necesarias, incluida la CloudML Hypertune, y se configurará el punto de entrada para el código de entrenamiento.

  1. Crea un Dockerfile vacío en la Terminal:
touch Dockerfile
  1. Abre el Dockerfile desde el menú de la izquierda y pega en él lo siguiente:
FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-9 WORKDIR / # Installs hypertune library RUN pip install cloudml-hypertune # Copies the trainer code to the docker image. COPY trainer /trainer # Sets up the entry point to invoke the trainer. ENTRYPOINT ["python", "-m", "trainer.task"]
  1. Presiona Ctrl + S para guardar el archivo.

Este Dockerfile usa la imagen de Docker para GPU con TensorFlow Enterprise 2.9 para contenedores de aprendizaje profundo.. Los contenedores de aprendizaje profundo en Google Cloud tienen preinstalados muchos frameworks comunes de AA y ciencia de datos.

Después de descargar esa imagen, este Dockerfile configura el punto de entrada para el código de entrenamiento. Aún no has creado estos archivos; en el siguiente paso, agregarás el código para entrenar y ajustar el modelo.

Agrega el código de entrenamiento del modelo

  1. En la terminal, ejecuta el siguiente comando para crear un directorio para el código de entrenamiento y un archivo de Python en el que agregarás el código.
mkdir trainer touch trainer/task.py

Ahora, deberías tener lo siguiente en el directorio horses_or_humans/:

+ Dockerfile + trainer/ + task.py
  1. A continuación, abre el archivo task.py que acabas de crear y pega el siguiente código en él:
import tensorflow as tf import tensorflow_datasets as tfds import argparse import hypertune NUM_EPOCHS = 10 def get_args(): '''Parses args. Must include all hyperparameters you want to tune.''' parser = argparse.ArgumentParser() parser.add_argument( '--learning_rate', required=True, type=float, help='learning rate') parser.add_argument( '--momentum', required=True, type=float, help='SGD momentum value') parser.add_argument( '--num_neurons', required=True, type=int, help='number of units in last hidden layer') args = parser.parse_args() return args def preprocess_data(image, label): '''Resizes and scales images.''' image = tf.image.resize(image, (150,150)) return tf.cast(image, tf.float32) / 255., label def create_dataset(): '''Loads Horses Or Humans dataset and preprocesses data.''' data, info = tfds.load(name='horses_or_humans', as_supervised=True, with_info=True) # Create train dataset train_data = data['train'].map(preprocess_data) train_data = train_data.shuffle(1000) train_data = train_data.batch(64) # Create validation dataset validation_data = data['test'].map(preprocess_data) validation_data = validation_data.batch(64) return train_data, validation_data def create_model(num_neurons, learning_rate, momentum): '''Defines and complies model.''' inputs = tf.keras.Input(shape=(150, 150, 3)) x = tf.keras.layers.Conv2D(16, (3, 3), activation='relu')(inputs) x = tf.keras.layers.MaxPooling2D((2, 2))(x) x = tf.keras.layers.Conv2D(32, (3, 3), activation='relu')(x) x = tf.keras.layers.MaxPooling2D((2, 2))(x) x = tf.keras.layers.Conv2D(64, (3, 3), activation='relu')(x) x = tf.keras.layers.MaxPooling2D((2, 2))(x) x = tf.keras.layers.Flatten()(x) x = tf.keras.layers.Dense(num_neurons, activation='relu')(x) outputs = tf.keras.layers.Dense(1, activation='sigmoid')(x) model = tf.keras.Model(inputs, outputs) model.compile( loss='binary_crossentropy', optimizer=tf.keras.optimizers.SGD(learning_rate=learning_rate, momentum=momentum), metrics=['accuracy']) return model def main(): args = get_args() train_data, validation_data = create_dataset() model = create_model(args.num_neurons, args.learning_rate, args.momentum) history = model.fit(train_data, epochs=NUM_EPOCHS, validation_data=validation_data) # DEFINE METRIC hp_metric = history.history['val_accuracy'][-1] hpt = hypertune.HyperTune() hpt.report_hyperparameter_tuning_metric( hyperparameter_metric_tag='accuracy', metric_value=hp_metric, global_step=NUM_EPOCHS) if __name__ == "__main__": main()
  1. Presiona Ctrl + S para guardar el archivo.

Antes de crear el contenedor, analicemos el código en detalle. Hay algunos componentes que son específicos para el uso del servicio de ajuste de hiperparámetros.

  • Con la secuencia de comandos, se importa la biblioteca hypertune. Ten en cuenta que el Dockerfile del paso 1 incluía instrucciones para instalar la biblioteca mediante pip.

  • La función get_args() define un argumento de línea de comandos para cada hiperparámetro que deseas ajustar. En este ejemplo, los hiperparámetros que se ajustarán serán la tasa de aprendizaje, el valor de momentum en el optimizador y la cantidad de neuronas en la última capa oculta del modelo, pero puedes experimentar con otros si lo deseas. El valor que se pasa en dichos argumentos luego se usa para configurar el hiperparámetro correspondiente en el código.

  • Al final de la función main(), se usa la biblioteca hypertune para definir la métrica que deseas optimizar. En TensorFlow, el método model.fit de Keras devuelve un objeto History. El atributo History.history es un registro de los valores de pérdida en el entrenamiento y los valores de métricas en ciclos de entrenamiento consecutivos. Si pasas datos de validación a model.fit, el atributo History.history también incluirá valores de métricas y de pérdida de validación. Por ejemplo, si entrenas un modelo para tres ciclos de entrenamiento con datos de validación y con accuracy definida como una métrica, el atributo History.history sería similar al siguiente diccionario.

{ "accuracy": [ 0.7795261740684509, 0.9471358060836792, 0.9870933294296265 ], "loss": [ 0.6340447664260864, 0.16712145507335663, 0.04546636343002319 ], "val_accuracy": [ 0.3795261740684509, 0.4471358060836792, 0.4870933294296265 ], "val_loss": [ 2.044623374938965, 4.100203514099121, 3.0728273391723633 ]

Si quieres que el servicio de ajuste de hiperparámetros descubra qué valores maximizan la exactitud de la validación del modelo, debes definir la métrica como la última entrada (o NUM_EPOCS - 1) de la lista val_accuracy. Luego, pasa esta métrica a una instancia de HyperTune. Puedes seleccionar cualquier cadena para hyperparameter_metric_tag, pero deberás volver a usarla cuando inicies el trabajo de ajuste de hiperparámetros.

Haz clic en Revisar mi progreso para verificar el objetivo. Crear un Dockerfile y agregar el código de entrenamiento del modelo

Crea el contenedor

  1. En la terminal, ejecuta el siguiente comando para definir una variable env en tu proyecto; asegúrate de reemplazar your-cloud-project por el ID del proyecto:
Nota: Puedes obtener el ID del proyecto ejecutando gcloud config list --format 'value(core.project)' en la terminal. PROJECT_ID='your-cloud-project'
  1. Define una variable con el URI de la imagen de contenedor en Google Container Registry:
IMAGE_URI="gcr.io/$PROJECT_ID/horse-human:hypertune"
  1. Luego, ejecuta el siguiente código desde la raíz del directorio horses_or_humans para crear el contenedor:
docker build ./ -t $IMAGE_URI
  1. Por último, envía el contenedor a Google Container Registry:
docker push $IMAGE_URI

Ahora que enviaste el contenedor a Container Registry, puedes iniciar el trabajo de ajuste de hiperparámetros para un modelo personalizado.

Haz clic en Revisar mi progreso para verificar el objetivo. Crear el contenedor

Tarea 3. Ejecuta un trabajo de ajuste de hiperparámetros en Vertex AI

En este lab, se usa un entrenamiento personalizado con un contenedor personalizado en Google Container Registry, pero también puedes ejecutar un trabajo de ajuste de hiperparámetros con los contenedores creados previamente.

  • En la consola de Cloud, navega a la sección Entrenamiento de Vertex AI:
  • Para la API de Vertex AI, haz clic en Habilitar y en Cerrar.

Configura el trabajo de entrenamiento

  1. Haz clic en Entrenar un modelo nuevo para ingresar los parámetros del trabajo de ajuste de hiperparámetros:

    • En Conjunto de datos, selecciona No hay ningún conjunto de datos administrado.
    • Selecciona Entrenamiento personalizado (avanzado) como método de entrenamiento y haz clic en Continuar.
    • Ingresa horses-humans-hyptertune (o el nombre que quieras) en Nombre del modelo.
    • Haz clic en Continuar.
  2. En el paso Contenedor de entrenamiento, selecciona Contenedor personalizado:

    • En el campo Imagen de contenedor de la Configuración del contenedor personalizado, ingresa el valor de la variable IMAGE_URI de la sección anterior. La ruta debería ser gcr.io/<your-cloud-project>/horse-human:hypertune, con el nombre de tu proyecto. Deja el resto de los campos en blanco y haz clic en Continuar.

Configura el trabajo de ajuste de hiperparámetros

  • Selecciona Enable hyperparameter tuning.

Configura los hiperparámetros

A continuación, deberás agregar los hiperparámetros que configuraste como argumentos de la línea de comandos en el código de entrenamiento de la aplicación. Cuando agregues un hiperparámetro, primero deberás proporcionar el nombre. Este debe coincidir con el nombre del argumento que pasaste a argparse.

  1. En Nombre del parámetro, ingresa learning_rate.

  2. En Tipo, selecciona Doble.

  3. Ingresa 0.01 en Mínimo y 1 en Máximo.

  4. En Escalamiento, selecciona Registro.

  5. Haz clic en LISTO.

  6. Después de agregar el hiperparámetro learning_rate, agrega los parámetros para momentum y num_neurons.

  • Para momentum:

    • Haz clic en AGREGAR UN HIPERPARÁMETRO.
    • En Nombre del parámetro, ingresa momentum.
    • En Tipo, selecciona Doble.
    • Ingresa 0 en Mínimo y 1 en Máximo.
    • En Escalamiento, selecciona Lineal.
    • Haz clic en LISTO.
  • Para num_neurons:

    • Haz clic en AGREGAR UN HIPERPARÁMETRO.
    • En Nombre del parámetro, ingresa num_neurons.
    • En Tipo, selecciona Discrete.
    • Ingresa 64,128,512 en Valores.
    • En Escalamiento, selecciona Sin escalamiento.
    • Haz clic en LISTO.

Configura la métrica

Después de agregar los hiperparámetros, deberás proporcionar la métrica que deseas optimizar y el objetivo. Debe ser igual al argumento hyperparameter_metric_tag que configuraste en la aplicación de entrenamiento.

  1. Ingresa Exactitud en Métrica que se optimizará.
  2. En Objetivo, selecciona Maximizar.

El servicio de ajuste de hiperparámetros de Vertex AI ejecutará múltiples pruebas de tu aplicación de entrenamiento con los valores que configuraste en los pasos anteriores. Deberás establecer un límite superior para la cantidad de pruebas que ejecutará el servicio.

Si se realizan más pruebas, se obtendrán mejores resultados, pero habrá un punto en el que habrá menos resultados y las pruebas adicionales tendrán un efecto nulo o muy bajo en la métrica que intentas optimizar. Se recomienda comenzar con una cantidad más pequeña de pruebas para tener una idea del impacto de los hiperparámetros elegidos antes de aumentar a una gran cantidad de pruebas.

También deberás establecer un límite superior para la cantidad de pruebas paralelas. Si las aumentas, se reducirá el tiempo que tarda el trabajo de ajuste de hiperparámetros en completarse; sin embargo, esta acción puede reducir su eficacia general. Esto se debe a que la estrategia de ajuste predeterminada utiliza los resultados de pruebas anteriores para asignar los valores en las pruebas posteriores. Si ejecutas demasiadas pruebas en paralelo, algunas no se beneficiarán de los resultados de las que ya están en curso.

  1. A los efectos de ofrecer una demostración, puedes establecer la Cantidad máxima de pruebas en 15, y la Cantidad máxima de pruebas paralelas en 3. Puedes experimentar con distintas cantidades, aunque esto puede aumentar el tiempo de ajuste y el costo.

  2. Selecciona Predeterminado en Algoritmo, el cual utilizará Google Vizier para efectuar una optimización bayesiana en el ajuste de hiperparámetros. Puedes obtener más información sobre este algoritmo en el blog Hyperparameter tuning in Cloud Machine Learning Engine using Bayesian Optimization.

  3. Haz clic en Continuar.

Configura el procesamiento

En Procesamiento y precios, no cambies la región seleccionada y, en Configuración de procesamiento, selecciona Implementa en un grupo de trabajadores nuevo.

Configura el Grupo de trabajadores 0 (Worker pool 0) de la siguiente manera:

  1. En Tipo de máquina, selecciona Estándar > n1-standard-4.
  2. En Tipo de disco, selecciona SSD.
  3. En Tamaño del disco (GB), ingresa 100.
  4. Haz clic en COMENZAR EL ENTRENAMIENTO para iniciar el trabajo de ajuste de hiperparámetros. En la sección Entrenamiento de la consola, en la pestaña TRABAJOS DE AJUSTE DE HIPERPARÁMETROS, verás algo como esto:

Nota: El trabajo de ajuste de hiperparámetros tardará entre 55 y 60 minutos en completarse.

Cuando termine, podrás hacer clic en el nombre del trabajo y ver los resultados de las pruebas de ajuste.

Haz clic en Revisar mi progreso para verificar el objetivo. Ejecutar un trabajo de ajuste de hiperparámetros en Vertex AI

Tarea 4. Limpieza

  1. Si quieres continuar usando el notebook que creaste en este lab, te recomendamos que lo desactives cuando no lo utilices. En la IU de Notebooks de la consola de Cloud, selecciona el notebook y, luego, haz clic en Detener.

    Si quieres borrar el notebook, haz clic en el botón Borrar en la parte superior derecha.

  2. Para borrar el bucket de Storage, ve al menú de navegación > Cloud Storage, selecciona el bucket y haz clic en Borrar.

¡Felicitaciones!

Aprendiste a usar Vertex AI para hacer lo siguiente:

Iniciar un trabajo de ajuste de hiperparámetros para entrenar el código de un contenedor personalizado. En este ejemplo, usaste un modelo de TensorFlow, pero puedes entrenar un modelo creado con cualquier framework a través de contenedores personalizados o integrados. Para obtener más información sobre las distintas partes de Vertex, consulta la documentación de Vertex AI.

Finalice su lab

Cuando haya completado su lab, haga clic en Finalizar lab. Qwiklabs quitará los recursos que usó y limpiará la cuenta por usted.

Tendrá la oportunidad de calificar su experiencia en el lab. Seleccione la cantidad de estrellas que corresponda, ingrese un comentario y haga clic en Enviar.

La cantidad de estrellas indica lo siguiente:

  • 1 estrella = Muy insatisfecho
  • 2 estrellas = Insatisfecho
  • 3 estrellas = Neutral
  • 4 estrellas = Satisfecho
  • 5 estrellas = Muy satisfecho

Puede cerrar el cuadro de diálogo si no desea proporcionar comentarios.

Para enviar comentarios, sugerencias o correcciones, use la pestaña Asistencia.

Copyright 2020 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

Este contenido no está disponible en este momento

Te enviaremos una notificación por correo electrónico cuando esté disponible

¡Genial!

Nos comunicaremos contigo por correo electrónico si está disponible

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.