

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 per 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 i comandi e le risposte trasmessi in streaming ad Amazon. CloudWatch Se utilizzi il tuo Amazon Virtual Private Cloud (VPC) per addestrare un modello, puoi utilizzarlo AWS PrivateLink per configurare un endpoint VPC per SSM e connetterti ai contenitori 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. Affinché tu o gli utenti del tuo AWS account possiate accedere ai contenitori di formazione tramite SSM, devi configurare gli utenti IAM con le autorizzazioni per l'uso di 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 processo di formazione, l' SageMaker IA 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 le chiavi di [ condizione per 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 SageMaker lavoro di formazione
<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 lavoro di formazione in Amazon AI. SageMaker 

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

Utilizzando la ModelTrainer classe nell'SDK SageMaker Python, puoi attivare o disattivare il debug remoto utilizzando il parametro o i `enable_remote_debug` 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.

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

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

Utilizzando i seguenti metodi di ModelTrainer classe, è possibile abilitare o disabilitare il debug remoto mentre un processo di formazione è in esecuzione quando il `SecondaryStatus` processo è o. `Downloading` `Training`

```
# Enable RemoteDebug
model_trainer.enable_remote_debug()

# Disable RemoteDebug
model_trainer.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 verificare lo stato del processo di formazione utilizzando l'`DescribeTrainingJob`API, come controllare gli accessi al processo di formazione e come accedere al contenitore di formazione. CloudWatch

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

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

Per verificare lo stato `SecondaryStatus` di un processo di formazione, esegui il seguente SageMaker codice Python SDK.

```
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 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 durata `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 intelligenza artificiale crea un numero uguale di host e flussi di log. Ad esempio, se utilizzi 4 istanze, SageMaker AI 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**. Nella CloudWatch console viene visualizzato il relativo elenco dei log dei job di formazione.

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 saperne di più su come l' SageMaker IA gestisce le informazioni di configurazione per la formazione distribuita su più istanze, vedi [ 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 non connesso a Internet pubblico, puoi utilizzarlo AWS PrivateLink per abilitare SSM. AWS PrivateLink limita tutto il traffico di rete tra le tue istanze 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 per Session Manager. ](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-privatelink.html) 

## 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 del registro delle sessioni in un bucket Amazon Simple Storage Service (Amazon S3) o in un gruppo Amazon Logs. CloudWatch È possibile creare  documenti che definiscono le preferenze generali per tutte le sessioni di un AWS account e/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 `/aws/sagemaker/TrainingJobs` log. I flussi di log dell’agente SSM sono denominati in questo formato: `<job-name>/algo-<n>-<timestamp>/ssm`. Ad esempio, se crei un job di training a due nodi denominato`training-job-test-remote-debug`, il log del training job `training-job-test-remote-debug/algo-<n>-<timestamp>` e diversi log degli errori degli agenti SSM `training-job-test-remote-debug/algo-<n>-<timestamp>/ssm` vengono caricati nei tuoi log. 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>

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