

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

# Container con algoritmi di addestramento personalizzati
<a name="your-algorithms-training-algo"></a>

Questa sezione spiega come Amazon SageMaker AI interagisce con un contenitore Docker che esegue il tuo algoritmo di addestramento personalizzato. Utilizza queste informazioni per scrivere codice di addestramento e creare un'immagine Docker per i tuoi algoritmi di addestramento. 

**Topics**
+ [In che modo Amazon SageMaker AI gestisce la tua immagine di formazione](your-algorithms-training-algo-dockerfile.md)
+ [In che modo Amazon SageMaker AI fornisce informazioni sulla formazione](your-algorithms-training-algo-running-container.md)
+ [Esecuzione di un addestramento con EFA](your-algorithms-training-efa.md)
+ [In che modo Amazon SageMaker AI segnala il successo e il fallimento di un algoritmo](your-algorithms-training-signal-success-failure.md)
+ [In che modo Amazon SageMaker AI elabora i risultati della formazione](your-algorithms-training-algo-output.md)

# In che modo Amazon SageMaker AI gestisce la tua immagine di formazione
<a name="your-algorithms-training-algo-dockerfile"></a>

Puoi utilizzare uno script del punto di ingresso personalizzato per automatizzare l'infrastruttura per l'addestramento in un ambiente di produzione. Se passi lo script entrypoint nel contenitore Docker, puoi anche eseguirlo come script autonomo senza ricostruire le immagini. SageMaker L'intelligenza artificiale elabora l'immagine di allenamento utilizzando uno script entrypoint del contenitore Docker. 

In questa sezione viene descritto come utilizzare un punto di ingresso personalizzato senza utilizzare il toolkit. [Se desideri utilizzare un punto di ingresso personalizzato ma non hai familiarità con la configurazione manuale di un contenitore Docker, ti consigliamo di utilizzare invece la libreria di strumenti di formazione. SageMaker ](https://github.com/aws/sagemaker-training-toolkit) Per ulteriori informazioni su come utilizzare il toolkit di addestramento, consulta [Adattamento del container di addestramento](adapt-training-container.md). 

Per impostazione predefinita, l' SageMaker intelligenza artificiale cerca uno script chiamato all'interno del contenitore. `train` Puoi anche fornire manualmente il tuo punto di ingresso personalizzato utilizzando i `ContainerEntrypoint` parametri `ContainerArguments` e dell'[AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html)API. 

Sono disponibili le due opzioni seguenti per configurare manualmente il container Docker per l'esecuzione della tua immagine.
+ Utilizza l'[CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)API e un contenitore Docker con un'istruzione entrypoint contenuta al suo interno.
+ Usa l'API `CreateTrainingJob` e trasmetti lo script di addestramento dall'esterno del tuo container Docker.

Se inoltri lo script di addestramento dall'esterno del tuo container Docker, non devi ricostruire il container Docker quando aggiorni lo script. Puoi anche utilizzare diversi script da eseguire nello stesso container.

Lo script del punto di ingresso deve contenere il codice di addestramento per l'immagine. Se utilizzi il parametro opzionale `source_dir` all'interno di uno [strumento di valutazione](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html), dovrebbe fare riferimento al percorso Amazon S3 relativo alla cartella contenente lo script del punto di ingresso. Puoi fare riferimento a più file utilizzando il parametro `source_dir`. Se non utilizzi `source_dir`, puoi specificare il punto di ingresso utilizzando il parametro `entry_point`. Per un esempio di script entrypoint personalizzato che contiene uno stimatore, consulta [Bring Your Own](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html) Model with AI Script Model. SageMaker 

SageMaker L'addestramento sui modelli AI supporta i bucket di directory S3 Express One Zone ad alte prestazioni come posizione di input dei dati per la modalità file, la modalità file veloce e la modalità pipe. È anche possibile utilizzare i bucket di directory S3 Express One Zone per archiviare l’output dell’addestramento. Per utilizzare S3 Express One Zone, fornisci l’URI di un bucket di directory S3 Express One Zone anziché di un bucket Amazon S3 per uso generico. Puoi crittografare i dati di output SageMaker AI solo in bucket di directory con crittografia lato server con chiavi gestite di Amazon S3 (SSE-S3). La crittografia lato server con AWS KMS chiavi (SSE-KMS) non è attualmente supportata per l'archiviazione dei dati di output AI nei bucket di directory. SageMaker Per ulteriori informazioni, consulta [S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html).

## Esecuzione di un processo di addestramento con uno script del punto di ingresso incluso nel container Docker
<a name="your-algorithms-training-algo-dockerfile-api-ep-in"></a>

SageMaker L'intelligenza artificiale può eseguire uno script di ingresso incluso nel contenitore Docker. 
+ Per impostazione predefinita, Amazon SageMaker AI esegue il seguente contenitore.

  ```
  docker run image train
  ```
+ SageMaker L'intelligenza artificiale sostituisce qualsiasi istruzione [CMD](https://docs.docker.com/engine/reference/builder/#cmd) predefinita in un contenitore specificando l'`train`argomento dopo il nome dell'immagine. Nel tuo container Docker, usa il seguente modulo `exec` dell'istruzione `ENTRYPOINT`.

  ```
  ENTRYPOINT ["executable", "param1", "param2", ...]
  ```

  L'esempio seguente illustra come specificare un'istruzione di punto di ingresso python chiamata `k-means-algorithm.py`.

  ```
  ENTRYPOINT ["python", "k-means-algorithm.py"]
  ```

  Il modulo `exec` dell'istruzione `ENTRYPOINT` avvia l'eseguibile direttamente, non come figlio di `/bin/sh`. Ciò gli consente di ricevere segnali simili e provenienti da. `SIGTERM` `SIGKILL` SageMaker APIs Le seguenti condizioni si applicano quando si utilizza il SageMaker APIs. 
  + L'[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)API presenta una condizione di arresto che impone all' SageMaker IA di interrompere l'addestramento dei modelli dopo un periodo di tempo specifico. 
  + Quanto segue mostra l’API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopTrainingJob.html). Questo API rilascia l'equivalente del comando `docker stop`, con un timeout di due minuti, per arrestare in modo normale il container specificato.

    ```
    docker stop -t 120
    ```

    Il comando tenta di arrestare il container in esecuzione inviando un segnale `SIGTERM`. Dopo il timeout di 2 minuti, l'API invia `SIGKILL` e blocca forzatamente i container. Se il container gestisce il segnale `SIGTERM` normalmente ed esce entro 120 secondi dalla ricezione, non viene inviato alcun segnale `SIGKILL`. 

  Se desideri accedere agli artefatti intermedi del modello dopo che l' SageMaker IA ha interrotto l'addestramento, aggiungi il codice per gestire il salvataggio degli artefatti nel tuo gestore. `SIGTERM`
+ Se prevedi di utilizzare i dispositivi GPU per l’addestramento del modello, assicurati che i tuoi container siano compatibili con `nvidia-docker`. Includi soltanto il tooklit CUDA sui container; non raggruppare i driver NVIDIA con l'immagine. Per ulteriori informazioni su `nvidia-docker`, consulta [NVIDIA/nvidia-docker](https://github.com/NVIDIA/nvidia-docker).
+ Non puoi usare l'`tini`inizializzatore come script di ingresso nei contenitori SageMaker AI perché viene confuso dagli argomenti and. `train` `serve`
+ `/opt/ml`e tutte le sottodirectory sono riservate tramite training. SageMaker Quando crei l'immagine Docker del tuo algoritmo, assicurati di non inserire in questa directory i dati richiesti dall'algoritmo. Se lo fai, i dati potrebbero non essere più visibili durante l'addestramento.

Per raggruppare gli script di shell o Python all'interno dell'immagine Docker o per fornire lo script in un bucket Amazon S3 o utilizzando (CLI), continua con AWS Command Line Interface la sezione seguente.

### Raggruppa lo script di shell (interprete di comandi) in un container Docker
<a name="your-algorithms-training-algo-dockerfile-script-sh"></a>

 Se desideri raggruppare uno script di shell personalizzato all'interno della tua immagine Docker, completa la seguente procedura. 

1. Copia lo script di shell (interprete di comandi) dalla directory di lavoro all'interno del container Docker. Il seguente frammento di codice copia uno script del punto di ingresso personalizzato `custom_entrypoint.sh` dalla directory di lavoro corrente a un container Docker situato in `mydir`. L'esempio seguente presuppone che nell'immagine Docker di base sia installato Python.

   ```
   FROM <base-docker-image>:<tag>
   
   # Copy custom entrypoint from current dir to /mydir on container
   COPY ./custom_entrypoint.sh /mydir/
   ```

1. Crea e invia con notifica push un container Docker all’Amazon Elastic Container Registry ([Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) seguendo le istruzioni riportate nella sezione [Push di un’immagine Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) nella Guida per l’utente *Amazon ECR*.

1. Avvia il processo di formazione eseguendo il comando seguente. AWS CLI 

   ```
   aws --region <your-region> sagemaker create-training-job \
   --training-job-name <your-training-job-name> \
   --role-arn <your-execution-role-arn> \
   --algorithm-specification '{ \ 
       "TrainingInputMode": "File", \
       "TrainingImage": "<your-ecr-image>", \
       "ContainerEntrypoint": ["/bin/sh"], \
       "ContainerArguments": ["/mydir/custom_entrypoint.sh"]}' \
   --output-data-config '{"S3OutputPath": "s3://custom-entrypoint-output-bucket/"}' \
   --resource-config '{"VolumeSizeInGB":10,"InstanceCount":1,"InstanceType":"ml.m5.2xlarge"}' \
   --stopping-condition '{"MaxRuntimeInSeconds": 180}'
   ```

### Raggruppa il tuo script Python in un container Docker
<a name="your-algorithms-training-algo-dockerfile-script-py"></a>

Per raggruppare uno script Python personalizzato all'interno della tua immagine Docker, completa la seguente procedura. 

1. Copia lo script Python dalla tua directory di lavoro all'interno del tuo container Docker. Il seguente frammento di codice copia uno script del punto di ingresso personalizzato `custom_entrypoint.py` dalla directory di lavoro corrente a un container Docker situato in `mydir`.

   ```
   FROM <base-docker-image>:<tag>
   # Copy custom entrypoint from current dir to /mydir on container
   COPY ./custom_entrypoint.py /mydir/
   ```

1. Avvia il processo di formazione eseguendo il AWS CLI comando seguente.

   ```
   --algorithm-specification '{ \ 
       "TrainingInputMode": "File", \
       "TrainingImage": "<your-ecr-image>", \
       "ContainerEntrypoint": ["python"], \
       "ContainerArguments": ["/mydir/custom_entrypoint.py"]}' \
   ```

## Esecuzione di un processo di addestramento con uno script del punto di ingresso al di fuori del container Docker
<a name="your-algorithms-training-algo-dockerfile-api-pass-ep"></a>

Puoi usare il tuo container Docker per l’addestramento e inserire uno script del punto di ingresso dall'esterno del container Docker. Ci sono alcuni vantaggi nello strutturare lo script del punto di ingresso all'esterno del container. Se aggiorni lo script di ingresso, non devi ricostruire il container Docker. Puoi anche utilizzare diversi script da eseguire nello stesso container. 

Specificate la posizione dello script di formazione utilizzando i `ContainerArguments` parametri `ContainerEntrypoint` e dell'[AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html)API. Questi punti di ingresso e argomenti si comportano allo stesso modo dei punti di ingresso e degli argomenti Docker. I valori di questi parametri hanno la precedenza su quelli corrispondenti `ENTRYPOINT` o `CMD` forniti come parte del container Docker. 

Quando inoltrii il tuo script del punto di ingresso personalizzato al tuo container di addestramento Docker, gli input forniti determinano il comportamento del container.
+ Ad esempio, se fornite solo`ContainerEntrypoint`, la sintassi della richiesta che utilizza l' CreateTrainingJob API è la seguente.

  ```
  {
      "AlgorithmSpecification": {
          "ContainerEntrypoint": ["string"],   
          ...     
          }       
  }
  ```

  Quindi, il backend SageMaker di formazione esegue il punto di ingresso personalizzato come segue.

  ```
  docker run --entrypoint <ContainerEntrypoint> image
  ```
**Nota**  
Se `ContainerEntrypoint` fornito, il backend di SageMaker formazione esegue l'immagine con il punto di ingresso specificato e sostituisce l'impostazione predefinita nell'immagine. `ENTRYPOINT`
+ Se fornisci solo`ContainerArguments`, SageMaker AI presuppone che il contenitore Docker contenga uno script di ingresso. La sintassi della richiesta che utilizza l'API `CreateTrainingJob` è la seguente.

  ```
  {
      "AlgorithmSpecification": {
          "ContainerArguments": ["arg1", "arg2"],
          ...
      }
  }
  ```

  Il backend SageMaker di formazione esegue il punto di ingresso personalizzato come segue.

  ```
  docker run image <ContainerArguments>
  ```
+ Se fornisci sia l’opzione `ContainerEntrypoint` che `ContainerArguments`, la sintassi della richiesta tramite l'API `CreateTrainingJob` è la seguente.

  ```
  {
      "AlgorithmSpecification": {
          "ContainerEntrypoint": ["string"],
          "ContainerArguments": ["arg1", "arg2"],
          ...
      }
  }
  ```

   Il backend SageMaker di formazione gestisce il punto di ingresso personalizzato come segue.

  ```
  docker run --entrypoint <ContainerEntrypoint> image <ContainerArguments>
  ```

Puoi utilizzare qualsiasi origine `InputDataConfig` supportata nell'API `CreateTrainingJob` per fornire uno script del punto di ingresso per eseguire la tua immagine di addestramento. 

### Inserimento dello script del tuo punto di ingresso in un bucket Amazon S3
<a name="your-algorithms-training-algo-dockerfile-script-s3"></a>

 Per fornire uno script entrypoint personalizzato utilizzando un bucket S3, utilizza il `S3DataSource` parametro dell'[DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource)API per specificare la posizione dello script. Se utilizzi il parametro `S3DataSource`, i seguenti requisiti sono necessari.
+ [InputMode](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-InputMode)Deve essere del tipo. `File`
+ L'[S3 DataDistributionType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource) deve essere`FullyReplicated`.

L'esempio seguente presenta uno script chiamato custom\$1entrypoint.sh inserito nel percorso di un bucket S3 `s3://<bucket-name>/<bucket prefix>/custom_entrypoint.sh`.

```
#!/bin/bash
echo "Running custom_entrypoint.sh"
echo "Hello you have provided the following arguments: " "$@"
```

Successivamente, devi impostare la configurazione del canale dati di input per eseguire un processo di addestramento. Fatelo utilizzando AWS CLI direttamente o con un file JSON.

#### Configura il canale dati di input utilizzando AWS CLI un file JSON
<a name="your-algorithms-training-algo-dockerfile-script-s3-json"></a>

Per configurare il canale dati di input con un file JSON, utilizzate AWS CLI come mostrato nella seguente struttura di codice. Assicurati che tutti i seguenti campi utilizzino la sintassi della richiesta definita nell'[CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#API_CreateTrainingJob_RequestSyntax)API.

```
// run-my-training-job.json
{
 "[AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#sagemaker-CreateTrainingJob-request-AlgorithmSpecification)": { 
        "ContainerEntrypoint": ["/bin/sh"],
        "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"],
         ...
   },
  "[InputDataConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#sagemaker-CreateTrainingJob-request-InputDataConfig)": [ 
    { 
        "[ChannelName](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-ChannelName)": "<your_channel_name>",
        "[DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-DataSource)": { 
            "[S3DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource)": { 
                "[S3DataDistributionType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#sagemaker-Type-S3DataSource-S3DataDistributionType)": "FullyReplicated",
                "[S3DataType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#sagemaker-Type-S3DataSource-S3DataType)": "S3Prefix",
                "[S3Uri](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#sagemaker-Type-S3DataSource-S3Uri)": "s3://<bucket-name>/<bucket_prefix>"
            }
        },
        "[InputMode](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-InputMode)": "File",
    },
    ...]
}
```

Quindi, esegui il AWS CLI comando per avviare il processo di formazione dal file JSON come segue.

```
aws sagemaker create-training-job --cli-input-json file://run-my-training-job.json
```

#### Configura il canale dati di input utilizzando direttamente AWS CLI
<a name="your-algorithms-training-algo-dockerfile-script-s3-directly"></a>

Per configurare il canale dati di input senza un file JSON, utilizzate la seguente struttura di AWS CLI codice.

```
aws --region <your-region> sagemaker create-training-job \
--training-job-name <your-training-job-name> \
--role-arn <your-execution-role-arn> \
--algorithm-specification '{ \
    "TrainingInputMode": "File", \
    "TrainingImage": "<your-ecr-image>", \
    "ContainerEntrypoint": ["/bin/sh"], \
    "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"]}' \
--input-data-config '[{ \
    "ChannelName":"<your_channel_name>", \
    "DataSource":{ \
        "S3DataSource":{ \
            "S3DataType":"S3Prefix", \
            "S3Uri":"s3://<bucket-name>/<bucket_prefix>", \
            "S3DataDistributionType":"FullyReplicated"}}}]' \
--output-data-config '{"S3OutputPath": "s3://custom-entrypoint-output-bucket/"}' \
--resource-config '{"VolumeSizeInGB":10,"InstanceCount":1,"InstanceType":"ml.m5.2xlarge"}' \
--stopping-condition '{"MaxRuntimeInSeconds": 180}'
```

# In che modo Amazon SageMaker AI fornisce informazioni sulla formazione
<a name="your-algorithms-training-algo-running-container"></a>

Questa sezione spiega come l' SageMaker intelligenza artificiale rende disponibili le informazioni sulla formazione, come dati di addestramento, iperparametri e altre informazioni di configurazione, nel contenitore Docker. 

Quando invii una [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)richiesta all' SageMaker IA per avviare l'addestramento del modello, specifichi il percorso Amazon Elastic Container Registry (Amazon ECR) dell'immagine Docker che contiene l'algoritmo di addestramento. È inoltre necessario specificare la posizione di Amazon Simple Storage Service (Amazon S3) in cui vengono archiviati i dati di addestramento e i parametri specifici dell'algoritmo. SageMaker L'intelligenza artificiale mette queste informazioni a disposizione del contenitore Docker in modo che l'algoritmo di addestramento possa utilizzarle. Questa sezione spiega come rendere queste informazioni disponibili al tuo container Docker. Per informazioni sulla creazione di un processo di addestramento, consulta `CreateTrainingJob`. Per ulteriori informazioni sul modo in cui i contenitori SageMaker AI organizzano le informazioni, consulta[SageMaker Toolkit di formazione e inferenza](amazon-sagemaker-toolkits.md).

**Topics**
+ [Iperparametri](#your-algorithms-training-algo-running-container-hyperparameters)
+ [Variabili di ambiente](#your-algorithms-training-algo-running-container-environment-variables)
+ [Configurazione dei dati di input](#your-algorithms-training-algo-running-container-inputdataconfig)
+ [Dati di addestramento](#your-algorithms-training-algo-running-container-trainingdata)
+ [Configurazione dell’addestramento distribuito](#your-algorithms-training-algo-running-container-dist-training)

## Iperparametri
<a name="your-algorithms-training-algo-running-container-hyperparameters"></a>

 SageMaker L'intelligenza artificiale rende disponibili gli iperparametri di una `CreateTrainingJob` richiesta nel contenitore Docker del `/opt/ml/input/config/hyperparameters.json` file.

Di seguito è riportato un esempio di configurazione iperparametrica in `hyperparameters.json` per specificare gli `num_round` e gli `eta` iperparametri nell'operazione per. `CreateTrainingJob` [XGBoost](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html) 

```
{
    "num_round": "128",
    "eta": "0.001"
}
```

[Per un elenco completo degli iperparametri che possono essere utilizzati per l' XGBoost algoritmo integrato di SageMaker intelligenza artificiale, vedi Iperparametri. XGBoost](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost_hyperparameters.html)

Gli iperparametri che puoi ottimizzare dipendono dall'algoritmo che stai addestrando. Per un elenco degli iperparametri disponibili per un algoritmo integrato di SageMaker intelligenza artificiale, trovali elencati in **Iperparametri** sotto il link dell'algoritmo in Use [Amazon SageMaker AI Built-in Algorithms or](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html) Pre-training Models.

## Variabili di ambiente
<a name="your-algorithms-training-algo-running-container-environment-variables"></a>

SageMaker L'intelligenza artificiale imposta le seguenti variabili di ambiente nel tuo contenitore:
+ TRAINING\$1JOB\$1NAME: specificato nel parametro `TrainingJobName` della richiesta `CreateTrainingJob`.
+ TRAINING\$1JOB\$1ARN: il nome della risorsa Amazon (ARN) del processo di addestramento restituito come `TrainingJobArn` nella risposta `CreateTrainingJob`.
+ Tutte le variabili di ambiente specificate nel parametro [Ambiente](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#sagemaker-CreateTrainingJob-request-Environment) nella richiesta `CreateTrainingJob`.

## Configurazione dei dati di input
<a name="your-algorithms-training-algo-running-container-inputdataconfig"></a>

SageMaker L'intelligenza artificiale rende disponibili le informazioni sul canale dati contenute nel `InputDataConfig` parametro della `CreateTrainingJob` richiesta nel `/opt/ml/input/config/inputdataconfig.json` file nel contenitore Docker.

Ad esempio, supponiamo di specificare tre canali di dati (`train``evaluation`, e`validation`) nella richiesta. SageMaker L'IA fornisce il seguente codice JSON:

```
{
  "train" : {"ContentType":  "trainingContentType",
             "TrainingInputMode": "File",
             "S3DistributionType": "FullyReplicated",
             "RecordWrapperType": "None"},
  "evaluation" : {"ContentType":  "evalContentType",
                  "TrainingInputMode": "File",
                  "S3DistributionType": "FullyReplicated",
                  "RecordWrapperType": "None"},
  "validation" : {"TrainingInputMode": "File",
                  "S3DistributionType": "FullyReplicated",
                  "RecordWrapperType": "None"}
}
```

**Nota**  
SageMaker L'intelligenza artificiale fornisce al contenitore solo informazioni pertinenti su ciascun canale di dati (ad esempio, il nome del canale e il tipo di contenuto), come mostrato nell'esempio precedente. `S3DistributionType`verrà impostato come `FullyReplicated` se si specificasse EFS o FSx Lustre come origini dati di input.

## Dati di addestramento
<a name="your-algorithms-training-algo-running-container-trainingdata"></a>

Il parametro `TrainingInputMode` nella `AlgorithmSpecification` della richiesta [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) specifica in che modo il set di dati di addestramento viene reso disponibile per il container. Sono disponibili le modalità di input seguenti:
+ **Modalità `File`**

  Se usi `File` mode come `TrainingInputMode` valore, SageMaker AI imposta i seguenti parametri nel tuo contenitore.
  + Il parametro `TrainingInputMode` viene scritto in `inputdataconfig.json` come "File".
  + La directory del tuo canale dati viene scritta in `/opt/ml/input/data/channel_name`.

  Se utilizzi `File` la modalità, l' SageMaker IA crea una directory per ogni canale. Ad esempio, se hai tre canali denominati `training``validation`, e`testing`, SageMaker AI crea le seguenti tre directory nel tuo contenitore Docker: 
  + `/opt/ml/input/data/training`
  + `/opt/ml/input/data/validation`
  + `/opt/ml/input/data/testing`

  La modalità `File` supporta le seguenti origini dati.
  + Amazon Simple Storage Service (Amazon S3)
  + Amazon Elastic File System (Amazon EFS)
  + Amazon FSx per Lustre
**Nota**  
I canali che utilizzano fonti di dati di file system come Amazon EFS e Amazon FSx devono utilizzare `File` la modalità. In questo caso, il percorso della directory fornito nel canale viene montato in `/opt/ml/input/data/channel_name`.
+ **Modalità `FastFile`**

  Se utilizzi la `FastFile` modalità come modalità`TrainingInputNodeParameter`, l' SageMaker intelligenza artificiale imposta i seguenti parametri nel tuo contenitore.
  + Analogamente alla modalità `File`, nella modalità `FastFile` il tuo parametro `TrainingInputMode` viene scritto in `inputdataconfig.json` come "File".
  + La directory del tuo canale dati viene scritta in `/opt/ml/input/data/channel_name`.

  La modalità `FastFile` supporta le seguenti origini dati.
  + Simple Storage Service (Amazon S3)

  Se utilizzi la modalità `FastFile`, la directory dei canali viene montata con l'autorizzazione di sola lettura.

  Storicamente, la modalità `File` precedeva la modalità `FastFile`. Per garantire la compatibilità con le versioni precedenti, gli algoritmi che supportano la modalità `File` possono funzionare senza problemi anche con la modalità `FastFile`, purché il parametro `TrainingInputMode` sia impostato su `File` in `inputdataconfig.json.`.
**Nota**  
I canali che utilizzano la modalità `FastFile` devono utilizzare un `S3DataType` di "S3Prefix".  
La modalità `FastFile` presenta una visualizzazione di cartelle che utilizza la barra in avanti (`/`) come delimitatore per raggruppare oggetti Amazon S3 nelle cartelle. I prefissi `S3Uri` non devono corrispondere a un nome parziale di cartella. Ad esempio, se un set di dati Amazon S3 contiene `s3://amzn-s3-demo-bucket/train-01/data.csv`, allora non sono consentiti né `s3://amzn-s3-demo-bucket/train` né `s3://amzn-s3-demo-bucket/train-01` come prefissi `S3Uri`.  
Consigliamo di utilizzare una barra finale per definire un canale corrispondente a una cartella. Ad esempio, il canale `s3://amzn-s3-demo-bucket/train-01/` per la cartella `train-01`. Senza la barra finale, il canale sarebbe ambiguo se esistesse un'altra cartella `s3://amzn-s3-demo-bucket/train-011/` o un file `s3://amzn-s3-demo-bucket/train-01.txt/`.
+ **Modalità `Pipe`**
  + Il parametro `TrainingInputMode` scritto in `inputdataconfig.json`: "Pipe"
  + Directory del canale dati nel container Docker: `/opt/ml/input/data/channel_name_epoch_number`
  + Fonti di dati supportate: Amazon S3

  Devi leggere da una pipe separata per ogni canale. Ad esempio, se hai tre canali denominati `training`, `validation` e `testing`, devi leggere dalle seguenti pipe:
  + `/opt/ml/input/data/training_0, /opt/ml/input/data/training_1, ...`
  + `/opt/ml/input/data/validation_0, /opt/ml/input/data/validation_1, ...`
  + `/opt/ml/input/data/testing_0, /opt/ml/input/data/testing_1, ...`

  Leggi le pipe sequenzialmente. Ad esempio, se hai un canale che si chiama `training`, leggi le pipe in questa sequenza: 

  1. Apri `/opt/ml/input/data/training_0` in modalità lettura e leggilo su end-of-file (EOF) oppure, se hai finito con la prima epoca, chiudi il file pipe in anticipo. 

  1. Dopo aver chiuso il primo file pipe, cerca `/opt/ml/input/data/training_1` e leggilo finché non hai completato la seconda epoca e così via.

  Se il file per una determinata epoca non esiste ancora, il tuo codice potrebbe dover riprovare finché non viene creata la pipe. Non c'è alcuna restrizione di sequenziamento sui tipi di canale. Ad esempio, puoi leggere più epoche per il canale `training`, e iniziare a leggere il canale `validation` solo quando sei pronto. In alternativa, li puoi leggere simultaneamente se il tuo algoritmo lo richiede.

  Per un esempio di notebook Jupyter che mostra come usare la modalità Pipe quando porti il tuo contenitore, vedi [Bring your own pipe-mode](https://github.com/aws/amazon-sagemaker-examples/blob/main/advanced_functionality/pipe_bring_your_own/pipe_bring_your_own.ipynb) algorithm to Amazon AI. SageMaker 

  

SageMaker L'addestramento sui modelli AI supporta i bucket di directory S3 Express One Zone ad alte prestazioni come posizione di input dei dati per la modalità file, la modalità fast file e la modalità pipe. Per utilizzare S3 Express One Zone, inserisci la posizione del bucket di directory S3 Express One Zone anziché un bucket Amazon S3 per uso generico. Fornisci l’ARN per il ruolo IAM con la policy di controllo degli accessi e delle autorizzazioni richiesta. Fare riferimento a [AmazonSageMakerFullAccesspolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerFullAccess.html) per ulteriori dettagli. Puoi crittografare i dati di output SageMaker AI solo in bucket di directory con crittografia lato server con chiavi gestite di Amazon S3 (SSE-S3). La crittografia lato server con AWS KMS chiavi (SSE-KMS) non è attualmente supportata per l'archiviazione dei dati di output AI nei bucket di directory. SageMaker Per ulteriori informazioni, consulta [S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html).

## Configurazione dell’addestramento distribuito
<a name="your-algorithms-training-algo-running-container-dist-training"></a>

Se stai eseguendo corsi di formazione distribuiti con più contenitori, l' SageMaker intelligenza artificiale rende disponibili le informazioni su tutti i contenitori nel file. `/opt/ml/input/config/resourceconfig.json`

Per abilitare la comunicazione tra contenitori, questo file JSON contiene informazioni per tutti i contenitori. SageMaker L'intelligenza artificiale rende questo file disponibile per entrambi gli algoritmi`File`. `Pipe` Il file fornisce le informazioni che seguono:
+ `current_host`: il nome del container corrente sulla rete di container. Ad esempio, `algo-1`. I valori host possono cambiare in qualsiasi momento. Non scrivere codice con valori specifici per questa variabile.
+ `hosts`: l'elenco dei nomi di tutti i container nella rete di container, ordinato in ordine lessicografico. Ad esempio, `["algo-1", "algo-2", "algo-3"]` per un cluster a tre nodi. I container possono utilizzare questi nomi per gestire altri container sulla rete di container. I valori host possono cambiare in qualsiasi momento. Non scrivere codice con valori specifici per queste variabili.
+ `network_interface_name`: il nome dell'interfaccia di rete esposta al tuo container. Ad esempio, container che eseguono l'interfaccia MPI (Message Passing Interface) possono utilizzare questa informazione per impostare il nome dell'interfaccia di rete.
+ Non utilizzare le informazioni in `/etc/hostname` o `/etc/hosts` perché potrebbero non essere accurate.
+ Le informazioni sul nome host potrebbero non essere immediatamente disponibili per il container degli algoritmi. Ti consigliamo di aggiungere una policy per i nuovi tentativi sulle operazioni di risoluzione del nome host man mano che i nodi diventano disponibili nel cluster.

Di seguito è riportato un file di esempio sul nodo 1 in un cluster a tre nodi.

```
{
    "current_host": "algo-1",
    "hosts": ["algo-1","algo-2","algo-3"],
    "network_interface_name":"eth1"
}
```

# Esecuzione di un addestramento con EFA
<a name="your-algorithms-training-efa"></a>

 SageMaker L'intelligenza artificiale fornisce l'integrazione con i dispositivi [EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) per accelerare le applicazioni di High Performance Computing (HPC) e machine learning. Questa integrazione consente di sfruttare un dispositivo EFA per eseguire processi di addestramento distribuiti. Puoi aggiungere l'integrazione EFA a un contenitore Docker esistente da aggiungere all'IA. SageMaker Le seguenti informazioni descrivono come configurare il proprio container per utilizzare un dispositivo EFA per i processi di addestramento distribuiti. 

## Prerequisiti
<a name="your-algorithms-training-efa-prereq"></a>

 Il contenitore deve soddisfare le specifiche del [contenitore SageMaker di formazione](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-dockerfile.html).  

## Installazione dei pacchetti EFA richiesti
<a name="your-algorithms-training-efa-install"></a>

Il container deve scaricare e installare il [ software EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html). Ciò consente al container di riconoscere il dispositivo EFA e fornisce versioni compatibili di Libfabric e Open MPI. 

Tutti gli strumenti come MPI e NCCL devono essere installati e gestiti all'interno del container per essere utilizzati come parte del processo di addestramento abilitato EFA. Per un elenco di tutte le versioni EFA disponibili, consulta [Verifica del programma di installazione EFA utilizzando un checksum](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-verify.html). L'esempio seguente mostra come modificare il file Docker del container abilitato EFA per installare EFA, MPI, OFI, NCCL e NCCL-TEST.

**Nota**  
Quando si utilizza PyTorch con EFA sul contenitore, la versione NCCL del contenitore deve corrispondere alla versione NCCL dell'installazione. PyTorch Per verificare la versione PyTorch NCCL, usa il seguente comando:  

```
torch.cuda.nccl.version()
```

```
ARG OPEN_MPI_PATH=/opt/amazon/openmpi/
ENV NCCL_VERSION=2.7.8
ENV EFA_VERSION=1.30.0
ENV BRANCH_OFI=1.1.1

#################################################
## EFA and MPI SETUP
RUN cd $HOME \
  && curl -O https://s3-us-west-2.amazonaws.com/aws-efa-installer/aws-efa-installer-${EFA_VERSION}.tar.gz \
  && tar -xf aws-efa-installer-${EFA_VERSION}.tar.gz \
  && cd aws-efa-installer \
  && ./efa_installer.sh -y --skip-kmod -g \

ENV PATH="$OPEN_MPI_PATH/bin:$PATH"
ENV LD_LIBRARY_PATH="$OPEN_MPI_PATH/lib/:$LD_LIBRARY_PATH"

#################################################
## NCCL, OFI, NCCL-TEST SETUP
RUN cd $HOME \
  && git clone https://github.com/NVIDIA/nccl.git -b v${NCCL_VERSION}-1 \
  && cd nccl \
  && make -j64 src.build BUILDDIR=/usr/local

RUN apt-get update && apt-get install -y autoconf
RUN cd $HOME \
  && git clone https://github.com/aws/aws-ofi-nccl.git -b v${BRANCH_OFI} \
  && cd aws-ofi-nccl \
  && ./autogen.sh \
  && ./configure --with-libfabric=/opt/amazon/efa \
       --with-mpi=/opt/amazon/openmpi \
       --with-cuda=/usr/local/cuda \
       --with-nccl=/usr/local --prefix=/usr/local \
  && make && make install
  
RUN cd $HOME \
  && git clone https://github.com/NVIDIA/nccl-tests \
  && cd nccl-tests \
  && make MPI=1 MPI_HOME=/opt/amazon/openmpi CUDA_HOME=/usr/local/cuda NCCL_HOME=/usr/local
```

## Considerazioni sulla creazione di un container
<a name="your-algorithms-training-efa-considerations"></a>

Il dispositivo EFA è montato sul container come indicato `/dev/infiniband/uverbs0` nell'elenco dei dispositivi accessibili al container. Nelle istanze P4d, il container ha accesso a 4 dispositivi EFA. I dispositivi EFA sono riportati nell'elenco dei dispositivi accessibili al container come: 
+  `/dev/infiniband/uverbs0` 
+  `/dev/infiniband/uverbs1` 
+  `/dev/infiniband/uverbs2` 
+  `/dev/infiniband/uverbs3` 

 Per ottenere informazioni sul nome host, sui nomi host dei peer e sull'interfaccia di rete (per MPI) dal file `resourceconfig.json` fornito a ciascuna istanza di container, 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). Il container gestisce il normale traffico TCP tra peer tramite le interfacce di rete elastiche (ENI) predefinite, mentre gestisce il traffico OFI (bypassando il kernel) attraverso il dispositivo EFA. 

## Verifica che il tuo dispositivo EFA sia riconosciuto
<a name="your-algorithms-training-efa-verify"></a>

  Per verificare che il tuo dispositivo EFA sia riconosciuto, esegui il comando seguente dall'interno del container. 

```
/opt/amazon/efa/bin/fi_info -p efa
```

L'aspetto dell'output sarà simile al seguente.

```
provider: efa
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-rdm
    version: 2.0
    type: FI_EP_RDM
    protocol: FI_PROTO_EFA
provider: efa
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-dgrm
    version: 2.0
    type: FI_EP_DGRAM
    protocol: FI_PROTO_EFA
provider: efa;ofi_rxd
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-dgrm
    version: 1.0
    type: FI_EP_RDM
    protocol: FI_PROTO_RXD
```

## Esecuzione di un processo di addestramento con EFA
<a name="your-algorithms-training-efa-run"></a>

 Dopo aver creato un contenitore compatibile con EFA, puoi eseguire un processo di formazione con EFA utilizzando un SageMaker AI Estimator nello stesso modo in cui faresti con qualsiasi altra immagine Docker. Per ulteriori informazioni sulla registrazione del container e sul suo utilizzo per l’addestramento, consulta [Adapting your own training container](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html#byoc-training-step5).

# In che modo Amazon SageMaker AI segnala il successo e il fallimento di un algoritmo
<a name="your-algorithms-training-signal-success-failure"></a>

Un algoritmo di addestramento indica se ha funzionato o meno utilizzando il codice di uscita del suo processo. 

Un'esecuzione di addestramento che funziona deve uscire con un codice di uscita 0 e un'esecuzione di addestramento non riuscita deve uscire con un codice di uscita diverso da zero. Verranno convertite in `Completed` e `Failed` nel `TrainingJobStatus` restituito da `DescribeTrainingJob`. Questo codice di uscita di convenzione è standard ed è facilmente implementato in tutti i linguaggi. Ad esempio, in Python, puoi utilizzare `sys.exit(1)` per segnalare un errore nell'uscita e l'esecuzione fino alla fine della routine principale farà uscire Python con il codice 0.

Nel caso di errori, l'algoritmo può scrivere una descrizione dell'errore nel file di errore. Per ulteriori informazioni, consulta la prossima sezione.

# In che modo Amazon SageMaker AI elabora i risultati della formazione
<a name="your-algorithms-training-algo-output"></a>

Poiché il tuo algoritmo viene eseguito in un container, genera output, tra cui lo stato del processo di addestramento e artefatti del modello e di output. Il tuo algoritmo deve scrivere queste informazioni nei file seguenti, che si trovano nella directory del container `/output`. Amazon SageMaker AI elabora le informazioni contenute in questa directory come segue:
+ `/opt/ml/model`— Il tuo algoritmo dovrebbe scrivere tutti gli artefatti finali del modello in questa directory. SageMaker AI copia questi dati come un singolo oggetto in formato tar compresso nella posizione S3 specificata nella richiesta. `CreateTrainingJob` Se più contenitori in un singolo processo di formazione scrivono in questa directory, dovrebbero assicurarsi che non ci `file/directory` siano conflitti tra i nomi. SageMaker L'IA aggrega il risultato in un file TAR e lo carica su S3 al termine del processo di formazione. 
+ `/opt/ml/output/data`— Il tuo algoritmo dovrebbe scrivere gli artefatti che desideri archiviare diversi dal modello finale in questa directory. SageMaker AI copia questi dati come un singolo oggetto in formato tar compresso nella posizione S3 specificata nella richiesta. `CreateTrainingJob` Se più contenitori in un singolo processo di formazione scrivono in questa directory, dovrebbero assicurarsi che non ci `file/directory` siano conflitti tra i nomi. SageMaker L'IA aggrega il risultato in un file TAR e lo carica su S3 al termine del processo di formazione.
+ `/opt/ml/output/failure`: se si verifica un errore nell’addestramento, dopo che l'output dell'algoritmo è completato (ad esempio, registrazione), il tuo algoritmo deve scrivere la descrizione dell'errore in questo file. In `DescribeTrainingJob` risposta, SageMaker AI restituisce i primi 1024 caratteri di questo file come. `FailureReason` 

È possibile specificare un bucket S3 generico o di directory per archiviare l’output dell’addestramento. I bucket di directory utilizzano solo la classe di archiviazione Amazon S3 Express One Zone, progettata per carichi di lavoro o applicazioni con requisiti di prestazioni elevati che richiedono una latenza costante di pochi millisecondi. Scegli il tipo di bucket più adatto ai requisiti applicativi e di prestazioni. Per ulteriori informazioni sui bucket di directory S3, consulta [Bucket di directory](https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html) nella *Guida per l’utente di Amazon Simple Storage Service*. 

**Nota**  
Puoi crittografare i dati di output SageMaker AI solo nei bucket di directory S3 con crittografia lato server con chiavi gestite di Amazon S3 (SSE-S3). La crittografia lato server con AWS KMS chiavi (SSE-KMS) non è attualmente supportata per l'archiviazione dei dati di output AI nei bucket di directory. SageMaker 