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
Pour commencer à collecter les tenseurs de sortie du modèle et résoudre les problèmes d'entraînement, apportez les modifications suivantes à votre script d' TensorFlow entraînement.
Créez un point de contact pour les emplois de formation au sein de SageMaker
import smdebug.tensorflow as smd hook=smd.get_hook(hook_type="keras", create_if_not_exists=True)
Cela crée un crochet lorsque vous commencez un travail SageMaker de formation. Lorsque vous lancez une tâche de formation Lancez des tâches de formation avec Debugger à l'aide de Python SageMaker SDK avec l'DebuggerHookConfig
un des ou Rules
dans votre estimateur, vous ajoutez un SageMaker fichier de JSON configuration à votre instance de formation qui est sélectionné par la smd.get_hook
méthode. TensorBoardConfig
Notez que si vous n'incluez aucune configuration APIs dans votre estimateur, il n'y aura aucun fichier de configuration à trouver pour le hook et la fonction retournera. None
(Facultatif) Créez un crochet pour les emplois de formation à l'extérieur SageMaker
Si vous exécutez des tâches de formation en mode local, directement sur des instances SageMaker Notebook, EC2 des instances Amazon ou sur vos propres appareils locaux, utilisez smd.Hook
class pour créer un hook. Cependant, cette approche ne permet de stocker que les collections de tenseurs et de les utiliser 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 Le débogueur 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.
-
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 Lancez des tâches de formation avec Debugger à l'aide de Python SageMaker SDK. 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)
-
Enveloppez l'optimiseur avec la méthode
hook.wrap_optimizer()
.optimizer=tf.keras.optimizers.Adam(...) optimizer=hook.wrap_optimizer(optimizer)
-
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. Sinon, SageMaker 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 )
-
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 classemodel.fit()
Keras. Le hooksagemaker-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] )
-
TensorFlow 2.x fournit uniquement des variables de gradient symboliques qui ne donnent pas accès à leurs valeurs. Pour collecter des gradients, enveloppez
tf.GradientTape
avec la méthodehook.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'enroulement de la bande garantit que lahook.wrap_tape()
méthode utilisée pour définir les fonctions de l'objet de la bandepush_tape()
pop_tape()
gradient()
, telles que,,, configurera les rédacteurs de SageMaker Debugger et enregistrera les tenseurs fournis en entréegradient()
(variables entraînables et pertes) et en sortie (dégradés).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 une liste complète des actions APIs proposées par le sagemaker-debugger
hook pour construire des hooks et enregistrer des tenseurs, consultez Hook Methodssagemaker-debugger
Python.
Une fois que vous avez terminé d'adapter votre scénario d'entraînement, passez à Lancez des tâches de formation avec Debugger à l'aide de Python SageMaker SDK.