Configurer le hook de Debugger pour enregistrer les tenseurs - Amazon SageMaker

Configurer le hook de Debugger pour enregistrer les tenseurs

Les tenseurs sont des collections de données de paramètres mis à jour à partir de la passe en arrière et en avant de chaque itération d'entraînement. Debugger collecte les tenseurs de sortie pour analyser l'état d'une tâche d'entraînement. Les opérations d'API CollectionConfig et DebuggerHookConfig d'Amazon SageMaker Debugger fournissent des méthodes pour regrouper les tenseurs dans des collections et les enregistrer dans un compartiment S3 cible.

Note

Par défaut, pour toutes les tâches d'entraînement SageMaker, Debugger collecte les scalaires de sortie de perte et de précision des tâches d'entraînement toutes les 500 étapes, sans aucun paramètre propre à Debugger spécifié dans les estimateurs SageMaker. Debugger enregistre les données de sortie dans un compartiment S3 par défaut. Le format de l'URI du compartiment S3 par défaut est s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/debug-output/.

Lorsque vous créez un estimateur SageMaker, activez Debugger en spécifiant le paramètre de configuration du hook, debugger_hook_config. Les étapes suivantes incluent des exemples de configuration du paramètre debugger_hook_config à l'aide des opérations d'API CollectionConfig et DebuggerHookConfig pour extraire les tenseurs de vos tâches d'entraînement et les enregistrer. Si vous utilisez les conteneurs AWS pris en charge par Debugger pour ne pas modifier le script, vous pouvez simplement exécuter la tâche d'entraînement sans modifier votre script d'entraînement. Vous pouvez également utiliser Debugger pour les tâches d'entraînement exécutées dans n'importe quel autre conteneur AWS pris en charge par Debugger avec le mode script, en apportant le moins de modifications possibles à votre script d'entraînement.

Configurer les collections de tenseurs de Debugger à l'aide de l'opération d'API CollectionConfig

Utilisez l'opération d'API CollectionConfig pour configurer les collections de tenseurs. Debugger fournit des collections de tenseurs précréées qui couvrent une variété d'expressions régulières (regex) de paramètres si vous utilisez des cadres de deep learning et des algorithmes de machine learning pris en charge par Debugger. Comme indiqué dans l'exemple de code suivant, ajoutez les collections de tenseurs intégrées que vous souhaitez déboguer.

from sagemaker.debugger import CollectionConfig collection_configs=[ CollectionConfig(name="weights"), CollectionConfig(name="gradients") ]

Les collections précédentes configurent le hook de Debugger pour enregistrer les tenseurs toutes les 500 étapes en fonction de la valeur "save_interval" par défaut.

Pour obtenir la liste complète des collections intégrées de Debugger, veuillez consulter Debugger Built-in Collections.

Si vous souhaitez personnaliser les collections intégrées, par exemple en modifiant les intervalles de sauvegarde et l'expression régulière de tenseur, utilisez le modèle CollectionConfig suivant pour ajuster les paramètres.

from sagemaker.debugger import CollectionConfig collection_configs=[ CollectionConfig( name="tensor_collection", parameters={ "key_1": "value_1", "key_2": "value_2", ... "key_n": "value_n" } ) ]

Pour plus d'informations sur les clés de paramètres disponibles, consultez CollectionConfig dans Amazon SageMaker Python SDK. Par exemple, l'exemple de code suivant montre comment ajuster les intervalles de sauvegarde de la collection de tenseurs de « pertes » à différentes phases de l'entraînement : perte de sauvegarde toutes les 100 étapes de la phase d'entraînement et perte de validation toutes les 10 étapes de la phase de validation.

from sagemaker.debugger import CollectionConfig collection_configs=[ CollectionConfig( name="losses", parameters={ "train.save_interval": "100", "eval.save_interval": "10" } ) ]
Astuce

Cet objet de configuration de collection de tenseurs peut être utilisé pour les opérations d'API DebuggerHookConfig et Rule.

Configurer le hook de Debugger pour enregistrer les tenseurs

Utilisez la classe DebuggerHookConfig pour créer une classe debugger_hook_config à l'aide de l'objet collection_configs que vous avez créé à l'étape précédente.

from sagemaker.debugger import DebuggerHookConfig debugger_hook_config=DebuggerHookConfig( collection_configs=collection_configs )

Debugger enregistre les tenseurs de sortie d'entraînement du modèle dans le compartiment S3 par défaut. Le format de l'URI du compartiment S3 par défaut est s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/debug-output/.

Si vous souhaitez spécifier un URI de compartiment S3 précis, utilisez l'exemple de code suivant :

from sagemaker.debugger import DebuggerHookConfig debugger_hook_config=DebuggerHookConfig( s3_output_path="specify-your-s3-bucket-uri" collection_configs=collection_configs )

Pour de plus amples informations, veuillez consulter DebuggerHookConfig dans Amazon SageMaker Python SDK.

Exemples de blocs-notes et de code pour configurer le hook de Debugger

Les sections suivantes fournissent des exemples de blocs-notes et de code sur l'utilisation du hook de Debugger pour enregistrer, consulter et visualiser les tenseurs de sortie.

Exemples de blocs-notes de visualisation de tenseur

Les deux exemples de bloc-notes suivants montrent l'utilisation avancée d'Amazon SageMaker Debugger pour visualiser les tenseurs. Debugger offre une vue transparente de l'entraînement des modèles de deep learning.

  • Analyse interactive des tenseurs dans un bloc-notes SageMaker Studio avec MXNet

    Cet exemple de bloc-notes montre comment visualiser des tenseurs enregistrés à l'aide d'Amazon SageMaker Debugger. En visualisant les tenseurs, vous pouvez voir comment les valeurs du tenseur changent pendant l'entraînement des algorithmes de deep learning. Ce bloc-notes inclut une tâche d'entraînement avec un réseau de neurones mal configuré et vous utilisez Amazon SageMaker Debugger pour agréger et analyser les tenseurs, y compris les gradients, les sorties d'activation et les pondérations. Par exemple, le diagramme suivant montre la distribution des gradients d'une couche convolutive qui souffre d'un problème de disparition gradient.

    
                        Graphique montrant la distribution des gradients d'une couche convolutive souffrant d'un problème de disparition de gradient

    Ce bloc-notes montre également comment un bon réglage de l'hyperparamètre initial améliore le processus d'entraînement en générant les mêmes diagrammes de distribution du tenseur.

  • Visualisation et débogage des tenseurs à partir de l'entraînement d'un modèle MXNet

    Cet exemple de bloc-notes montre comment enregistrer et visualiser les tenseurs à partir d'une tâche d'entraînement du modèle MXNet Gluon à l'aide d'Amazon SageMaker Debugger. Il montre que Debugger est configuré pour enregistrer tous les tenseurs dans un compartiment Amazon S3 et pour récupérer les sorties d'activation ReLu pour la visualisation. La figure suivante montre une visualisation en trois dimensions des sorties d'activation ReLu. En termes de couleurs, le bleu est défini pour indiquer une valeur proche de 0 et le jaune pour indiquer des valeurs proches de 1.

    
                        Une visualisation des sorties d'activation ReLU

    Dans ce bloc-notes, la classe TensorPlot importée de tensor_plot.py est conçue pour tracer des réseaux de neurones convolutifs qui utilisent des images bidimensionnelles pour les entrées. Le script tensor_plot.py fourni avec le bloc-notes récupère les tenseurs en utilisant Debugger et visualise le réseau de neurones convolutif. Vous pouvez exécuter ce bloc-notes sur SageMaker Studio pour reproduire la visualisation du tenseur et y implémenter votre propre modèle de réseau neuronal convolutif.

  • Analyse des tenseurs en temps réel dans un bloc-notes SageMaker avec MxNet

    Cet exemple vous guide tout au long de l'installation des composants requis pour l'émission de tenseurs dans une tâche d'entraînement Amazon SageMaker et de l'utilisation des opérations d'API de Debugger pour accéder à ces tenseurs pendant l'exécution de l'entraînement. Un modèle de réseau de neurones convolutif gluon est entraîné sur le jeu de données Fashion MNIST. Pendant que la tâche est en cours d'exécution, vous verrez comment Debugger récupère les sorties d'activation de la première couche convolutive de chacun des 100 lots et comment il les visualise. Vous découvrirez également comment visualiser les pondérations une fois la tâche terminée.

Enregistrer les tenseurs à l'aide des collections du Debugger intégrées

Vous pouvez utiliser des collections intégrées de tenseurs à l'aide de la commande CollectionConfig et les enregistrer à l'aide de l'API DebuggerHookConfig. L'exemple suivant montre comment utiliser les paramètres par défaut des configurations du hook de Debugger pour créer un estimateur TensorFlow SageMaker. Vous pouvez également l'utiliser pour les estimateurs MxNet, PyTorch et XGBoost.

Note

Dans l'exemple de code suivant, le paramètre s3_output_path pour DebuggerHookConfig est facultatif. Si vous ne le spécifiez pas, Debugger enregistre les tenseurs danss3://<output_path>/debug-output/, où <output_path> est le chemin de sortie par défaut des tâches d'entraînement SageMaker. Par exemple :

"s3://sagemaker-us-east-1-111122223333/sagemaker-debugger-training-YYYY-MM-DD-HH-MM-SS-123/debug-output"
import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import DebuggerHookConfig, CollectionConfig # use Debugger CollectionConfig to call built-in collections collection_configs=[ CollectionConfig(name="weights"), CollectionConfig(name="gradients"), CollectionConfig(name="losses"), CollectionConfig(name="biases") ] # configure Debugger hook # set a target S3 bucket as you want sagemaker_session=sagemaker.Session() BUCKET_NAME=sagemaker_session.default_bucket() LOCATION_IN_BUCKET='debugger-built-in-collections-hook' hook_config=DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=collection_configs ) # construct a SageMaker TensorFlow estimator sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-demo-job', instance_count=1, instance_type="ml.m4.xlarge", framework_version="2.3.0", py_version="py37", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

Pour afficher la liste des collections intégrées de Debugger, consultez Debugger Built-in Collections.

Enregistrer les tenseurs à l'aide des collections intégrées modifiées de Debugger

Vous pouvez modifier les collections intégrées de Debugger à l'aide de l'opération d'API CollectionConfig. L'exemple suivant illustre comment peaufiner la collection losses intégrée et créer un estimateur TensorFlow SageMaker. Vous pouvez également l'utiliser pour les estimateurs MxNet, PyTorch et XGBoost.

import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import DebuggerHookConfig, CollectionConfig # use Debugger CollectionConfig to call and modify built-in collections collection_configs=[ CollectionConfig( name="losses", parameters={"save_interval": "50"})] # configure Debugger hook # set a target S3 bucket as you want sagemaker_session=sagemaker.Session() BUCKET_NAME=sagemaker_session.default_bucket() LOCATION_IN_BUCKET='debugger-modified-collections-hook' hook_config=DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=collection_configs ) # construct a SageMaker TensorFlow estimator sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-demo-job', instance_count=1, instance_type="ml.m4.xlarge", framework_version="2.3.0", py_version="py37", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

Pour obtenir la liste complète des paramètres CollectionConfig, consultez Debugger CollectionConfig API.

Enregistrer des tenseurs à l'aide de collections personnalisées de Debugger

Vous pouvez également enregistrer un nombre réduit de tenseurs au lieu de la totalité des tenseurs (par exemple, si vous souhaitez réduire la quantité de données enregistrées dans votre compartiment Amazon S3). L'exemple suivant montre comment personnaliser la configuration du hook de Debugger pour spécifier les tenseurs cible à enregistrer. Vous pouvez l'utiliser pour les estimateurs TensorFlow, MXNet, PyTorch et XGBoost.

import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import DebuggerHookConfig, CollectionConfig # use Debugger CollectionConfig to create a custom collection collection_configs=[ CollectionConfig( name="custom_activations_collection", parameters={ "include_regex": "relu|tanh", # Required "reductions": "mean,variance,max,abs_mean,abs_variance,abs_max" }) ] # configure Debugger hook # set a target S3 bucket as you want sagemaker_session=sagemaker.Session() BUCKET_NAME=sagemaker_session.default_bucket() LOCATION_IN_BUCKET='debugger-custom-collections-hook' hook_config=DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=collection_configs ) # construct a SageMaker TensorFlow estimator sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-demo-job', instance_count=1, instance_type="ml.m4.xlarge", framework_version="2.3.0", py_version="py37", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

Pour obtenir la liste complète des paramètres CollectionConfig, consultez Debugger CollectionConfig.