JSON (AWS CLI) - Amazon SageMaker

JSON (AWS CLI)

Les règles intégrées d'Amazon SageMaker Debugger peuvent être configurées pour une tâche d'entraînement à l'aide des objets DebugHookConfig, DebugRuleConfiguration, ProfilerConfig et ProfilerRuleConfiguration via l'opération d'API CreateTrainingJob SageMaker. Vous devez spécifier l'URI d'image approprié dans le paramètre RuleEvaluatorImage. Les exemples suivants vous expliquent comment configurer les chaînes JSON pour interroger CreateTrainingJob.

Le code suivant affiche un modèle JSON complet pour exécuter une tâche d'entraînement avec les paramètres requis et les configurations de Debugger. Enregistrez le modèle en tant que fichier JSON dans votre répertoire de travail et exécutez la tâche d'entraînement à l'aide de la CLI AWS. Par exemple, enregistrez le code suivant sous debugger-training-job-cli.json.

Note

Assurez-vous d'utiliser les images de conteneur Docker appropriées. Pour chercher des images de conteneurs AWS Deep Learning Containers, consultez Available Deep Learning Containers Images. Pour obtenir une liste complète des images Docker disponibles pour l'utilisation des règles Debugger, consultez Utiliser des images Docker Debugger pour des règles intégrées ou personnalisées.

{ "TrainingJobName": "debugger-aws-cli-test", "RoleArn": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-YYYYMMDDT123456", "AlgorithmSpecification": { // Specify a training Docker container image URI (Deep Learning Container or your own training container) to TrainingImage. "TrainingImage": "763104351884.dkr.ecr.us-west-2.amazonaws.com/tensorflow-training:2.4.1-gpu-py37-cu110-ubuntu18.04", "TrainingInputMode": "File", "EnableSageMakerMetricsTimeSeries": false }, "HyperParameters": { "sagemaker_program": "entry_point/tf-hvd-train.py", "sagemaker_submit_directory": "s3://sagemaker-us-west-2-111122223333/debugger-boto3-profiling-test/source.tar.gz" }, "OutputDataConfig": { "S3OutputPath": "s3://sagemaker-us-west-2-111122223333/debugger-aws-cli-test/output" }, "DebugHookConfig": { "S3OutputPath": "s3://sagemaker-us-west-2-111122223333/debugger-aws-cli-test/debug-output", "CollectionConfigurations": [ { "CollectionName": "losses", "CollectionParameters" : { "train.save_interval": "50" } } ] }, "DebugRuleConfigurations": [ { "RuleConfigurationName": "LossNotDecreasing", "RuleEvaluatorImage": "895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest", "RuleParameters": {"rule_to_invoke": "LossNotDecreasing"} } ], "ProfilerConfig": { "S3OutputPath": "s3://sagemaker-us-west-2-111122223333/debugger-aws-cli-test/profiler-output", "ProfilingIntervalInMilliseconds": 500, "ProfilingParameters": { "DataloaderProfilingConfig": "{\"StartStep\": 5, \"NumSteps\": 3, \"MetricsRegex\": \".*\", }", "DetailedProfilingConfig": "{\"StartStep\": 5, \"NumSteps\": 3, }", "PythonProfilingConfig": "{\"StartStep\": 5, \"NumSteps\": 3, \"ProfilerName\": \"cprofile\", \"cProfileTimer\": \"total_time\"}", "LocalPath": "/opt/ml/output/profiler/" } }, "ProfilerRuleConfigurations": [ { "RuleConfigurationName": "ProfilerReport", "RuleEvaluatorImage": "895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest", "RuleParameters": {"rule_to_invoke": "ProfilerReport"} } ], "ResourceConfig": { "InstanceType": "ml.p3.8xlarge", "InstanceCount": 1, "VolumeSizeInGB": 30 }, "StoppingCondition": { "MaxRuntimeInSeconds": 86400 } }

Après avoir enregistré le fichier JSON, exécutez la commande suivante dans votre terminal. (Utilisez ! au début de la ligne si vous utilisez un bloc-notes Jupyter.)

aws sagemaker create-training-job --cli-input-json file://debugger-training-job-cli.json

Pour configurer une règle Debugger pour le débogage des paramètres de modèle

Les exemples de code suivants montrent comment configurer une règle VanishingGradient intégrée à l'aide de cette API SageMaker.

Pour activer Debugger afin de collecter les tenseurs de sortie

Spécifiez la configuration du hook Debugger comme suit :

"DebugHookConfig": { "S3OutputPath": "s3://<default-bucket>/<training-job-name>/debug-output", "CollectionConfigurations": [ { "CollectionName": "gradients", "CollectionParameters" : { "save_interval": "500" } } ] }

Ainsi, la tâche d'entraînement enregistre la collection de tenseurs, gradients, chaque save_interval sur 500 étapes. Pour voir les valeurs CollectionName disponibles, consultez Debugger Built-in Collections dans la documentation relative à la bibliothèque client SMDebug. Pour voir les clés et valeurs de paramètre CollectionParameters, consultez la section sagemaker.debugger.CollectionConfig dans la documentation relative au kit SDK Python SageMaker.

Pour activer les règles Debugger pour le débogage des tenseurs de sortie

L'exemple d'API DebugRuleConfigurations suivant montre comment exécuter la règle VanishingGradient intégrée sur la collection gradients enregistrée.

"DebugRuleConfigurations": [ { "RuleConfigurationName": "VanishingGradient", "RuleEvaluatorImage": "503895931360.dkr.ecr.us-east-1.amazonaws.com/sagemaker-debugger-rules:latest", "RuleParameters": { "rule_to_invoke": "VanishingGradient", "threshold": "20.0" } } ]

Avec une configuration telle que celle de cet exemple, Debugger lance une tâche d'évaluation des règles pour votre tâche d'entraînement à l'aide de la règle VanishingGradient sur la collection de tenseurs gradients. Pour obtenir une liste complète des images Docker disponibles pour l'utilisation des règles Debugger, consultez Utiliser des images Docker Debugger pour des règles intégrées ou personnalisées. Pour voir les paires clé-valeur pour RuleParameters, consultez Liste des règles intégrées Debugger.

Pour configurer une règle intégrée Debugger pour le profilage des métriques système et de cadre

L'exemple de code suivant montre comment spécifier l'opération d'API ProfilerConfig pour activer la collecte des métriques système et de cadre.

Pour activer le profilage Debugger pour collecter les métriques système et de cadre

Target Step
"ProfilerConfig": { // Optional. Path to an S3 bucket to save profiling outputs "S3OutputPath": "s3://<default-bucket>/<training-job-name>/profiler-output", // Available values for ProfilingIntervalInMilliseconds: 100, 200, 500, 1000 (1 second), 5000 (5 seconds), and 60000 (1 minute) milliseconds. "ProfilingIntervalInMilliseconds": 500, "ProfilingParameters": { "DataloaderProfilingConfig": "{ \"StartStep\": 5, \"NumSteps\": 3, \"MetricsRegex\": \".*\" }", "DetailedProfilingConfig": "{ \"StartStep\": 5, \"NumSteps\": 3 }", // For PythonProfilingConfig, // available ProfilerName options: cProfile, Pyinstrument // available cProfileTimer options only when using cProfile: cpu, off_cpu, total_time "PythonProfilingConfig": "{ \"StartStep\": 5, \"NumSteps\": 3, \"ProfilerName\": \"cProfile\", \"cProfileTimer\": \"total_time\" }", // Optional. Local path for profiling outputs "LocalPath": "/opt/ml/output/profiler/" } }
Target Time Duration
"ProfilerConfig": { // Optional. Path to an S3 bucket to save profiling outputs "S3OutputPath": "s3://<default-bucket>/<training-job-name>/profiler-output", // Available values for ProfilingIntervalInMilliseconds: 100, 200, 500, 1000 (1 second), 5000 (5 seconds), and 60000 (1 minute) milliseconds. "ProfilingIntervalInMilliseconds": 500, "ProfilingParameters": { "DataloaderProfilingConfig": "{ \"StartTimeInSecSinceEpoch\": 12345567789, \"DurationInSeconds\": 10, \"MetricsRegex\": \".*\" }", "DetailedProfilingConfig": "{ \"StartTimeInSecSinceEpoch\": 12345567789, \"DurationInSeconds\": 10 }", // For PythonProfilingConfig, // available ProfilerName options: cProfile, Pyinstrument // available cProfileTimer options only when using cProfile: cpu, off_cpu, total_time "PythonProfilingConfig": "{ \"StartTimeInSecSinceEpoch\": 12345567789, \"DurationInSeconds\": 10, \"ProfilerName\": \"cProfile\", \"cProfileTimer\": \"total_time\" }", // Optional. Local path for profiling outputs "LocalPath": "/opt/ml/output/profiler/" } }

Pour activer les règles Debugger pour le profilage des métriques

L'exemple de code suivant montre comment configurer la règle ProfilerReport.

"ProfilerRuleConfigurations": [ { "RuleConfigurationName": "ProfilerReport", "RuleEvaluatorImage": "895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest", "RuleParameters": { "rule_to_invoke": "ProfilerReport", "CPUBottleneck_cpu_threshold": "90", "IOBottleneck_threshold": "90" } } ]

Pour obtenir une liste complète des images Docker disponibles pour l'utilisation des règles Debugger, consultez Utiliser des images Docker Debugger pour des règles intégrées ou personnalisées. Pour voir les paires clé-valeur pour RuleParameters, consultez Liste des règles intégrées Debugger.

Mettre à jour la configuration du profilage Debugger à l'aide de l'opération d'API UpdateTrainingJob

La configuration du profilage Debugger peut être mise à jour pendant que votre tâche d'entraînement est en cours d'exécution à l'aide de l'opération d'API UpdateTrainingJob. Configurez de nouveaux objets ProfilerConfig et ProfilerRuleConfiguration, et spécifiez le nom de la tâche d'entraînement au paramètre TrainingJobName.

{ "ProfilerConfig": { "DisableProfiler": boolean, "ProfilingIntervalInMilliseconds": number, "ProfilingParameters": { "string" : "string" } }, "ProfilerRuleConfigurations": [ { "RuleConfigurationName": "string", "RuleEvaluatorImage": "string", "RuleParameters": { "string" : "string" } } ], "TrainingJobName": "your-training-job-name-YYYY-MM-DD-HH-MM-SS-SSS" }

Ajouter une configuration de règle personnalisée Debugger à l'opération d'API CreateTrainingJob

Une règle personnalisée peut être configurée pour une tâche d'entraînement à l'aide des objets DebugHookConfig et DébugUleConfiguration dans l'opération d'API CreateTrainingJob. L'exemple de code suivant décrit comment configurer une règle ImproperActivation personnalisée écrite avec la bibliothèque smdebug à l'aide de cette opération d'API SageMaker. Cet exemple suppose que vous avez écrit la règle personnalisée dans le fichier custom_rules.py et que vous l'avez chargée dans un compartiment Amazon S3. L'exemple fournit des images Docker préconçues que vous pouvez utiliser pour exécuter vos règles personnalisées. Celles-ci sont énumérées sur la page URL de registre Amazon SageMaker Debugger pour les évaluateurs de règles personnalisées. Vous spécifiez l'adresse de registre d'URL pour l'image Docker préconçue dans le paramètre RuleEvaluatorImage.

"DebugHookConfig": { "S3OutputPath": "s3://<default-bucket>/<training-job-name>/debug-output", "CollectionConfigurations": [ { "CollectionName": "relu_activations", "CollectionParameters": { "include_regex": "relu", "save_interval": "500", "end_step": "5000" } } ] }, "DebugRulesConfigurations": [ { "RuleConfigurationName": "improper_activation_job", "RuleEvaluatorImage": "552407032007.dkr.ecr.ap-south-1.amazonaws.com/sagemaker-debugger-rule-evaluator:latest", "InstanceType": "ml.c4.xlarge", "VolumeSizeInGB": 400, "RuleParameters": { "source_s3_uri": "s3://bucket/custom_rules.py", "rule_to_invoke": "ImproperActivation", "collection_names": "relu_activations" } } ]

Pour obtenir une liste complète des images Docker disponibles pour l'utilisation des règles Debugger, consultez Utiliser des images Docker Debugger pour des règles intégrées ou personnalisées. Pour voir les paires clé-valeur pour RuleParameters, consultez Liste des règles intégrées Debugger.