Rendimiento del entrenamiento de modelos de perfil con Cloud Profiler

En esta página, se muestra cómo habilitar Cloud Profiler para que puedas depurar el rendimiento del entrenamiento de modelos en los trabajos de entrenamiento personalizados.

Los modelos de entrenamiento pueden ser costosos en términos de procesamiento. Profiler te permite supervisar y optimizar el rendimiento del entrenamiento de modelos porque te ayuda a comprender el consumo de recursos de las operaciones de entrenamiento. Con esta información, puedes detectar y corregir los cuellos de botella de rendimiento a fin de entrenar los modelos más rápido y más económico.

Antes de comenzar

Habilita Profiler

Para habilitar el generador de perfiles para tu trabajo de entrenamiento, agrega lo siguiente a la secuencia de comandos de entrenamiento:

  1. Agrega la importación cloud_profiler en tus importaciones de nivel superior:

    from google.cloud.aiplatform.training_utils import cloud_profiler
    
  2. Agrega el siguiente comando para inicializar el complemento cloud_profiler:

    cloud_profiler.init()
    

Ejemplo

Aquí hay una secuencia de comandos de entrenamiento de muestra:

#!/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)

Accede al panel de Profiler

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

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

  • Establece BASE_OUTPUT_DIR: en el bucket de Cloud Storage en el que deseas almacenar los registros de TensorBoard de Vertex AI que genera tu secuencia de comandos de entrenamiento.
  • Configura 'serviceAccount': como la cuenta de servicio que creaste con los roles roles/storage.admin y roles/aiplatform.user.
  • Establece 'tensorboard': en el nombre completamente calificado de la instancia de Vertex AI TensorBoard que deseas usar con este trabajo de entrenamiento. El nombre completamente calificado tiene el siguiente formato:

    projects/PROJECT_NUMBER_OR_ID/locations/REGION/tensorboards/TENSORBOARD_INSTANCE_ID
    

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

  • En la página Trabajos personalizados, haz lo siguiente:
  • En la página Experimentos.

Accede al panel de Profiler a través de la página Trabajos personalizados

Puedes usar este método para acceder al panel de Profiler, incluso si el trabajo de entrenamiento está en el estado Finalizado.

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

    Ve a Trabajos personalizados

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

  3. Haz clic en Abrir TensorBoard.

  4. Haz clic en la pestaña Perfil.

Accede al panel de Profiler a través de la página Experimentos

Puedes usar este método para acceder al panel de Profiler solo cuando el trabajo de entrenamiento está en el estado En ejecución.

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

    Ir a Experimentos de IA de Vertex

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

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

  4. Haz clic en la pestaña Perfil.

Captura una sesión de perfilado

Para capturar una sesión de perfilado, el trabajo de entrenamiento debe estar en el estado En ejecución. Desde la pestaña Perfil en la instancia de TensorBoard de Vertex AI, sigue estos pasos:

  1. Haz clic en Capturar perfil.
  2. En el campo URL del servicio de perfil o nombre de TPU, ingresa:

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

  4. Haz clic en Capturar.

Notebook

¿Qué sigue?