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.
Adaptation de votre script d'entraînement PyTorch
Pour commencer à collecter les tenseurs de sortie du modèle et déboguer les problèmes d'entraînement, apportez les modifications suivantes à votre script d'entraînement PyTorch.
Pour PyTorch 1.12.0
Si vous apportez un script d'entraînement PyTorch, vous pouvez exécuter la tâche d'entraînement et extraire les tenseurs de sortie du modèle avec 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 tâches d'entraînement dans SageMaker
import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True)
Lorsque vous lancez une tâche d'entraînement dans Étape 2 : lancer et déboguer des tâches d'entraînement à l'aide du kit SDK Python SageMaker avec l'un des éléments DebuggerHookConfig, TensorBoardConfig ou Rules dans votre estimateur, SageMaker ajoute un fichier de configuration JSON à votre instance d'entraînement qui est récupéré par la fonction
get_hook
. 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 tâches d'entraînement en dehors de SageMaker
Si vous exécutez des tâches d'entraînement en mode local, directement sur des instances de bloc-notes SageMaker, des instances Amazon EC2 ou vos propres appareils locaux, utilisez la classe
smd.Hook
pour créer un hook. Toutefois, cette approche peut stocker uniquement les collections de tenseurs utilisables pour la visualisation de TensorBoard. Les règles intégrées de SageMaker Debugger ne fonctionnent pas avec le mode local car elles nécessitent des instances d'entraînement ML SageMaker 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 d'entraînement à l'aide du kit 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 Étape 2 : lancer et déboguer des tâches d'entraînement à l'aide du kit 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 dans TensorBoard et il peut s'agir de 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é. La valeur 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 d'entraînement à l'aide du kit SDK Python SageMaker.