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.
Note
SageMaker Le débogueur ne peut pas collecter les tenseurs de sortie du modèle à partir des opérations de l'API torch.nn.functional
torch.nn
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 le hook APIssagemaker-debugger
cliente. 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 l' SageMaker IA
import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True)
Lorsque vous lancez une tâche de formation Lancez des tâches de formation avec Debugger à l'aide du SDK Python SageMaker avec l'une des règles ou l' DebuggerHookConfigune des règles de votre estimateur, SageMaker AI ajoute 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 configuration APIs dans votre estimateur, il n'y aura aucun fichier de configuration à trouver pour le hook et la fonction retournera.None
(Facultatif) 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, 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 car elles nécessitent des instances d'entraînement SageMaker AI 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 Lancez 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, 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 Lancez des tâches de formation avec Debugger à l'aide du SDK Python SageMaker , 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 à Lancez des tâches de formation avec Debugger à l'aide du SDK Python SageMaker .