

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Acceda a un contenedor de capacitación AWS Systems Manager para la depuración remota
<a name="train-remote-debugging"></a>

Puedes conectarte de forma segura a los contenedores de SageMaker formación 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 puedes 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 utilizarla para configurar un punto final de VPC para SSM y conectarse AWS PrivateLink a los contenedores de forma privada a través de SSM.

Puede conectarse a [SageMaker AI Framework Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) o conectarse a su propio contenedor de entrenamiento configurado con el entorno de entrenamiento. SageMaker 

## Configurar permisos de IAM
<a name="train-remote-debugging-iam"></a>

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

### rol de IAM
<a name="train-remote-debugging-iam-role"></a>

Para que un contenedor de SageMaker formación comience con el agente de SSM, proporciona un rol de IAM con permisos de SSM.

Para habilitar la depuración remota para su trabajo de formación, la SageMaker IA debe iniciar el [agente SSM](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) en el contenedor de formación cuando comience el trabajo de formación. 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
<a name="train-remote-debugging-iam-user"></a>

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 objetivo del SSM es un SageMaker contenedor de formación.

------
#### [ 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](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsagemaker.html#amazonsagemaker-policy-keys) en la *Referencia AWS de autorización de servicio*.

## ¿Cómo habilitar la depuración remota para un trabajo de SageMaker formación
<a name="train-remote-debugging-how-to-use"></a>

En esta sección, aprenda a habilitar la depuración remota al iniciar o actualizar un trabajo de formación en Amazon SageMaker AI.

------
#### [ SageMaker Python SDK ]

Con la clase estimator del SDK de SageMaker Python, puedes activar o desactivar la depuración remota mediante el `enable_remote_debug` parámetro o los `enable_remote_debug()` métodos and. `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
<a name="train-remote-debugging-access-container"></a>

Puede acceder a un contenedor de entrenamiento cuando el `SecondaryStatus` del trabajo de entrenamiento correspondiente es `Training`. Los siguientes ejemplos de código muestran cómo comprobar el estado de tu trabajo de formación mediante la `DescribeTrainingJob` API, cómo comprobar los registros del trabajo de formación y cómo iniciar sesión en el contenedor de formación. CloudWatch

**Comprobación del estado de un trabajo de entrenamiento**

------
#### [ SageMaker Python SDK ]

Para comprobar la calidad `SecondaryStatus` de un trabajo de formación, ejecuta el siguiente código del SDK de SageMaker Python.

```
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 si se `SecondaryStatus` trata de un trabajo de formación, ejecuta el siguiente AWS CLI comando para la SageMaker IA.

```
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 formación distribuido en varias instancias, la SageMaker IA crea el mismo número de hosts y flujos de registro. Por ejemplo, si utilizas 4 instancias, la SageMaker IA 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. Abre la consola Amazon SageMaker AI en [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

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

1. 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.

1. En la sección **Supervisión**, elija **Ver registros**. La lista de registros de trabajos de formación relacionados se abre en la CloudWatch consola.

1. 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 cómo la SageMaker IA gestiona la información de configuración para la formación distribuida en varias instancias, consulte [Configuración de formación distribuida](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training).

**Acceso al contenedor de entrenamiento**

Utilice el siguiente comando en el terminal para iniciar la sesión de SSM (`[aws ssm start-session](https://docs.aws.amazon.com/cli/latest/reference/ssm/start-session.html)`) 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.

### Acceda a SSM con AWS PrivateLink
<a name="train-remote-debugging-access-container-vpc"></a>

Si sus contenedores de formación se ejecutan en una Amazon Virtual Private Cloud que no está conectada a la Internet pública, puede utilizarlos AWS PrivateLink para habilitar SSM. AWS PrivateLink restringe todo el tráfico de red entre sus instancias de punto final, SSM y Amazon EC2 a la red de Amazon. Para obtener más información sobre cómo configurar el acceso SSM con AWS PrivateLink, consulte [Configurar un punto de conexión de Amazon VPC para](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-privatelink.html) Session Manager. 

## Registro de los comandos y los resultados de la sesión de SSM
<a name="train-remote-debugging-log-ssm"></a>

Tras seguir las instrucciones de [Creación de un documento de preferencias de Session Manager (línea de comandos)](https://docs.aws.amazon.com/systems-manager/latest/userguide/getting-started-create-preferences-cli.html), 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 los datos del registro de sesión en un bucket de Amazon Simple Storage Service (Amazon S3) o en un grupo de CloudWatch Amazon Logs. Puede crear  documentos que definan las preferencias generales para todas las sesiones de una AWS cuenta o documentos que definan las preferencias de las sesiones individuales. Región de AWS

## Solución de problemas consultando los registros de errores del SSM
<a name="train-remote-debugging-checking-ssm-agent-logs"></a>

Amazon SageMaker AI carga los errores del agente SSM a los CloudWatch registros del grupo de `/aws/sagemaker/TrainingJobs` registros. 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 formación de dos nodos denominado`training-job-test-remote-debug`, el registro del trabajo de formación `training-job-test-remote-debug/algo-<n>-<timestamp>` y varios registros de errores del agente SSM `training-job-test-remote-debug/algo-<n>-<timestamp>/ssm` se cargan en sus registros. 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
<a name="train-remote-debugging-considerations"></a>

Ten en cuenta lo siguiente cuando utilices la depuración remota mediante SageMaker IA.
+ La depuración remota no es compatible con los contenedores de [algoritmos de SageMaker IA ni con los contenedores](https://docs.aws.amazon.com/sagemaker/latest/dg/algorithms-choose.html) a partir de SageMaker IA. 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.