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 PyTorch 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' PyTorch entraînement.
Pour PyTorch 1.12.0
Si vous apportez un script d' PyTorch entraînement, vous pouvez exécuter la tâche d'entraînement et extraire les tenseurs de sortie du modèle à l'aide de quelques lignes de code supplémentaires dans votre script d'entraînement. Vous devez utiliser les API de hooksagemaker-debugger
. Suivez les instructions suivantes qui décomposent les étapes à l'aide d'exemples de code.
-
Créez un hook.
(Recommandé) Pour les emplois de formation au sein de SageMaker
import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True)
Lorsque vous lancez une tâche de formation Étape 2 : Lancer et déboguer des tâches de formation à l'aide SageMaker de Python SDK avec l'une des règles ou l' DebuggerHookConfigune des règles de votre estimateur, vous ajoutez SageMaker un fichier de configuration JSON à votre instance d'entraînement qui est récupéré par la
get_hook
fonction. TensorBoardConfig Notez que si vous n'incluez aucune des API de configuration dans votre estimateur, il n'y aura aucun fichier de configuration susceptible d'être trouvé par le hook, et la fonction renvoieNone
.(Facultatif) 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, des instances Amazon EC2 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 au Debugger ne fonctionnent pas avec le mode local car elles nécessitent des instances d'entraînement SageMaker ML et S3 pour stocker les sorties des instances distantes en temps réel. L'APIsmd.get_hook
renvoieNone
dans ce cas.Si vous souhaitez créer un hook manuel pour enregistrer les tenseurs en mode local, utilisez l'extrait de code suivant avec la logique permettant de vérifier si l'API
smd.get_hook
renvoieNone
et créez un hook manuel à l'aide de la classesmd.Hook
. Notez que vous pouvez spécifier n'importe quel répertoire de sortie sur votre machine locale.import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True) if hook is None: hook=smd.Hook( out_dir='
/path/to/your/local/output/
', export_tensorboard=True ) -
Enveloppez votre modèle avec les méthodes de classe du hook.
La méthode
hook.register_module()
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 Étape 2 : Lancer et déboguer des tâches de formation à l'aide SageMaker de Python SDK. Les tenseurs collectables via cette méthode de hook sont des poids, des biais, des activations, des gradients, des entrées et des sorties.hook.register_module(model)
Astuce
Si vous collectez l'intégralité des tenseurs de sortie à partir d'un grand modèle de deep learning, la taille totale de ces collections peut augmenter de façon exponentielle et provoquer des goulots d'étranglement. Si vous souhaitez enregistrer des tenseurs spécifiques, vous pouvez également utiliser la méthode
hook.save_tensor()
. Cette méthode vous permet de sélectionner la variable pour le tenseur spécifique et de l'enregistrer dans une collection personnalisée nommée comme vous le souhaitez. Pour plus d'informations, consultez l'étape 7 de cette instruction. -
Enveloppez la fonction de perte avec les méthodes de classe du hook.
La méthode
hook.register_loss
consiste à envelopper la fonction de perte. Elle extrait les valeurs de perte à chaque intervallesave_interval
que vous définirez lors de la configuration dans Étape 2 : Lancer et déboguer des tâches de formation à l'aide SageMaker de Python SDK, et les enregistre dans la collection"losses"
.hook.register_loss(loss_function)
-
Ajoutez
hook.set_mode(ModeKeys.TRAIN)
dans le bloc d'entraînement. Cela indique que la collection de tenseurs est extraite pendant la phase d'entraînement.def train(): ... hook.set_mode(ModeKeys.TRAIN)
-
Ajoutez
hook.set_mode(ModeKeys.EVAL)
dans le bloc de validation. Cela indique que la collection de tenseurs est extraite pendant la phase de validation.def validation(): ... hook.set_mode(ModeKeys.EVAL)
-
Utilisez
hook.save_scalar()
pour enregistrer des scalaires personnalisés. Vous pouvez enregistrer des valeurs scalaires qui ne figurent pas dans votre modèle. Par exemple, si vous souhaitez enregistrer les valeurs de précision calculées lors de l'évaluation, ajoutez la ligne de code suivante sous la ligne où vous calculez la précision. hook.save_scalar("accuracy", accuracy)
Notez que vous devez fournir une chaîne comme premier argument pour nommer la collection scalaire personnalisée. Il s'agit du nom qui sera utilisé pour visualiser les valeurs scalaires. Il peut s'agir de TensorBoard n'importe quelle chaîne de votre choix.
-
Utilisez
hook.save_tensor()
pour enregistrer des tenseurs personnalisés. Comme pour hook.save_scalar()
, vous pouvez enregistrer des tenseurs supplémentaires en définissant votre propre collection de tenseurs. Par exemple, vous pouvez extraire les données d'image d'entrée qui sont transmises au modèle et les enregistrer sous forme de tenseur personnalisé en ajoutant la ligne de code suivante, où "images"
est un exemple de nom de tenseur personnalisé etimage_inputs
est un exemple de variable pour les données d'image d'entrée.hook.save_tensor("images", image_inputs)
Notez que vous devez fournir une chaîne au premier argument pour nommer le tenseur personnalisé.
hook.save_tensor()
contient le troisième argumentcollections_to_write
pour spécifier la collection de tenseurs dans laquelle enregistrer le tenseur personnalisé. L’argument par défaut estcollections_to_write="default"
. Si vous ne spécifiez pas explicitement le troisième argument, le tenseur personnalisé est enregistré dans la collection de tenseurs"default"
.
Une fois que vous avez terminé d'adapter votre scénario d'entraînement, passez à Étape 2 : Lancer et déboguer des tâches de formation à l'aide SageMaker de Python SDK.