Profiler les performances d'entraînement des modèles à l'aide de Cloud Profiler

Cette page explique comment activer Cloud Profiler afin de pouvoir déboguer les performances d'entraînement de modèle pour vos tâches d'entraînement personnalisé.

L'entraînement des modèles peut s'avérer coûteux en ressources de calcul. Profiler vous permet de surveiller et d'optimiser les performances d'entraînement de vos modèles en vous aidant à comprendre la consommation de ressources des opérations d'entraînement. Grâce à ces informations, vous pouvez identifier et corriger les goulots d'étranglement qui affectent vos performances afin d'entraîner les modèles plus rapidement et à moindre coût.

Avant de commencer

N'activez qu'un seul profileur

Pour activer Profiler pour votre tâche d'entraînement, ajoutez ce qui suit à votre script d'entraînement:

  1. Ajoutez l'importation cloud_profiler aux importations de premier niveau :

    from google.cloud.aiplatform.training_utils import cloud_profiler
    
  2. Initialisez le plug-in cloud_profiler en ajoutant :

    cloud_profiler.init()
    

Exemple

Voici un exemple de script d'entraînement :

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

Accéder au tableau de bord de Profiler

Une fois que vous avez configuré votre script d'entraînement pour activer Profiler, exécutez-le avec une instance Vertex AI TensorBoard.

Dans votre script d'entraînement, vérifiez les configurations suivantes :

  • Définissez BASE_OUTPUT_DIR: sur le bucket Cloud Storage dans lequel vous souhaitez stocker les journaux TensorBoard de Vertex AI générés par votre script d'entraînement.
  • Définissez 'serviceAccount': sur le compte de service que vous avez créé avec les rôles roles/storage.admin et roles/aiplatform.user.
  • Définissez 'tensorboard': sur le nom complet de l'instance TensorBoard Vertex AI que vous souhaitez utiliser avec ce job d'entraînement. Le nom complet est au format suivant :

    projects/PROJECT_NUMBER_OR_ID/locations/REGION/tensorboards/TENSORBOARD_INSTANCE_ID
    

Deux options s'offrent à vous pour accéder au tableau de bord de Profiler depuis la console Google Cloud:

  • Depuis la page "Tâches personnalisées".
  • Depuis la page "Tests".

Accéder au tableau de bord de Profiler via la page "Tâches personnalisées"

Vous pouvez employer cette méthode pour accéder au tableau de bord de Profiler, même si l'état du job d'entraînement est Terminé.

  1. Dans la console Google Cloud, accédez à l'onglet Tâches personnalisées de la page Entraînement.

    Accéder à la page Tâches personnalisées

  2. Cliquez sur le nom du job d'entraînement que vous venez de créer pour accéder à la page des détails.

  3. Cliquez sur Ouvrir TensorBoard.

  4. Cliquez sur l'onglet Profil.

Accéder au tableau de bord de Profiler via la page "Tests"

Vous pouvez employer cette méthode pour accéder au tableau de bord de Profiler uniquement lorsque l'état du job d'entraînement est En cours d'exécution.

  1. Dans la console Google Cloud, accédez à la page Vertex AI Experiments.

    Accéder à la page "Tests" de Vertex AI

  2. Sélectionnez la région du job d'entraînement que vous venez de créer.

  3. Cliquez sur Ouvrir TensorBoard à côté du nom du job d'entraînement.

  4. Cliquez sur l'onglet Profil.

Capturer une session de profilage

Pour capturer une session de profilage, l'état du job d'entraînement doit être En cours d'exécution. Dans l'onglet Profil de l'instance TensorBoard Vertex AI, procédez comme suit :

  1. Cliquez sur Enregistrer le profil.
  2. Dans le champ URL de service du profil ou nom du TPU, saisissez :

    workerpool0-0
    
  3. Pour Type d'adresse, sélectionnez Adresse IP.

  4. Cliquez sur Capture.

Notebook

Étape suivante