SDK para Python (Boto3) - Amazon SageMaker AI

SDK para Python (Boto3)

Las reglas integradas del depurador de Amazon SageMaker se pueden configurar para un trabajo de entrenamiento mediante la función create_training_job() del cliente Boto3 AWS de SageMaker AI. Debe especificar el URI de la imagen correcta en el parámetro RuleEvaluatorImage; los siguientes ejemplos explican cómo configurar el cuerpo de la solicitud de la función create_training_job().

El siguiente código muestra un ejemplo completo de cómo configurar el depurador para el cuerpo de la solicitud create_training_job() e iniciar un trabajo de entrenamiento en us-west-2, suponiendo que el script entry_point/train.py de entrenamiento se prepare con TensorFlow. Para encontrar un ejemplo de libreta completo, consulte Creación de perfiles del trabajo de entrenamiento de múltiples nodos y múltiples GPU de TensorFlow con el depurador de Amazon SageMaker (Boto3).

nota

Asegúrese de utilizar las imágenes del contenedor de Docker correctas. Para encontrar las imágenes del contenedor de machine learning de AWS, consulte las imágenes de contenedores del aprendizaje profundo disponibles. Para ver una lista completa de las imágenes de Docker disponibles para usar las reglas del depurador, consulte Imágenes de Docker para reglas del depurador.

import sagemaker, boto3 import datetime, tarfile # Start setting up a SageMaker session and a Boto3 SageMaker client session = sagemaker.Session() region = session.boto_region_name bucket = session.default_bucket() # Upload a training script to a default Amazon S3 bucket of the current SageMaker session source = 'source.tar.gz' project = 'debugger-boto3-test' tar = tarfile.open(source, 'w:gz') tar.add ('entry_point/train.py') # Specify the directory and name of your training script tar.close() s3 = boto3.client('s3') s3.upload_file(source, bucket, project+'/'+source) # Set up a Boto3 session client for SageMaker sm = boto3.Session(region_name=region).client("sagemaker") # Start a training job sm.create_training_job( TrainingJobName='debugger-boto3-'+datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S'), HyperParameters={ 'sagemaker_submit_directory': 's3://'+bucket+'/'+project+'/'+source, 'sagemaker_program': '/entry_point/train.py' # training scrip file location and name under the sagemaker_submit_directory }, 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 }, RoleArn='arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20201014T161125', OutputDataConfig={'S3OutputPath': 's3://'+bucket+'/'+project+'/output'}, ResourceConfig={ 'InstanceType': 'ml.p3.8xlarge', 'InstanceCount': 1, 'VolumeSizeInGB': 30 }, StoppingCondition={ 'MaxRuntimeInSeconds': 86400 }, DebugHookConfig={ 'S3OutputPath': 's3://'+bucket+'/'+project+'/debug-output', 'CollectionConfigurations': [ { 'CollectionName': 'losses', 'CollectionParameters' : { 'train.save_interval': '500', 'eval.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://'+bucket+'/'+project+'/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/' # Optional. Local path for profiling outputs } }, ProfilerRuleConfigurations=[ { 'RuleConfigurationName': 'ProfilerReport', 'RuleEvaluatorImage': '895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest', 'RuleParameters': {'rule_to_invoke': 'ProfilerReport'} } ] )

Configurar una regla del depurador para depurar los parámetros del modelo

En el siguiente ejemplo de código se muestra cómo configurar una regla VanishingGradient integrada mediante esta API de SageMaker.

Permitir que el depurador recopile los tensores de salida

Especifique la configuración del enlace del depurador de la siguiente manera:

DebugHookConfig={ 'S3OutputPath': 's3://<default-bucket>/<training-job-name>/debug-output', 'CollectionConfigurations': [ { 'CollectionName': 'gradients', 'CollectionParameters' : { 'train.save_interval': '500', 'eval.save_interval': '50' } } ] }

Esto hará que el trabajo de entrenamiento guarde una colección de tensores, gradients, cada save_interval de 500 pasos. Para encontrar los valores disponibles CollectionName, consulte las colecciones integradas del depurador en la documentación de la biblioteca cliente de SMDebug. Para encontrar las claves y valores de los parámetros CollectionParameters disponibles, consulte la clase sagemaker.debugger.CollectionConfig en la documentación del SageMaker Python SDK.

Activar las reglas del depurador para depurar los tensores de salida

El siguiente ejemplo de API DebugRuleConfigurations muestra cómo ejecutar la regla VanishingGradientintegrada en la colección gradients guardada.

DebugRuleConfigurations=[ { 'RuleConfigurationName': 'VanishingGradient', 'RuleEvaluatorImage': '895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest', 'RuleParameters': { 'rule_to_invoke': 'VanishingGradient', 'threshold': '20.0' } } ]

Con una configuración como la de este ejemplo, el depurador inicia un trabajo de evaluación de reglas para el trabajo de entrenamiento mediante la regla gradients de la colección de tensores VanishingGradient. Para ver una lista completa de las imágenes de Docker disponibles para usar las reglas del depurador, consulte Imágenes de Docker para reglas del depurador. Para encontrar los pares clave-valor de RuleParameters, consulte Lista de reglas integradas del depurador.

Configurar una regla integrada en el depurador para perfilar las métricas del sistema y del marco

El siguiente código de ejemplo muestra cómo especificar la operación de la API ProfilerConfig para permitir la recopilación de métricas del sistema y del marco.

Habilitar la creación de perfiles del depurador para recopilar métricas del sistema y del marco

Target Step
ProfilerConfig={ 'S3OutputPath': 's3://<default-bucket>/<training-job-name>/profiler-output', # Optional. Path to an S3 bucket to save profiling outputs # 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 }', 'PythonProfilingConfig': '{ "StartStep": 5, "NumSteps": 3, "ProfilerName": "cprofile", # Available options: cprofile, pyinstrument "cProfileTimer": "total_time" # Include only when using cprofile. Available options: cpu, off_cpu, total_time }', 'LocalPath': '/opt/ml/output/profiler/' # Optional. Local path for profiling outputs } }
Target Time Duration
ProfilerConfig={ 'S3OutputPath': 's3://<default-bucket>/<training-job-name>/profiler-output', # Optional. Path to an S3 bucket to save profiling outputs # 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 }', 'PythonProfilingConfig': '{ "StartTimeInSecSinceEpoch": 12345567789, "DurationInSeconds": 10, "ProfilerName": "cprofile", # Available options: cprofile, pyinstrument "cProfileTimer": "total_time" # Include only when using cprofile. Available options: cpu, off_cpu, total_time }', 'LocalPath': '/opt/ml/output/profiler/' # Optional. Local path for profiling outputs } }

Habilitar las reglas del depurador para perfilar las métricas

En el siguiente ejemplo de código se muestra cómo configurar la regla 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' } } ]

Para ver una lista completa de las imágenes de Docker disponibles para usar las reglas del depurador, consulte Imágenes de Docker para reglas del depurador. Para encontrar los pares clave-valor de RuleParameters, consulte Lista de reglas integradas del depurador.

Actualice la configuración de creación de perfiles del depurador mediante la operación de la API UpdateTrainingJob.

Es posible actualizar la configuración de los perfiles del depurador mientras se ejecuta el trabajo de entrenamiento mediante la función update_training_job() del cliente Boto3 AWS de SageMaker AI. Configure los nuevos objetos ProfilerConfig y ProfilerRuleConfiguration y especifique el nombre del trabajo de entrenamiento en el parámetro 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'

Agregue la configuración de reglas personalizadas del depurador a la operación de la API CreateTrainingJob

Es posible configurar una regla personalizada para un trabajo de entrenamiento mediante los objetos DebugHookConfig y DebugRuleConfiguration mediante la función create_training_job() del cliente Boto3 AWS de SageMaker AI. El siguiente ejemplo de código muestra cómo configurar una regla ImproperActivation personalizada escrita con la biblioteca smdebug mediante esta API de SageMaker. En este ejemplo se supone que ha escrito la regla personalizada en el archivo custom_rules.py y la ha cargado en un bucket de Amazon S3. El ejemplo proporciona imágenes de Docker prediseñadas que puede usar para ejecutar sus reglas personalizadas. Se enumeran en URI de imagen del depurador de Amazon SageMaker para evaluadores de reglas personalizadas. Especifique la dirección URL del registro para la imagen de Docker prediseñada en el parámetro 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' } } ]

Para ver una lista completa de las imágenes de Docker disponibles para usar las reglas del depurador, consulte Imágenes de Docker para reglas del depurador. Para encontrar los pares clave-valor de RuleParameters, consulte Lista de reglas integradas del depurador.