

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 via 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 transmises à Amazon CloudWatch. Si vous utilisez votre propre Amazon Virtual Private Cloud (VPC) pour entraîner un modèle, vous pouvez l'utiliser AWS PrivateLink pour configurer un point de terminaison VPC pour SSM et vous connecter à des conteneurs en privé via SSM.

Vous pouvez vous connecter aux conteneurs [ SageMaker AI Framework ](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 des utilisateurs IAM autorisés à utiliser SSM.

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

Pour qu'un conteneur de SageMaker formation démarre avec 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 ModelTrainer classe 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 `enable_remote_debug()` and`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.

```
from sagemaker.core.helper.session_helper import Session
from sagemaker.train import ModelTrainer
from sagemaker.train.configs import Compute

session = Session()

model_trainer = ModelTrainer(
    ...,
    sagemaker_session=session,
    training_image="{{<your_image_uri>}}", #must be owned by your organization or Amazon DLCs 
    role={{role}},
    compute=Compute(
        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 ModelTrainer classe suivantes, vous pouvez activer ou désactiver le débogage à distance pendant qu'une tâche de formation est en cours d'exécution lorsque la `SecondaryStatus` fin de la tâche est `Downloading` ou`Training`.

```
# Enable RemoteDebug
model_trainer.enable_remote_debug()

# Disable RemoteDebug
model_trainer.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 l'état de votre tâche de formation à l'aide de l'`DescribeTrainingJob`API, comment vérifier les connexions des tâches de formation et comment se 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
from sagemaker.core.helper.session_helper import Session

session = 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 s'il s'agit `SecondaryStatus` d'une tâche d'entraînement, 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 AI 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ée 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 SageMaker l'IA gère les informations de configuration pour la formation distribuée multi-instances, consultez Configuration [ de la formation ](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training) distribuée.

**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é à Internet public, vous pouvez les utiliser AWS PrivateLink pour activer SSM. AWS PrivateLink limite 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 [ Configuration d'un point de terminaison Amazon VPC pour Session Manager. ](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-privatelink.html) 

## 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 des journaux de session dans un compartiment Amazon Simple Storage Service (Amazon S3) ou dans un groupe Amazon CloudWatch 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 les 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 les journaux d'erreurs de plusieurs agents SSM `training-job-test-remote-debug/algo-<n>-<timestamp>/ssm` sont 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 SageMaker AI.
+ 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) ou les conteneurs à partir de SageMaker l' AWS Marketplace IA.
+ 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.