

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Accedi a un contenitore di formazione tramite AWS Systems Manager il debug remoto
<a name="train-remote-debugging"></a>

Puoi connetterti in modo sicuro ai contenitori di SageMaker formazione tramite AWS Systems Manager (SSM). Ciò offre un accesso a livello di shell per eseguire il debug dei job di addestramento in esecuzione all’interno del container. Puoi anche registrare comandi e risposte che vengono trasmessi in streaming ad Amazon CloudWatch. Se usi il tuo Amazon Virtual Private Cloud (VPC) per addestrare un modello, puoi usarlo per configurare un endpoint VPC AWS PrivateLink per SSM e connetterti ai container privatamente tramite SSM.

Puoi connetterti a [SageMaker AI Framework Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) o connetterti al tuo contenitore di formazione configurato con l'ambiente di formazione. SageMaker 

## Impostare autorizzazioni IAM
<a name="train-remote-debugging-iam"></a>

Per abilitare SSM nel tuo contenitore di SageMaker formazione, devi impostare un ruolo IAM per il contenitore. Per consentire a te o agli utenti del tuo AWS account di accedere ai contenitori di formazione tramite SSM, devi configurare gli utenti IAM con le autorizzazioni per utilizzare SSM.

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

Affinché un contenitore di SageMaker formazione inizi con l'agente SSM, fornisci un ruolo IAM con autorizzazioni SSM.

Per abilitare il debug remoto per il tuo lavoro di formazione, l' SageMaker intelligenza artificiale deve avviare l'[agente SSM](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) nel contenitore di formazione all'inizio del processo di formazione. Per consentire all’agente SSM di comunicare con il servizio SSM, aggiungi la seguente policy al ruolo IAM che utilizzi per eseguire il job di addestramento. 

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

****  

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

------

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

Aggiungi la seguente policy per fornire a un utente IAM le autorizzazioni di sessione SSM per connettersi a una destinazione SSM. In questo caso, l'obiettivo SSM è un contenitore di formazione. SageMaker 

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

****  

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

------

 È possibile limitare gli utenti IAM a connettersi solo ai container per specifici job di addestramento aggiungendo la chiave `Condition`, come mostrato nel seguente esempio di policy. 

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

------

È anche possibile utilizzare in modo esplicito la chiave di condizione `sagemaker:EnableRemoteDebug` per limitare il debug remoto. Di seguito è riportato un esempio di policy che limita il debug remoto per gli utenti IAM.

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

****  

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

------

Per ulteriori informazioni, consulta [Condition keys for Amazon SageMaker AI](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsagemaker.html#amazonsagemaker-policy-keys) nel *AWS Service Authorization Reference*.

## Come abilitare il debug remoto per un lavoro di formazione SageMaker
<a name="train-remote-debugging-how-to-use"></a>

In questa sezione, scopri come abilitare il debug remoto all'avvio o all'aggiornamento di un processo di formazione in Amazon AI. SageMaker 

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

Utilizzando la classe estimator nell'SDK SageMaker Python, puoi attivare o disattivare il debug remoto utilizzando `enable_remote_debug` il parametro o i metodi and. `enable_remote_debug()` `disable_remote_debug()`

**Per abilitare il debug remoto durante la creazione di un job di addestramento**

Per abilitare il debug remoto durante la creazione di un nuovo job di addestramento, imposta il parametro `enable_remote_debug` su `True`. Il valore predefinito è `False`, quindi se non imposti questo parametro o lo imposti esplicitamente su `False`, la funzionalità di debug remoto è disabilitata.

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

**Per abilitare il debug remoto aggiornando un job di addestramento**

Utilizzando i seguenti metodi della classe dello strumento di stima, è possibile abilitare o disabilitare il debug remoto mentre un job di addestramento è in esecuzione quando l’attributo `SecondaryStatus` del job è `Downloading` o `Training`.

```
# Enable RemoteDebug
estimator.enable_remote_debug()

# Disable RemoteDebug
estimator.disable_remote_debug()
```

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

**Per abilitare il debug remoto durante la creazione di un job di addestramento**

Per abilitare il debug remoto durante la creazione di un nuovo job di addestramento, imposta il valore della chiave `EnableRemoteDebug` su `True` nel parametro `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
    }
)
```

**Per abilitare il debug remoto aggiornando un job di addestramento**

Utilizzando l’API `update_traing_job`, è possibile abilitare o disabilitare il debug remoto mentre un job di addestramento è in esecuzione quando l’attributo `SecondaryStatus` del job è `Downloading` o `Training`.

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

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

**Per abilitare il debug remoto durante la creazione di un job di addestramento**

Prepara un file di richiesta `CreateTrainingJob` in formato JSON come segue.

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

Dopo aver salvato il file JSON, esegui il comando seguente nel terminale in cui inviare il job di addestramento. Il comando di esempio seguente presuppone che il file JSON sia denominato `train-with-remote-debug.json`. Se lo esegui da un notebook Jupyter, aggiungi un punto esclamativo (`!`) all’inizio della riga.

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

**Per abilitare il debug remoto aggiornando un job di addestramento**

Prepara un file di richiesta `UpdateTrainingJob` in formato JSON come segue.

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

Dopo aver salvato il file JSON, esegui il comando seguente nel terminale in cui inviare il job di addestramento. Il comando di esempio seguente presuppone che il file JSON sia denominato `train-with-remote-debug.json`. Se lo esegui da un notebook Jupyter, aggiungi un punto esclamativo (`!`) all’inizio della riga.

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

------

## Accedere a un container di addestramento
<a name="train-remote-debugging-access-container"></a>

È possibile accedere a un container di addestramento quando l’attributo `SecondaryStatus` del job di addestramento è `Training`. I seguenti esempi di codice mostrano come controllare lo stato del processo di formazione utilizzando l'`DescribeTrainingJob`API, come controllare gli accessi del processo di formazione e come accedere al CloudWatch contenitore di formazione.

**Per controllare lo stato di un job di addestramento**

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

Per verificare il funzionamento `SecondaryStatus` di un processo di formazione, esegui il seguente codice 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 per Python (Boto3) ]

Per controllare l’attributo `SecondaryStatus` di un job di addestramento, esegui il seguente codice SDK per 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) ]

Per verificare la qualità `SecondaryStatus` di un processo di formazione, esegui il seguente AWS CLI comando per SageMaker AI.

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

------

**Per trovare il nome host di un container di addestramento**

Per connetterti al container di addestramento tramite SSM, utilizza questo formato per l’ID di destinazione: `sagemaker-training-job:<training-job-name>_algo-<n>`, dove `algo-<n>` è il nome dell’host del container. Se il job è in esecuzione su una singola istanza, l’host è sempre `algo-1`. Se esegui un processo di formazione distribuito su più istanze, l' SageMaker IA crea un numero uguale di host e flussi di log. Ad esempio, se utilizzi 4 istanze, l' SageMaker IA crea, `algo-1``algo-2`, `algo-3` e. `algo-4` È necessario determinare il flusso di log di cui eseguire il debug e il relativo numero di host. Per accedere ai flussi di log associati a un job di addestramento, procedi come segue.

1. Apri la console Amazon SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Nel riquadro di navigazione, scegli **Addestramento**, quindi **Processi di addestramento**.

1. Nell’elenco **Processi di addestramento** seleziona il job di addestramento di cui eseguire il debug. Viene visualizzata la pagina dei dettagli del job di addestramento.

1. Nella sezione **Monitoraggio** scegli **Vedi registri**. L'elenco dei relativi registri dei lavori di formazione si apre nella CloudWatch console.

1. I nomi dei flussi di log vengono visualizzati in formato `<training-job-name>/algo-<n>-<time-stamp>`, dove `algo-<n>` rappresenta il nome host. 

Per ulteriori informazioni su come l' SageMaker IA gestisce le informazioni di configurazione per la formazione distribuita a più istanze, consulta [Distributed Training Configuration](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training).

**Per accedere al container di addestramento**

Utilizza il seguente comando nel terminale per avviare la sessione SSM (`[aws ssm start-session](https://docs.aws.amazon.com/cli/latest/reference/ssm/start-session.html)`) e connetterti al container di addestramento. 

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

Ad esempio, se il nome del job di addestramento è `training-job-test-remote-debug` e il nome host è `algo-1`, l’ID di destinazione diventa `sagemaker-training-job:training-job-test-remote-debug_algo-1`. Se l’output di questo comando è simile a `Starting session with SessionId:xxxxx`, la connessione ha esito positivo.

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

Se i tuoi contenitori di formazione vengono eseguiti all'interno di un Amazon Virtual Private Cloud che non è connesso a Internet pubblico, puoi utilizzarli AWS PrivateLink per abilitare SSM. AWS PrivateLink limita tutto il traffico di rete tra le istanze di endpoint, SSM e Amazon EC2 alla rete Amazon. Per ulteriori informazioni su come configurare l'accesso SSM con AWS PrivateLink, consulta [Configurare un endpoint Amazon VPC](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-privatelink.html) per Session Manager. 

## Registra log di comandi e risultati di una sessione SSM
<a name="train-remote-debugging-log-ssm"></a>

Dopo aver seguito le istruzioni riportate in [Creare un documento di preferenze di Session Manager (riga di comando)](https://docs.aws.amazon.com/systems-manager/latest/userguide/getting-started-create-preferences-cli.html), è possibile creare documenti SSM che definiscono le preferenze per le sessioni SSM. È possibile utilizzare i documenti SSM per configurare le opzioni della sessione, tra cui la crittografia dei dati, la durata della sessione e la registrazione di log. Ad esempio, puoi specificare se archiviare i dati dei log di sessione in un bucket Amazon Simple Storage Service (Amazon S3) o in un gruppo Amazon Logs. CloudWatch Puoi creare  documenti che definiscono le preferenze generali per tutte le sessioni per un AWS account o documenti che definiscono le preferenze per le singole sessioni. Regione AWS

## Risoluzione dei problemi controllando i log degli errori da SSM
<a name="train-remote-debugging-checking-ssm-agent-logs"></a>

Amazon SageMaker AI carica gli errori dall'agente SSM nei tuoi CloudWatch log nel gruppo di log. `/aws/sagemaker/TrainingJobs` I flussi di log dell’agente SSM sono denominati in questo formato: `<job-name>/algo-<n>-<timestamp>/ssm`. Ad esempio, se crei un processo di formazione a due nodi denominato`training-job-test-remote-debug`, il registro del processo di formazione `training-job-test-remote-debug/algo-<n>-<timestamp>` e i log degli errori di più agenti SSM vengono caricati nei tuoi log. `training-job-test-remote-debug/algo-<n>-<timestamp>/ssm` CloudWatch In questo esempio è possibile esaminare i flussi di log `*/ssm` per risolvere i problemi con 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
```

## Considerazioni
<a name="train-remote-debugging-considerations"></a>

Considera quanto segue quando usi SageMaker il debug remoto AI.
+ Il debug remoto non è supportato per i contenitori di [algoritmi AI o per i contenitori di SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/algorithms-choose.html) in poi. SageMaker Marketplace AWS
+ Non è possibile avviare una sessione SSM per container con isolamento di rete abilitato, perché l’isolamento impedisce le chiamate di rete in uscita.