

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Accédez à un conteneur de formation AWS Systems Manager pour le débogage à distance
<a name="train-remote-debugging"></a>

Vous pouvez vous connecter en toute sécurité aux conteneurs de SageMaker formation via AWS Systems Manager (SSM). Cela vous donne un accès au niveau du shell pour déboguer les tâches d’entraînement exécutés dans le conteneur. Vous pouvez également enregistrer les commandes et les réponses qui sont diffusées sur Amazon CloudWatch. Si vous utilisez votre propre Amazon Virtual Private Cloud (VPC) pour entraîner un modèle, vous pouvez l'utiliser pour configurer un point de terminaison VPC AWS PrivateLink pour SSM et vous connecter à des conteneurs en privé via SSM.

Vous pouvez vous connecter à [SageMaker AI Framework Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) ou vous connecter à votre propre conteneur de formation configuré avec l'environnement de SageMaker formation. 

## Définir des autorisations IAM
<a name="train-remote-debugging-iam"></a>

Pour activer SSM dans votre conteneur de SageMaker formation, vous devez configurer un rôle IAM pour le conteneur. Pour que vous ou les utilisateurs de votre AWS compte puissiez accéder aux conteneurs de formation via SSM, vous devez configurer les utilisateurs IAM autorisés à utiliser SSM.

### Rôle IAM
<a name="train-remote-debugging-iam-role"></a>

Pour qu'un conteneur de SageMaker formation commence par l'agent SSM, fournissez un rôle IAM avec des autorisations SSM.

Pour activer le débogage à distance pour votre tâche de formation, l' SageMaker IA doit démarrer l'[agent SSM](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) dans le conteneur de formation au début de la tâche de formation. Pour permettre à l’agent SSM de communiquer avec le service SSM, ajoutez la politique suivante au rôle IAM que vous utilisez pour exécuter votre tâche d’entraînement. 

------
#### [ JSON ]

****  

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

------

### Utilisateur IAM
<a name="train-remote-debugging-iam-user"></a>

Ajoutez la politique suivante pour autoriser un utilisateur IAM à se connecter à une cible SSM lors d’une session SSM. Dans ce cas, la cible SSM est un conteneur d' SageMaker entraînement.

------
#### [ JSON ]

****  

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

------

 Vous pouvez restreindre les utilisateurs IAM de se connecter uniquement à des conteneurs pour des tâches d’entraînement spécifiques en ajoutant la `Condition` clé, comme indiqué dans l’exemple de stratégie suivant. 

------
#### [ 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:*"
                    ]
                }
            } 
        }
    ]
}
```

------

Vous pouvez également utiliser explicitement la clé de condition `sagemaker:EnableRemoteDebug` pour restreindre le débogage à distance. Voici un exemple de stratégie pour les utilisateurs IAM pour restreindre le débogage à distance.

------
#### [ JSON ]

****  

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

------

Pour plus d'informations, consultez la section [Clés de condition pour Amazon SageMaker AI](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsagemaker.html#amazonsagemaker-policy-keys) dans la *référence d'autorisation de AWS service*.

## Comment activer le débogage à distance pour une tâche de SageMaker formation
<a name="train-remote-debugging-how-to-use"></a>

Dans cette section, découvrez comment activer le débogage à distance lors du démarrage ou de la mise à jour d'une tâche de formation dans Amazon SageMaker AI.

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

À l'aide de la classe estimator du SDK SageMaker Python, vous pouvez activer ou désactiver le débogage à distance à l'aide du `enable_remote_debug` paramètre ou des méthodes et. `enable_remote_debug()` `disable_remote_debug()`

**Pour activer le débogage à distance lorsque vous créez une tâche d’entraînement**

Pour activer le débogage à distance lorsque vous créez une nouvelle tâche d’entraînement, définissez le `enable_remote_debug` paramètre sur `True`. La valeur par défaut est `False`, donc si vous ne définissez pas ce paramètre du tout, ou si vous le définissez explicitement sur`False`, la fonctionnalité de débogage à distance est désactivée.

```
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
)
```

**Pour activer le débogage à distance en mettant à jour une tâche d’entraînement**

À l’aide des méthodes de classe d’estimateur suivantes, vous pouvez activer ou désactiver le débogage à distance pendant qu’une tâche d’entraînement est en cours d’exécution lorsque le `SecondaryStatus` de la tâche est `Downloading` ou `Training`.

```
# Enable RemoteDebug
estimator.enable_remote_debug()

# Disable RemoteDebug
estimator.disable_remote_debug()
```

------
#### [ AWS SDK pour Python (Boto3) ]

**Pour activer le débogage à distance lorsque vous créez une tâche d’entraînement**

Pour activer le débogage à distance lorsque vous créez une nouvelle tâche d’entraînement, définissez la valeur de la clé `EnableRemoteDebug` sur `True` dans le paramètre `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
    }
)
```

**Pour activer le débogage à distance en mettant à jour une tâche d’entraînement**

À l’aide de l’API `update_traing_job`, vous pouvez activer ou désactiver le débogage à distance pendant qu’une tâche d’entraînement est en cours d’exécution, lorsque le `SecondaryStatus` de la tâche est `Downloading` ou `Training`.

```
# Update a training job
sm.update_training_job(
    TrainingJobName=job_name,
    RemoteDebugConfig={
        "EnableRemoteDebug": True     # True | False
    }
)
```

------
#### [ AWS Command Line Interface (CLI) ]

**Pour activer le débogage à distance lorsque vous créez une tâche d’entraînement**

Préparez un fichier de requête `CreateTrainingJob` au format JSON, comme suit.

```
// 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
    }
}
```

Après avoir enregistré le fichier JSON, exécutez la commande suivante dans le terminal ou vous soumettez la tâche d’entraînement. L’exemple de commande suivant suppose que le fichier JSON est nommé `train-with-remote-debug.json`. Si vous l’exécutez depuis un bloc-notes Jupyter, ajoutez un point d’exclamation (`!`) au début de la ligne.

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

**Pour activer le débogage à distance en mettant à jour une tâche d’entraînement**

Préparez un fichier de `UpdateTrainingJob` requête au format JSON, comme suit.

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

Après avoir enregistré le fichier JSON, exécutez la commande suivante dans le terminal ou vous soumettez la tâche d’entraînement. L’exemple de commande suivant suppose que le fichier JSON est nommé `train-with-remote-debug.json`. Si vous l’exécutez depuis un bloc-notes Jupyter, ajoutez un point d’exclamation (`!`) au début de la ligne.

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

------

## Accédez à votre conteneur d’entraînement
<a name="train-remote-debugging-access-container"></a>

Vous pouvez accéder à un conteneur d’entraînement lorsque le `SecondaryStatus` de la tâche d’entraînement correspondante est `Training`. Les exemples de code suivants montrent comment vérifier le statut de votre tâche de formation à l'aide de l'`DescribeTrainingJob`API, comment vérifier les connexions de la tâche de formation et comment vous connecter au conteneur de formation. CloudWatch

**Pour vérifier le statut d’une tâche d’entraînement**

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

Pour vérifier l'état `SecondaryStatus` d'une tâche de formation, exécutez le code du SDK SageMaker Python suivant.

```
import sagemaker

session = sagemaker.Session()

# Describe the job status
training_job_info = session.describe_training_job(job_name)
print(training_job_info)
```

------
#### [ AWS SDK pour Python (Boto3) ]

Pour vérifier le `SecondaryStatus` d’une tâche d’entraînement, exécutez le code du kit SDK Python (Boto3) suivant.

```
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) ]

Pour vérifier l'`SecondaryStatus`état d'une tâche de formation, exécutez la AWS CLI commande suivante pour SageMaker AI.

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

------

**Pour trouver le nom d’hôte d’un conteneur d’entraînement**

Pour vous connecter au conteneur d’entraînement via SSM, utilisez ce format pour l’ID cible : `sagemaker-training-job:<training-job-name>_algo-<n>`, où `algo-<n>` est le nom de l’hôte du conteneur. Si votre tâche s’exécute sur une seule instance, l’hôte l’est toujours `algo-1`. Si vous exécutez une tâche de formation distribuée sur plusieurs instances, l' SageMaker IA crée un nombre égal d'hôtes et de flux de journaux. Par exemple, si vous utilisez 4 instances, SageMaker l'IA crée `algo-1``algo-2`,`algo-3`, et`algo-4`. Vous devez déterminer le flux de journal que vous souhaitez déboguer, ainsi que son numéro d’hôte. Pour accéder aux flux de journaux associés à une tâche d’entraînement, procédez comme suit.

1. Ouvrez la console Amazon SageMaker AI à l'adresse [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Dans le panneau de navigation gauche, choisissez **Entraînement**, puis **Tâches d’entraînement**.

1. Dans la liste **Tâches d’entraînement**, sélectionnez la tâche d’entraînement que vous souhaitez déboguer. La page de détails de la tâche d’entraînement s’ouvre.

1. Dans la section **Moniteur**, choisissez **Afficher des journaux**. La liste des flux du journal des tâches de formation associées s'ouvre dans la CloudWatch console.

1. Les noms des flux de journaux apparaissent au format `<training-job-name>/algo-<n>-<time-stamp>`, `algo-<n>` représentant le nom d’hôte. 

Pour en savoir plus sur la façon dont l' SageMaker IA gère les informations de configuration pour la formation distribuée multi-instances, consultez la section [Configuration de la formation distribuée](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training).

**Pour accéder au conteneur d’entraînement**

Utilisez la commande suivante dans le terminal pour démarrer la session SSM (`[aws ssm start-session](https://docs.aws.amazon.com/cli/latest/reference/ssm/start-session.html)`) et vous connecter au conteneur d’entraînement. 

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

Par exemple, si le nom de la tâche d’entraînement est `training-job-test-remote-debug` et le nom d’hôte est `algo-1`, l’ID cible devient `sagemaker-training-job:training-job-test-remote-debug_algo-1`. Si la sortie de cette commande est similaire à `Starting session with SessionId:xxxxx`, la connexion est réussie.

### Accès SSM avec AWS PrivateLink
<a name="train-remote-debugging-access-container-vpc"></a>

Si vos conteneurs de formation s'exécutent dans un Amazon Virtual Private Cloud qui n'est pas connecté à l'Internet public, vous pouvez les utiliser AWS PrivateLink pour activer le SSM. AWS PrivateLink restreint tout le trafic réseau entre vos instances de point de terminaison, SSM et Amazon EC2 vers le réseau Amazon. Pour plus d'informations sur la configuration de l'accès SSM avec AWS PrivateLink, consultez [Configurer un point de terminaison Amazon VPC pour](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-privatelink.html) Session Manager. 

## Journalisation des commandes et des résultats des sessions SSM
<a name="train-remote-debugging-log-ssm"></a>

Après avoir suivi les instructions de la [Créer un document de préférences du Gestionnaire de session (ligne de commande)](https://docs.aws.amazon.com/systems-manager/latest/userguide/getting-started-create-preferences-cli.html), vous pouvez créer des documents SSM qui définissent vos préférences pour les sessions SSM. Vous pouvez utiliser les documents SSM pour configurer les options de session, incluant le chiffrement des données, la durée de session et la journalisation. Par exemple, vous pouvez spécifier si vous souhaitez stocker les données du journal de session dans un bucket Amazon Simple Storage Service (Amazon S3) ou dans un groupe CloudWatch Amazon Logs. Vous pouvez créer des  documents qui définissent les préférences générales pour toutes les sessions d'un AWS compte Région AWS et/ou des documents qui définissent les préférences pour des sessions individuelles.

## Résolution des problèmes en vérifiant les journaux d’erreurs de SSM
<a name="train-remote-debugging-checking-ssm-agent-logs"></a>

Amazon SageMaker AI télécharge les erreurs de l'agent SSM vers vos CloudWatch journaux dans le groupe de `/aws/sagemaker/TrainingJobs` journaux. Les flux de journaux de l’agent SSM sont nommés dans ce format : `<job-name>/algo-<n>-<timestamp>/ssm`. Par exemple, si vous créez une tâche de formation à deux nœuds nommée`training-job-test-remote-debug`, le journal des tâches de formation `training-job-test-remote-debug/algo-<n>-<timestamp>` et plusieurs journaux d'erreurs de l'agent SSM `training-job-test-remote-debug/algo-<n>-<timestamp>/ssm` sont téléchargés dans vos CloudWatch journaux. Dans cet exemple, vous pouvez vérifier les flux de journaux `*/ssm` pour résoudre les problèmes liés au 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
```

## Considérations
<a name="train-remote-debugging-considerations"></a>

Tenez compte des points suivants lorsque vous utilisez le débogage à distance par SageMaker IA.
+ Le débogage à distance n'est pas pris en charge pour les [conteneurs d'algorithmes d'SageMaker IA](https://docs.aws.amazon.com/sagemaker/latest/dg/algorithms-choose.html) ni pour les conteneurs créés à partir de SageMaker AI. AWS Marketplace
+ Vous ne pouvez pas démarrer une session SSM pour les conteneurs sur lesquels l’isolement du réseau est activé, car cet isolement empêche les appels réseau sortants.