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
- Vérifiez que vous utilisez TensorFlow 2.4 ou une version ultérieure.
Installez le SDK Vertex AI avec le plug-in
cloud_profiler
. Depuis votre conteneur Docker local, exécutez :pip install google-cloud-aiplatform[cloud_profiler]
Vous devez disposer d'une instance TensorBoard Vertex AI. Pour obtenir des instructions, consultez la page Créer une instance TensorBoard Vertex AI.
Vous devez disposer d'un compte de service disposant des rôles
roles/storage.admin
etroles/aiplatform.user
. Consultez la section Créer un compte de service avec les autorisations requises pour obtenir des instructions.Vous devez disposer d'un bucket Cloud Storage pour stocker les journaux TensorBoard Vertex AI. Pour obtenir des instructions, consultez la page Créer un bucket Cloud Storage pour stocker les journaux TensorBoard Vertex AI.
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:
Ajoutez l'importation
cloud_profiler
aux importations de premier niveau :from google.cloud.aiplatform.training_utils import cloud_profiler
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ôlesroles/storage.admin
etroles/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é.
Dans la console Google Cloud, accédez à l'onglet Tâches personnalisées de la page Entraînement.
Cliquez sur le nom du job d'entraînement que vous venez de créer pour accéder à la page des détails.
Cliquez sur Ouvrir TensorBoard.
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.
Dans la console Google Cloud, accédez à la page Vertex AI Experiments.
Sélectionnez la région du job d'entraînement que vous venez de créer.
Cliquez sur Ouvrir TensorBoard à côté du nom du job d'entraînement.
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 :
- Cliquez sur Enregistrer le profil.
Dans le champ URL de service du profil ou nom du TPU, saisissez :
workerpool0-0
Pour Type d'adresse, sélectionnez Adresse IP.
Cliquez sur Capture.
Notebook
Étape suivante
- Consultez la documentation de TensorFlow Profiler pour en savoir plus sur les outils Profiler et sur leur utilisation afin d'optimiser les performances des modèles.