View a markdown version of this page

Adaptez votre script TensorFlow d'entraînement - Amazon SageMaker AI

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Adaptez votre script TensorFlow d'entraînement

Note

Amazon SageMaker Debugger n'est plus ouvert aux nouveaux clients. Les clients existants peuvent continuer à utiliser le service normalement. AWS continue d'investir dans l'amélioration de la sécurité et de la disponibilité de Debugger, mais nous ne prévoyons pas d'introduire de nouvelles fonctionnalités. Pour de plus amples informations, veuillez consulter Modification de la disponibilité du débogueur.

Pour commencer à collecter les tenseurs de sortie des modèles et résoudre les problèmes d'entraînement, apportez les modifications suivantes à votre script d' TensorFlow entraînement.

Créez un lien pour les emplois de formation dans le domaine de l' SageMaker IA

import smdebug.tensorflow as smd hook=smd.get_hook(hook_type="keras", create_if_not_exists=True)

Cela crée un accroc lorsque vous commencez un travail SageMaker de formation. Lorsque vous lancez une tâche de formation dans Lancer des tâches de formation avec Debugger à l'aide du SDK Python SageMaker l'un des DebuggerHookConfigTensorBoardConfig, ou Rules dans votre ModelTrainer, SageMaker AI ajoute un fichier de configuration JSON à votre instance de formation qui est récupéré par la smd.get_hook méthode. Notez que si vous n'incluez aucune des API de configuration dans votre ModelTrainer, il n'y aura aucun fichier de configuration que le hook pourra trouver, et la fonction retourneraNone.

(Facultatif) Créez un crochet pour les emplois de formation en dehors de l' SageMaker IA

Si vous exécutez des tâches de formation en mode local, directement sur des instances SageMaker Notebook, des instances Amazon EC2 ou sur vos propres appareils locaux, utilisez smd.Hook class pour créer un hook. Cependant, cette approche ne peut stocker que les collections de tenseurs et peut être utilisée pour la TensorBoard visualisation. SageMaker Les règles intégrées du débogueur ne fonctionnent pas avec le mode local. La méthode smd.get_hook renvoie également None dans ce cas.

Si vous souhaitez créer un hook manuel, utilisez l'extrait de code suivant avec la logique permettant de vérifier si le hook renvoie None, et créez un hook manuel à l'aide de la classe smd.Hook.

import smdebug.tensorflow as smd hook=smd.get_hook(hook_type="keras", create_if_not_exists=True) if hook is None: hook=smd.KerasHook( out_dir='/path/to/your/local/output/', export_tensorboard=True )

Après avoir ajouté le code de création du hook, passez à la rubrique suivante pour TensorFlow Keras.

Note

SageMaker Debugger ne prend actuellement en charge que TensorFlow Keras.

Enregistrez le hook dans votre script d'entraînement TensorFlow Keras

La procédure suivante explique comment utiliser le hook et ses méthodes pour collecter des scalaires et des tenseurs de sortie à partir de votre modèle et de votre optimiseur.

  1. Enveloppez votre modèle Keras et votre optimiseur avec les méthodes de classe du hook.

    La méthode hook.register_model() prend votre modèle et itère sur chaque couche, recherchant tous les tenseurs qui correspondent aux expressions régulières que vous fournirez via la configuration dans Lancer des tâches de formation avec Debugger à l'aide du SDK Python SageMaker. Les tenseurs collectables via cette méthode de hook sont des poids, des biais et des activations.

    model=tf.keras.Model(...) hook.register_model(model)
  2. Enveloppez l'optimiseur avec la méthode hook.wrap_optimizer().

    optimizer=tf.keras.optimizers.Adam(...) optimizer=hook.wrap_optimizer(optimizer)
  3. Compilez le modèle en mode rapide dans TensorFlow.

    Pour collecter des tenseurs à partir du modèle, tels que les tenseurs d'entrée et de sortie de chaque couche, vous devez exécuter l'entraînement en mode Eager. Dans le cas contraire, SageMaker AI Debugger ne sera pas en mesure de collecter les tenseurs. Cependant, d'autres tenseurs, tels que les poids, les biais et les pertes du modèle, peuvent être collectés sans exécuter explicitement le mode Eager.

    model.compile( loss="categorical_crossentropy", optimizer=optimizer, metrics=["accuracy"], # Required for collecting tensors of each layer run_eagerly=True )
  4. Enregistrez le hook avec la méthode tf.keras.Model.fit().

    Pour collecter les tenseurs des hooks que vous avez enregistrés, ajoutez callbacks=[hook] à la méthode de classe model.fit() Keras. Le hook sagemaker-debugger sera alors transmis en tant que rappel Keras.

    model.fit( X_train, Y_train, batch_size=batch_size, epochs=epoch, validation_data=(X_valid, Y_valid), shuffle=True, callbacks=[hook] )
  5. TensorFlow 2.x fournit uniquement des variables de gradient symboliques qui ne permettent pas d'accéder à leurs valeurs. Pour collecter des gradients, enveloppez tf.GradientTape avec la méthode hook.wrap_tape(), ce qui vous oblige à écrire votre propre étape d'entraînement comme suit.

    def training_step(model, dataset): with hook.wrap_tape(tf.GradientTape()) as tape: pred=model(data) loss_value=loss_fn(labels, pred) grads=tape.gradient(loss_value, model.trainable_variables) optimizer.apply_gradients(zip(grads, model.trainable_variables))

    En enveloppant la bande, le hook sagemaker-debugger peut identifier les tenseurs de sortie tels que les gradients, les paramètres et les pertes. L'encapsulation de la bande garantit que la hook.wrap_tape() méthode autour des fonctions de l'objet de la bandepush_tape(), telles que pop_tape()gradient(),,, configurera les rédacteurs de SageMaker Debugger et enregistrera les tenseurs fournis en entrée gradient() (variables entraînables et perte) et en sortie (gradients). gradient()

    Note

    Pour collecter avec une boucle d'entraînement personnalisée, assurez-vous d'utiliser le mode Eager. Sinon, SageMaker Debugger n'est pas en mesure de collecter des tenseurs.

Pour obtenir la liste complète des actions proposées par les API du hook sagemaker-debugger pour créer des hooks et enregistrer des tenseurs, consultez Méthodes de hook dans la documentation du SDK sagemaker-debugger Python (langue française non garantie).

Une fois que vous avez terminé d'adapter votre scénario d'entraînement, passez à Lancer des tâches de formation avec Debugger à l'aide du SDK Python SageMaker.