Habilitar Cloud Profiler para depurar el rendimiento del entrenamiento de modelos

En esta página se explica cómo habilitar Cloud Profiler para depurar el rendimiento del entrenamiento de modelos en tus trabajos de entrenamiento personalizados.

Entrenar modelos puede ser costoso a nivel computacional. Profiler te permite monitorizar y optimizar el rendimiento del entrenamiento de tu modelo, ya que te ayuda a comprender el consumo de recursos de las operaciones de entrenamiento. Con esta información, puede identificar y corregir los cuellos de botella del rendimiento para entrenar modelos más rápido y a un coste menor.

Antes de empezar

Habilitar el generador de perfiles

Para habilitar Profiler en tu trabajo de entrenamiento, añade lo siguiente a tu script de entrenamiento:

  1. Añade la importación cloud_profiler a tus importaciones de nivel superior:

    from google.cloud.aiplatform.training_utils import cloud_profiler
    
  2. Inicializa el complemento cloud_profiler añadiendo lo siguiente:

    cloud_profiler.init()
    

Ejemplo

Aquí tienes un ejemplo de secuencia de comandos de entrenamiento:

#!/usr/bin/env python

import tensorflow as tf
import argparse
import os
from google.cloud.aiplatform.training_utils import cloud_profiler
import time

"""Train an mnist model and use cloud_profiler for profiling."""

def _create_model():
    model = tf.keras.models.Sequential(
        [
            tf.keras.layers.Flatten(input_shape=(28, 28)),
            tf.keras.layers.Dense(128, activation="relu"),
            tf.keras.layers.Dropout(0.2),
            tf.keras.layers.Dense(10),
        ]
    )
    return model

def main(args):
    strategy = None
    if args.distributed:
        strategy = tf.distribute.MultiWorkerMirroredStrategy()

    mnist = tf.keras.datasets.mnist

    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    x_train, x_test = x_train / 255.0, x_test / 255.0

    if args.distributed:
        strategy = tf.distribute.MultiWorkerMirroredStrategy()
        with strategy.scope():
            model = _create_model()
            model.compile(
                optimizer="adam",
                loss=tf.keras.losses.sparse_categorical_crossentropy,
                metrics=["accuracy"],
            )
    else:
        model = _create_model()
        model.compile(
            optimizer="adam",
            loss=tf.keras.losses.sparse_categorical_crossentropy,
            metrics=["accuracy"],
        )

    # Initialize the profiler.
    cloud_profiler.init()

    # Use AIP_TENSORBOARD_LOG_DIR to update where logs are written to.
    tensorboard_callback = tf.keras.callbacks.TensorBoard(
        log_dir=os.environ["AIP_TENSORBOARD_LOG_DIR"], histogram_freq=1
    )

    model.fit(
        x_train,
        y_train,
        epochs=args.epochs,
        verbose=0,
        callbacks=[tensorboard_callback],
    )
if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--epochs", type=int, default=100, help="Number of epochs to run model."
    )
    parser.add_argument(
        "--distributed", action="store_true", help="Use MultiWorkerMirroredStrategy"
    )
    args = parser.parse_args()
    main(args)

Acceder al panel de control de Profiler

Una vez que hayas configurado tu script de entrenamiento para habilitar Profiler, ejecuta el script de entrenamiento con una instancia de Vertex AI TensorBoard.

En tu secuencia de comandos de entrenamiento, asegúrate de que se cumplan las siguientes configuraciones:

  • Asigna BASE_OUTPUT_DIR: al segmento de Cloud Storage en el que quieras almacenar los registros de Vertex AI TensorBoard que genere tu secuencia de comandos de entrenamiento.
  • Asigna 'serviceAccount': a la cuenta de servicio que has creado con los roles roles/storage.admin y roles/aiplatform.user.
  • Asigna a 'tensorboard': el nombre completo de la instancia de Vertex AI TensorBoard que quieras usar con este trabajo de entrenamiento. El nombre completo tiene el siguiente formato:

    projects/PROJECT_NUMBER_OR_ID/locations/REGION/tensorboards/TENSORBOARD_INSTANCE_ID
    

Hay dos formas de acceder al panel de control de Profiler desde la consola de Google Cloud :

  • En la página Tareas personalizadas.
  • En la página Experimentos.

Acceder al panel de control de Profiler a través de la página Tareas personalizadas

Puedes usar este método para acceder al panel de control de Profiler aunque el trabajo de entrenamiento esté en el estado Finalizado.

  1. En la Google Cloud consola, ve a la pestaña Trabajos personalizados de la página Entrenamiento.

    Ve a Tareas personalizadas.

  2. Haga clic en el nombre del trabajo de entrenamiento que acaba de crear para ir a la página de detalles del trabajo.

  3. Haz clic en Abrir TensorBoard.

  4. Haga clic en la pestaña Perfil.

Acceder al panel de control del generador de perfiles a través de la página Experimentos

Solo puedes usar este método para acceder al panel de control de Profiler cuando el trabajo de entrenamiento esté en el estado Running.

  1. En la Google Cloud consola, ve a la página Experimentos de Vertex AI.

    Ir a Vertex AI Experiments

  2. Selecciona la región de la tarea de entrenamiento que acabas de crear.

  3. Haz clic en Abrir TensorBoard junto al nombre del trabajo de entrenamiento.

  4. Haga clic en la pestaña Perfil.

Capturar una sesión de creación de perfiles

Para capturar una sesión de creación de perfiles, tu trabajo de entrenamiento debe estar en el estado Running (En ejecución). En la pestaña Perfil de la instancia de Vertex AI TensorBoard, sigue estos pasos:

  1. Haz clic en Capturar perfil.
  2. En el campo URL(s) del servicio de perfil o nombre de TPU, introduce lo siguiente:

    workerpool0-0
    
  3. En Tipo de dirección, selecciona Dirección IP.

  4. Haz clic en Capturar.

Cuaderno

Siguientes pasos

  • Consulta la documentación de Tensorflow Profiler para obtener información sobre las herramientas de creación de perfiles y cómo usarlas para optimizar el rendimiento de los modelos.