Acceso a un contenedor de entrenamiento a través de AWS Systems Manager para depuración remota - Amazon SageMaker AI

Acceso a un contenedor de entrenamiento a través de AWS Systems Manager para depuración remota

Puede conectarse de manera segura a los contenedores de entrenamiento de SageMaker a través de AWS Systems Manager (SSM). Esto le proporciona un acceso en el intérprete de comandos para depurar los trabajos de entrenamiento que se ejecutan dentro del contenedor. También puede registrar los comandos y las respuestas que se transmiten a Amazon CloudWatch. Si utiliza su propia Amazon Virtual Private Cloud (VPC) para entrenar un modelo, puede utilizar AWS PrivateLink para configurar un punto de conexión de VPC para SSM y conectarse a los contenedores de manera privada a través de SSM.

Puede conectarse a Contenedores de marco de SageMaker AI o a su propio contenedor de entrenamiento configurado con el entorno de entrenamiento de SageMaker.

Configurar permisos de IAM

Para habilitar SSM en su contenedor de entrenamiento de SageMaker, debe configurar un rol de IAM para el contenedor. Para que los usuarios de su cuenta de AWS o usted puedan acceder a los contenedores de entrenamiento a través de SSM, debe configurar los usuarios de IAM con permisos para usar SSM.

rol de IAM

Para que un contenedor de entrenamiento de SageMaker empiece con el agente de SSM, proporcione un rol de IAM con permisos de SSM.

Para habilitar la depuración remota para su trabajo de entrenamiento, SageMaker AI debe iniciar el agente de SSM en el contenedor de entrenamiento cuando comience el trabajo de entrenamiento. Para permitir que el agente de SSM se comunique con el servicio de SSM, agregue la siguiente política al rol de IAM que utiliza para ejecutar su trabajo de entrenamiento.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }

Usuario de IAM

Agregue la siguiente política para proporcionar permisos de sesión de SSM a un usuario de IAM para conectarse a un destino de SSM. En este caso, el destino de SSM es un contenedor de entrenamiento de SageMaker.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession", "ssm:TerminateSession" ], "Resource": "*" } ] }

Para restringir que los usuarios de IAM se conecten únicamente a contenedores para trabajos de entrenamiento específicos, agregue la clave Condition, como se muestra en el siguiente ejemplo de política.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession", "ssm:TerminateSession" ], "Resource": [ "*" ], "Condition": { "StringLike": { "ssm:resourceTag/aws:ssmmessages:target-id": [ "sagemaker-training-job:*" ] } } } ] }

También puede usar de manera explícita la clave de condición sagemaker:EnableRemoteDebug para restringir la depuración remota. A continuación, se muestra un ejemplo de política que restringe la depuración remota a los usuarios de IAM.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyRemoteDebugInTrainingJob", "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:UpdateTrainingJob" ], "Resource": "*", "Condition": { "BoolIfExists": { "sagemaker:EnableRemoteDebug": false } } } ] }

Para obtener más información, consulte Claves de condición de Amazon SageMaker AI en la Referencia de autorizaciones de servicio de AWS.

Habilitación de la depuración remota para un trabajo de entrenamiento de SageMaker

En esta sección, obtenga información sobre cómo habilitar la depuración remota al iniciar o actualizar un trabajo de entrenamiento en Amazon SageMaker AI.

SageMaker Python SDK

Con la clase estimator del SageMaker Python SDK, puede activar o desactivar la depuración remota mediante el parámetro enable_remote_debug o los métodos enable_remote_debug() y disable_remote_debug().

Habilitación de la depuración remota al crear un trabajo de entrenamiento

Para habilitar la depuración remota al crear un nuevo trabajo de entrenamiento, establezca el parámetro enable_remote_debug en True. El valor predeterminado es False, por lo que si no establece este parámetro en absoluto, o lo establece explícitamente en False, la funcionalidad de depuración remota estará deshabilitada.

import sagemaker session = sagemaker.Session() estimator = sagemaker.estimator.Estimator( ..., sagemaker_session=session, image_uri="<your_image_uri>", #must be owned by your organization or Amazon DLCs role=role, instance_type="ml.m5.xlarge", instance_count=1, output_path=output_path, max_run=1800, enable_remote_debug=True )

Habilitación de la depuración remota mediante la actualización de un trabajo de entrenamiento

Con los siguientes métodos de clase estimator, puede habilitar o deshabilitar la depuración remota mientras se ejecuta un trabajo de entrenamiento cuando el valor de SecondaryStatus del trabajo es Downloading o Training.

# Enable RemoteDebug estimator.enable_remote_debug() # Disable RemoteDebug estimator.disable_remote_debug()
AWS SDK para Python (Boto3)

Habilitación de la depuración remota al crear un trabajo de entrenamiento

Para habilitar la depuración remota al crear un nuevo trabajo de entrenamiento, establezca el valor de la clave EnableRemoteDebug en True en el parámetro RemoteDebugConfig.

import boto3 sm = boto3.Session(region_name=region).client("sagemaker") # Start a training job sm.create_training_job( ..., TrainingJobName=job_name, AlgorithmSpecification={ // Specify a training Docker container image URI // (Deep Learning Container or your own training container) to TrainingImage. "TrainingImage": "<your_image_uri>", "TrainingInputMode": "File" }, RoleArn=iam_role_arn, OutputDataConfig=output_path, ResourceConfig={ "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "VolumeSizeInGB": 30 }, StoppingCondition={ "MaxRuntimeInSeconds": 86400 }, RemoteDebugConfig={ "EnableRemoteDebug": True } )

Habilitación de la depuración remota mediante la actualización de un trabajo de entrenamiento

Con la API update_traing_job, puede habilitar o deshabilitar la depuración remota mientras se ejecuta un trabajo de entrenamiento cuando el SecondaryStatus del trabajo es Downloading o Training.

# Update a training job sm.update_training_job( TrainingJobName=job_name, RemoteDebugConfig={ "EnableRemoteDebug": True # True | False } )
AWS Command Line Interface (CLI)

Habilitación de la depuración remota al crear un trabajo de entrenamiento

Prepare un archivo de solicitud CreateTrainingJob en formato JSON, de la siguiente manera.

// train-with-remote-debug.json { "TrainingJobName": job_name, "RoleArn": iam_role_arn, "AlgorithmSpecification": { // Specify a training Docker container image URI (Deep Learning Container or your own training container) to TrainingImage. "TrainingImage": "<your_image_uri>", "TrainingInputMode": "File" }, "OutputDataConfig": { "S3OutputPath": output_path }, "ResourceConfig": { "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "VolumeSizeInGB": 30 }, "StoppingCondition": { "MaxRuntimeInSeconds": 86400 }, "RemoteDebugConfig": { "EnableRemoteDebug": True } }

Después de guardar el archivo JSON, ejecute el siguiente comando en el terminal en el que envía el trabajo de entrenamiento. En el siguiente comando de ejemplo se presupone que el nombre del archivo JSON es train-with-remote-debug.json. Si lo ejecuta desde un cuaderno de Jupyter, agregue un signo de exclamación (!) al comienzo de la línea.

aws sagemaker create-training-job \ --cli-input-json file://train-with-remote-debug.json

Habilitación de la depuración remota mediante la actualización de un trabajo de entrenamiento

Prepare un archivo de solicitud UpdateTrainingJob en formato JSON, de la siguiente manera.

// update-training-job-with-remote-debug-config.json { "TrainingJobName": job_name, "RemoteDebugConfig": { "EnableRemoteDebug": True } }

Después de guardar el archivo JSON, ejecute el siguiente comando en el terminal en el que envía el trabajo de entrenamiento. En el siguiente comando de ejemplo se presupone que el nombre del archivo JSON es train-with-remote-debug.json. Si lo ejecuta desde un cuaderno de Jupyter, agregue un signo de exclamación (!) al comienzo de la línea.

aws sagemaker update-training-job \ --cli-input-json file://update-training-job-with-remote-debug-config.json

Acceso a su contenedor de entrenamiento

Puede acceder a un contenedor de entrenamiento cuando el SecondaryStatus del trabajo de entrenamiento correspondiente es Training. En los siguientes ejemplos de código se muestra cómo comprobar el estado de su trabajo de entrenamiento mediante la API de DescribeTrainingJob, cómo verificar los registros de trabajos de entrenamiento en CloudWatch y cómo iniciar sesión en el contenedor de entrenamiento.

Comprobación del estado de un trabajo de entrenamiento

SageMaker Python SDK

Para comprobar el SecondaryStatus de un trabajo de entrenamiento, ejecute el siguiente código del SageMaker Python SDK.

import sagemaker session = sagemaker.Session() # Describe the job status training_job_info = session.describe_training_job(job_name) print(training_job_info)
AWS SDK para Python (Boto3)

Para comprobar el SecondaryStatus de un trabajo de entrenamiento, ejecute el siguiente código del SDK para Python (Boto3).

import boto3 session = boto3.session.Session() region = session.region_name sm = boto3.Session(region_name=region).client("sagemaker") # Describe the job status sm.describe_training_job(TrainingJobName=job_name)
AWS Command Line Interface (CLI)

Para comprobar el SecondaryStatus de un trabajo de entrenamiento, ejecute el siguiente comando AWS CLI para SageMaker AI.

aws sagemaker describe-training-job \ --training-job-name job_name

Para buscar el nombre del host de un contenedor de entrenamiento

Para conectarse al contenedor de entrenamiento a través de SSM, utilice este formato para el ID de destino: sagemaker-training-job:<training-job-name>_algo-<n>, donde algo-<n> es el nombre del host del contenedor. Si su trabajo se ejecuta en una sola instancia, el host siempre es algo-1. Si ejecuta un trabajo de entrenamiento distribuido en varias instancias, SageMaker AI crea el mismo número de hosts y flujos de registro. Por ejemplo, si usa 4 instancias, SageMaker AI crea algo-1, algo-2, algo-3 y algo-4. Debe determinar qué flujo de registro desea depurar y su número de host. Para acceder a los flujos de registro asociados a un trabajo de entrenamiento, haga lo siguiente:

  1. Abra la consola de Amazon SageMaker AI en https://console.aws.amazon.com/sagemaker/.

  2. En el panel de navegación izquierdo, elija Entrenamiento y, a continuación, Trabajos de entrenamiento.

  3. En la lista Trabajos de entrenamiento, elija el trabajo de entrenamiento que desee depurar. Se abrirá la página de detalles del trabajo de entrenamiento.

  4. En la sección Supervisión, elija Ver registros. Se abrirá la lista de flujos de registro de trabajo de entrenamiento relacionada en la consola de CloudWatch.

  5. Los nombres de los flujos de registro tienen el formato <training-job-name>/algo-<n>-<time-stamp>, donde algo-<n> representa el nombre del host.

Para obtener más información sobre la manera en que SageMaker AI administra la información de configuración para el entrenamiento distribuido de varias instancias, consulte Configuración de entrenamiento distribuido.

Acceso al contenedor de entrenamiento

Utilice el siguiente comando en el terminal para iniciar la sesión de SSM (aws ssm start-session) y conectarse al contenedor de entrenamiento.

aws ssm start-session --target sagemaker-training-job:<training-job-name>_algo-<n>

Por ejemplo, si el nombre del trabajo de entrenamiento es training-job-test-remote-debug y el nombre del host es algo-1, el ID de destino pasa a ser sagemaker-training-job:training-job-test-remote-debug_algo-1. Si la salida de este comando es similar a Starting session with SessionId:xxxxx, la conexión se ha realizado correctamente.

Acceso de SSM con AWS PrivateLink

Si sus contenedores de entrenamiento se ejecutan en una Amazon Virtual Private Cloud que no está conectada a la Internet pública, puede utilizar AWS PrivateLink para habilitar SSM. AWS PrivateLink restringe todo el tráfico de red entre las instancias de punto de conexión, SSM y Amazon EC2 a la red de Amazon. Para obtener más información sobre cómo configurar el acceso de SSM con AWS PrivateLink, consulte la configuración de un punto de conexión de la VPC para Session Manager.

Registro de los comandos y los resultados de la sesión de SSM

Tras seguir las instrucciones de Creación de un documento de preferencias de Session Manager (línea de comandos), puede crear documentos de SSM que definan sus preferencias para las sesiones de SSM. Puede utilizar los documentos de SSM para configurar las opciones de sesión, incluidos el cifrado de datos, la duración de la sesión y el registro. Por ejemplo, puede especificar si desea almacenar datos de registro de sesión en un bucket de Amazon Simple Storage Service (Amazon S3) o en un grupo de Registros de Amazon CloudWatch. Puede crear documentos que definan las preferencias generales para todas las sesiones de una cuenta de AWS y Región de AWS, o documentos que definan las preferencias para las sesiones individuales.

Solución de problemas consultando los registros de errores del SSM

Amazon SageMaker AI carga los errores del agente de SSM en los registros de CloudWatch del grupo de registro de /aws/sagemaker/TrainingJobs. A los flujos de registro del agente de SSM se les asignan nombres con el formato <job-name>/algo-<n>-<timestamp>/ssm. Por ejemplo, si crea un trabajo de entrenamiento de dos nodos denominado training-job-test-remote-debug, el registro del trabajo de entrenamiento training-job-test-remote-debug/algo-<n>-<timestamp> y varios registros de errores del agente de SSM training-job-test-remote-debug/algo-<n>-<timestamp>/ssm se cargan en los registros de CloudWatch. En este ejemplo, puede revisar los flujos de registro de */ssm para solucionar problemas de SSM.

training-job-test-remote-debug/algo-1-1680535238 training-job-test-remote-debug/algo-2-1680535238 training-job-test-remote-debug/algo-1-1680535238/ssm training-job-test-remote-debug/algo-2-1680535238/ssm

Consideraciones

Tenga en cuenta lo siguiente a la hora de utilizar la depuración remota de SageMaker AI.

  • La depuración remota no se admite con los contenedores de algoritmos de SageMaker AI ni con los contenedores de SageMaker AI en AWS Marketplace.

  • No puede iniciar una sesión de SSM para los contenedores que tengan habilitado el aislamiento de red porque el aislamiento impide las llamadas de red salientes.