

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Contêineres com algoritmos de treinamento personalizados
<a name="your-algorithms-training-algo"></a>

Esta seção explica como a Amazon SageMaker AI interage com um contêiner do Docker que executa seu algoritmo de treinamento personalizado. Use essas informações para escrever código de treinamento e criar uma imagem do Docker para seus algoritmos de treinamento. 

**Topics**
+ [Como a Amazon SageMaker AI executa sua imagem de treinamento](your-algorithms-training-algo-dockerfile.md)
+ [Como a Amazon SageMaker AI fornece informações de treinamento](your-algorithms-training-algo-running-container.md)
+ [Executar treinamento com EFA](your-algorithms-training-efa.md)
+ [Como a Amazon SageMaker AI sinaliza o sucesso e o fracasso do algoritmo](your-algorithms-training-signal-success-failure.md)
+ [Como a Amazon SageMaker AI processa os resultados de treinamento](your-algorithms-training-algo-output.md)

# Como a Amazon SageMaker AI executa sua imagem de treinamento
<a name="your-algorithms-training-algo-dockerfile"></a>

Você pode usar um script de ponto de entrada personalizado para automatizar a infraestrutura para treinar em um ambiente de produção. Se você passar seu script de ponto de entrada para o contêiner do Docker, também poderá executá-lo como um script independente sem reconstruir suas imagens. SageMaker A IA processa sua imagem de treinamento usando um script de ponto de entrada do contêiner Docker. 

Esta seção mostra como usar um ponto de entrada personalizado sem o uso do kit de ferramentas de treinamento. Se você quiser usar um ponto de entrada personalizado, mas não estiver familiarizado com a configuração manual de um contêiner do Docker, recomendamos que você use a biblioteca do kit de ferramentas de [SageMaker treinamento](https://github.com/aws/sagemaker-training-toolkit). Para mais informações sobre como utilizar o kit de ferramentas de treino, consulte [Como adaptar o próprio contêiner de treinamento](adapt-training-container.md). 

Por padrão, a SageMaker IA procura um script chamado `train` dentro do seu contêiner. Você também pode fornecer manualmente seu próprio ponto de entrada personalizado usando os `ContainerEntrypoint` parâmetros `ContainerArguments` e da [AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html)API. 

Você tem as duas opções a seguir para configurar manualmente o contêiner do Docker para executar sua imagem.
+ Use a [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)API e um contêiner do Docker com uma instrução de ponto de entrada contida nele.
+ Use a API `CreateTrainingJob` e aprove o script de treinamento de fora do contêiner do Docker.

Se você aprovar o script de treinamento de fora do contêiner do Docker, não precisará reconstruir o contêiner do Docker ao atualizar o script. Você também pode usar vários scripts diferentes para serem executados no mesmo contêiner.

Seu script de ponto de entrada deve conter o código de treinamento para sua imagem. Se você usar o parâmetro opcional `source_dir` dentro de um [estimador](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html), ele deverá referenciar o caminho relativo do Amazon S3 para a pasta que contém o script de ponto de entrada. Você pode referenciar vários arquivos usando o parâmetro `source_dir`. Se você não usar o `source_dir`, poderá especificar o ponto de entrada usando o parâmetro `entry_point`. Para ver um exemplo de um script de ponto de entrada personalizado que contém um estimador, consulte [Traga seu próprio modelo com SageMaker ](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html) o modo de script AI.

SageMaker O treinamento do modelo de IA oferece suporte a buckets de diretório S3 Express One Zone de alto desempenho como um local de entrada de dados para o modo de arquivo, modo de arquivo rápido e modo pipe. Você também pode usar buckets de diretório da classe S3 Express One Zone para armazenar os resultados do treinamento. Para usar o S3 Express One Zone, forneça o URI de um bucket de diretório do S3 Express One Zone em vez de um bucket de uso geral do Amazon S3. Você só pode criptografar seus dados de saída de SageMaker IA em buckets de diretório com criptografia do lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3). Atualmente, a criptografia do lado do servidor com AWS KMS chaves (SSE-KMS) não é suportada para armazenar dados de saída de SageMaker IA em buckets de diretório. Para obter mais informações, consulte [S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html).

## Execute um trabalho de treinamento com um script de ponto de entrada incluído no contêiner do Docker
<a name="your-algorithms-training-algo-dockerfile-api-ep-in"></a>

SageMaker A IA pode executar um script de ponto de entrada incluído em seu contêiner Docker. 
+ Por padrão, o Amazon SageMaker AI executa o seguinte contêiner.

  ```
  docker run image train
  ```
+ SageMaker A IA substitui todas as instruções [CMD](https://docs.docker.com/engine/reference/builder/#cmd) padrão em um contêiner especificando o `train` argumento após o nome da imagem. No arquivo do contêiner do Docker, use o formulário `exec` da instrução `ENTRYPOINT`.

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

  O exemplo a seguir mostra como especificar uma instrução de ponto de entrada do python chamada `k-means-algorithm.py`.

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

  A forma `exec` da instrução `ENTRYPOINT` inicia o executável diretamente, não como elemento filho de `/bin/sh`. Isso permite que ele receba sinais `SIGKILL` de `SIGTERM` e para SageMaker APIs. As condições a seguir se aplicam ao usar SageMaker APIs o. 
  + A [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)API tem uma condição de parada que faz com que a SageMaker IA interrompa o treinamento do modelo após um tempo específico. 
  + A seguir, a API do [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopTrainingJob.html). Esta API emite o equivalente do `docker stop`, com um comando de tempo limite de 2 minutos, para interromper tranquilamente o contêiner especificado.

    ```
    docker stop -t 120
    ```

    Para tentar interromper o contêiner em execução, o comando envia um sinal `SIGTERM`. Após o tempo limite de 2 minutos, a API envia `SIGKILL` e interrompe os contêineres à força. Se o contêiner manipula o sinal `SIGTERM` com tranquilidade e sai dentro de 120 segundos após recebê-lo, nenhum sinal `SIGKILL` é enviado. 

  Se você quiser acessar os artefatos do modelo intermediário depois que a SageMaker IA interromper o treinamento, adicione código para lidar com o salvamento de artefatos em seu `SIGTERM` manipulador.
+ Se você planeja usar dispositivos de GPU para treinamento de modelos, os contêineres devem ser compatíveis com `nvidia-docker`. Somente o kit de ferramentas CUDA deve ser incluído em contêineres. Não empacote drivers NVIDIA com a imagem. Para obter mais informações sobre o `nvidia-docker`, consulte [NVIDIA/nvidia-docker](https://github.com/NVIDIA/nvidia-docker).
+ Você não pode usar o `tini` inicializador como seu script de ponto de entrada em contêineres de SageMaker IA porque ele fica confuso com os argumentos e. `train` `serve`
+ `/opt/ml`e todos os subdiretórios são reservados por SageMaker treinamento. Ao criar a imagem do Docker do seu algoritmo, certifique-se de não colocar nenhum dado exigido pelo seu algoritmo nesse diretório. Porque se você fizer isso, os dados podem não estar mais visíveis durante o treinamento.

Para agrupar seus scripts de shell ou Python em sua imagem do Docker, ou para fornecer o script em um bucket do Amazon S3 ou usando a AWS Command Line Interface (CLI), continue na seção a seguir.

### Agrupe o script de shell em um contêiner do Docker
<a name="your-algorithms-training-algo-dockerfile-script-sh"></a>

 Se você quiser agrupar um script de shell personalizado em sua imagem do Docker, use as etapas a seguir. 

1. Copie o script de shell do diretório de trabalho para dentro do contêiner do Docker. O trecho de código a seguir copia um script de ponto de entrada personalizado `custom_entrypoint.sh` do diretório de trabalho atual para um contêiner do Docker localizado em `mydir`. O exemplo a seguir pressupõe que a imagem do Docker de base tem o Python instalado.

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

1. Crie e envie um contêiner do Docker para o Amazon Elastic Container Registry ([Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) seguindo as instruções em [Enviar uma imagem do Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) no *Guia do usuário do Amazon ECR*.

1. Inicie o trabalho de treinamento executando o AWS CLI comando a seguir.

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

### Agrupe o script do Python em um contêiner do Docker
<a name="your-algorithms-training-algo-dockerfile-script-py"></a>

Para agrupar um script Python personalizado na imagem do Docker, use as etapas a seguir. 

1. Copie o script do Python do diretório de trabalho para dentro do contêiner do Docker. O trecho de código a seguir copia um script de ponto de entrada personalizado `custom_entrypoint.py` do diretório de trabalho atual para um contêiner do Docker localizado em `mydir`.

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

1. Inicie o trabalho de treinamento executando o AWS CLI comando a seguir.

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

## Execute um trabalho de treinamento com um script de ponto de entrada fora do contêiner do Docker
<a name="your-algorithms-training-algo-dockerfile-api-pass-ep"></a>

Você pode usar seu próprio contêiner do Docker para treinamento e transmitir um script de ponto de entrada de fora do contêiner do Docker. Há alguns benefícios em estruturar seu script de ponto de entrada fora do contêiner. Se você atualizar o script do ponto de entrada, você não precisará reconstruir o contêiner do Docker. Você também pode usar vários scripts diferentes para serem executados no mesmo contêiner. 

Especifique a localização do seu script de treinamento usando os `ContainerArguments` parâmetros `ContainerEntrypoint` e da [AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html)API. Esses pontos de entrada e argumentos se comportam da mesma maneira que os pontos de entrada e argumentos do Docker. Os valores nesses parâmetros substituem os correspondentes `ENTRYPOINT` ou `CMD` fornecidos como parte do contêiner do Docker. 

Quando você passa o script de ponto de entrada personalizado para o contêiner de treinamento do Docker, as entradas que você fornece determinam o comportamento do contêiner.
+ Por exemplo, se você fornecer somente`ContainerEntrypoint`, a sintaxe da solicitação usando a CreateTrainingJob API será a seguinte.

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

  Em seguida, o back-end de SageMaker treinamento executa seu ponto de entrada personalizado da seguinte maneira.

  ```
  docker run --entrypoint <ContainerEntrypoint> image
  ```
**nota**  
Se `ContainerEntrypoint` for fornecido, o back-end de SageMaker treinamento executa a imagem com o ponto de entrada fornecido e substitui o padrão na imagem. `ENTRYPOINT`
+ Se você fornecer apenas`ContainerArguments`, a SageMaker IA presume que o contêiner do Docker contém um script de ponto de entrada. A sintaxe da solicitação usando a API `CreateTrainingJob` é a seguinte:

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

  O back-end de SageMaker treinamento executa seu ponto de entrada personalizado da seguinte maneira.

  ```
  docker run image <ContainerArguments>
  ```
+ Se você fornecer o `ContainerEntrypoint` e `ContainerArguments`, a sintaxe da solicitação usando a API `CreateTrainingJob` será a seguinte:

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

   O back-end de SageMaker treinamento executa seu ponto de entrada personalizado da seguinte maneira.

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

Você pode usar qualquer fonte `InputDataConfig` compatível na API `CreateTrainingJob` para fornecer um script de ponto de entrada para executar a imagem de treinamento. 

### Forneça o script de ponto de entrada em um bucket do Amazon S3
<a name="your-algorithms-training-algo-dockerfile-script-s3"></a>

 Para fornecer um script de ponto de entrada personalizado usando um bucket do S3, use o `S3DataSource` parâmetro da [DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource)API para especificar a localização do script. Se você usar o parâmetro `S3DataSource`, os itens a seguir serão obrigatórios:
+ [InputMode](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-InputMode)Deve ser do tipo`File`.
+ O [S3 DataDistributionType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource) deve ser`FullyReplicated`.

O exemplo a seguir tem um script chamado custom\$1entrypoint.sh colocado em um caminho para um bucket `s3://<bucket-name>/<bucket prefix>/custom_entrypoint.sh` do S3.

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

Em seguida, você deve definir a configuração do canal de dados de entrada para executar um trabalho de treinamento. Faça isso usando o AWS CLI diretamente ou com um arquivo JSON.

#### Configure o canal de dados de entrada usando AWS CLI um arquivo JSON
<a name="your-algorithms-training-algo-dockerfile-script-s3-json"></a>

Para configurar seu canal de dados de entrada com um arquivo JSON, use AWS CLI conforme mostrado na estrutura de código a seguir. Certifique-se de que todos os campos a seguir usem a sintaxe de solicitação definida na [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",
    },
    ...]
}
```

Em seguida, execute o AWS CLI comando para iniciar o trabalho de treinamento a partir do arquivo JSON da seguinte maneira.

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

#### Configure o canal de dados de entrada usando AWS CLI diretamente
<a name="your-algorithms-training-algo-dockerfile-script-s3-directly"></a>

Para configurar seu canal de dados de entrada sem um arquivo JSON, use a estrutura de AWS CLI código a seguir.

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

# Como a Amazon SageMaker AI fornece informações de treinamento
<a name="your-algorithms-training-algo-running-container"></a>

Esta seção explica como a SageMaker IA disponibiliza informações de treinamento, como dados de treinamento, hiperparâmetros e outras informações de configuração, para seu contêiner do Docker. 

Ao enviar uma [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)solicitação à SageMaker IA para iniciar o treinamento do modelo, você especifica o caminho do Amazon Elastic Container Registry (Amazon ECR) da imagem do Docker que contém o algoritmo de treinamento. Você também especifica o local do Amazon Simple Storage Service (Amazon S3) onde os dados de treinamento são armazenados e os parâmetros específicos do algoritmo. SageMaker A IA disponibiliza essas informações para o contêiner do Docker para que seu algoritmo de treinamento possa usá-las. Esta seção explica como disponibilizamos essas informações para o seu contêiner do Docker. Para obter informações sobre como criar um trabalho de treinamento, consulte `CreateTrainingJob`. Para obter mais informações sobre como os contêineres de SageMaker IA organizam as informações, consulte[SageMaker Kits de ferramentas de treinamento e inferência](amazon-sagemaker-toolkits.md).

**Topics**
+ [Hiperparâmetros](#your-algorithms-training-algo-running-container-hyperparameters)
+ [Variáveis de ambiente](#your-algorithms-training-algo-running-container-environment-variables)
+ [Configuração dos dados de entrada](#your-algorithms-training-algo-running-container-inputdataconfig)
+ [Dados de treinamento](#your-algorithms-training-algo-running-container-trainingdata)
+ [Configuração do treinamento distribuído](#your-algorithms-training-algo-running-container-dist-training)

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

 SageMaker A IA disponibiliza os hiperparâmetros em uma `CreateTrainingJob` solicitação no contêiner do Docker no `/opt/ml/input/config/hyperparameters.json` arquivo.

A seguir está um exemplo de uma configuração de hiperparâmetros `hyperparameters.json` para especificar os `eta` hiperparâmetros `num_round` e na `CreateTrainingJob` operação para. [XGBoost](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html) 

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

Para obter uma lista completa dos hiperparâmetros que podem ser usados para o XGBoost algoritmo integrado de SageMaker IA, consulte [XGBoostHiperparâmetros](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost_hyperparameters.html).

Os hiperparâmetros que você pode ajustar dependem do algoritmo que você está treinando. Para obter uma lista dos hiperparâmetros disponíveis para um algoritmo integrado de SageMaker IA, encontre-os listados em **Hiperparâmetros** no link do algoritmo em Use [Amazon SageMaker AI Built-in Algorithms or Pre-Trained](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html) Models.

## Variáveis de ambiente
<a name="your-algorithms-training-algo-running-container-environment-variables"></a>

SageMaker A IA define as seguintes variáveis de ambiente em seu contêiner:
+ TRAINING\$1JOB\$1NAME: Especificado no parâmetro `TrainingJobName` da solicitação `CreateTrainingJob`.
+ TRAINING\$1JOB\$1ARN o nome do recurso da Amazon (ARN) do trabalho de treinamento retornado como o `TrainingJobArn` na resposta `CreateTrainingJob`.
+ Todas as variáveis de ambiente especificadas no parâmetro de [Ambiente](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#sagemaker-CreateTrainingJob-request-Environment) na solicitação `CreateTrainingJob`.

## Configuração dos dados de entrada
<a name="your-algorithms-training-algo-running-container-inputdataconfig"></a>

SageMaker A IA disponibiliza as informações do canal de dados no `InputDataConfig` parâmetro da sua `CreateTrainingJob` solicitação no `/opt/ml/input/config/inputdataconfig.json` arquivo em seu contêiner do Docker.

Por exemplo, suponha que você especifique três canais de dados (`train``evaluation`, e`validation`) em sua solicitação. SageMaker A IA fornece o seguinte 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 A IA fornece somente informações relevantes sobre cada canal de dados (por exemplo, o nome do canal e o tipo de conteúdo) para o contêiner, conforme mostrado no exemplo anterior. `S3DistributionType`será definido como `FullyReplicated` se você especificasse EFS ou FSx Lustre como fontes de dados de entrada.

## Dados de treinamento
<a name="your-algorithms-training-algo-running-container-trainingdata"></a>

O parâmetro `TrainingInputMode` na em `AlgorithmSpecification` na solicitação [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) especifica como o conjunto de dados de treinamento é disponibilizado para seu contêiner. Os seguintes modos de entrada estão disponíveis:
+ **Modo `File`**

  Se você usar o `File` modo como seu `TrainingInputMode` valor, a SageMaker IA definirá os seguintes parâmetros em seu contêiner.
  + O parâmetro `TrainingInputMode` é gravado para o `inputdataconfig.json` como “Arquivo”.
  + O diretório do canal de dados é gravado em `/opt/ml/input/data/channel_name`.

  Se você usa o `File` modo, a SageMaker IA cria um diretório para cada canal. Por exemplo, se você tiver três canais chamados`training`,, e `validation``testing`, a SageMaker AI cria os três diretórios a seguir em seu contêiner do Docker: 
  + `/opt/ml/input/data/training`
  + `/opt/ml/input/data/validation`
  + `/opt/ml/input/data/testing`

  O modo `File` é compatível com as seguintes fontes de dados:
  + Amazon Simple Storage Service (Amazon S3)
  + Amazon Elastic File System (Amazon EFS)
  + Amazon FSx para Lustre
**nota**  
Canais que usam fontes de dados do sistema de arquivos, como Amazon EFS e Amazon, FSx devem usar o `File` modo. Nesse caso, o caminho do diretório fornecido no canal é montado em `/opt/ml/input/data/channel_name`.
+ **Modo `FastFile`**

  Se você usa o `FastFile` modo como seu`TrainingInputNodeParameter`, a SageMaker IA define os seguintes parâmetros em seu contêiner.
  + Semelhante ao modo `File`, no modo `FastFile`, o parâmetro `TrainingInputMode` é gravado para o `inputdataconfig.json` como “Arquivo”.
  + O diretório do canal de dados é gravado em `/opt/ml/input/data/channel_name`.

  O modo `FastFile` é compatível com as seguintes fontes de dados:
  + Amazon S3

  Se você usa o modo `FastFile`, o diretório do canal é montado com permissão somente para leitura.

  Historicamente, o modo `File` precedeu o modo `FastFile`. Para garantir a compatibilidade retroativa, os algoritmos compatíveis com o modo `File` também podem funcionar perfeitamente com o modo `FastFile`, desde que o parâmetro `TrainingInputMode` esteja definido como `File` no `inputdataconfig.json.`.
**nota**  
Os canais que usam o modo `FastFile` devem usar um `S3DataType` do “S3Prefix”.  
O modo `FastFile` apresenta uma visualização de pasta que usa a barra (`/`) como delimitador para agrupar objetos do Amazon S3 em pastas. Os prefixos `S3Uri` não devem corresponder a um nome de pasta parcial. Por exemplo, se um conjunto de dados do Amazon S3 contém `s3://amzn-s3-demo-bucket/train-01/data.csv`, então, nem o `s3://amzn-s3-demo-bucket/train` nem o `s3://amzn-s3-demo-bucket/train-01` são permitidos como prefixos `S3Uri`.  
É recomendável usar uma barra no final para definir um canal correspondente a uma pasta. Por exemplo, o canal `s3://amzn-s3-demo-bucket/train-01/` da pasta `train-01`. Sem a barra final, o canal seria ambíguo se existisse outra pasta `s3://amzn-s3-demo-bucket/train-011/` ou arquivo `s3://amzn-s3-demo-bucket/train-01.txt/`.
+ **Modo `Pipe`**
  + Parâmetro `TrainingInputMode`escrito em `inputdataconfig.json`: “Pipe”
  + Diretório do canal de dados no contêiner do Docker: `/opt/ml/input/data/channel_name_epoch_number`
  + Fontes de dados compatíveis: Amazon S3

  Você precisa ler em um pipe separado para cada canal. Por exemplo, se você tiver três canais denominados `training`, `validation` e `testing`, precisará fazer a leitura dos seguintes pipes:
  + `/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, ...`

  Leia os pipes sequencialmente. Por exemplo, se você tiver um canal denominado `training`, leia os pipes nesta sequência: 

  1. Abra `/opt/ml/input/data/training_0` no modo de leitura e leia para end-of-file (EOF) ou, se você tiver terminado com a primeira época, feche o arquivo pipe mais cedo. 

  1. Depois de fechar o primeiro arquivo pipe, procure `/opt/ml/input/data/training_1` e leia-o até que você tenha concluído o segundo epoch e assim por diante.

  Se o arquivo de um determinado epoch ainda não existir, pode ser que o código precise tentar novamente até que o pipe seja criado. Não há restrição de sequenciamento nos tipos de canais. Ou seja, é possível ler vários epochs para o canal `training` e apenas começar a ler o canal `validation` somente quando você estiver pronto. Alternativamente, será possível lê-los simultaneamente se o algoritmo assim exigir.

  Para ver um exemplo de um notebook Jupyter que mostra como usar o modo Pipe ao trazer seu próprio contêiner, consulte [Traga seu próprio algoritmo de modo de tubulação](https://github.com/aws/amazon-sagemaker-examples/blob/main/advanced_functionality/pipe_bring_your_own/pipe_bring_your_own.ipynb) para a Amazon AI. SageMaker 

  

SageMaker O treinamento do modelo de IA oferece suporte a buckets de diretório S3 Express One Zone de alto desempenho como um local de entrada de dados para o modo de arquivo, modo de arquivo rápido e modo pipe. Para usar o S3 Express One Zone, insira a localização do bucket de diretório do S3 Express One Zone em vez de um bucket de uso geral do Amazon S3. Forneça o ARN para o perfil do IAM com o controle de acesso e a política de permissões necessários. Para mais detalhes, consulte [AmazonSageMakerFullAccesspolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerFullAccess.html). Você só pode criptografar seus dados de saída de SageMaker IA em buckets de diretório com criptografia do lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3). Atualmente, a criptografia do lado do servidor com AWS KMS chaves (SSE-KMS) não é suportada para armazenar dados de saída de SageMaker IA em buckets de diretório. Para obter mais informações, consulte [S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html).

## Configuração do treinamento distribuído
<a name="your-algorithms-training-algo-running-container-dist-training"></a>

Se você estiver realizando um treinamento distribuído com vários contêineres, a SageMaker IA disponibiliza informações sobre todos os contêineres no `/opt/ml/input/config/resourceconfig.json` arquivo.

Para permitir a comunicação entre contêineres, esse arquivo JSON contém informações de todos os contêineres. SageMaker A IA disponibiliza esse arquivo para algoritmos `File` de ambos os `Pipe` modos. O arquivo fornece as seguintes informações:
+ `current_host`: o nome do contêiner atual na rede de contêineres. Por exemplo, .`algo-1` Os valores de host podem ser alterados a qualquer momento. Não escreva código com valores específicos para essa variável.
+ `hosts`: a lista de nomes de todos os contêineres da rede de contêineres, classificados lexicograficamente. Por exemplo, `["algo-1", "algo-2", "algo-3"]` para um cluster de três nós. Os contêineres podem usar esses nomes para tratar outros contêineres da rede. Os valores de host podem ser alterados a qualquer momento. Não escreva código com valores específicos para essas variáveis.
+ `network_interface_name`: o nome da interface de rede exposta ao seu contêiner. Por exemplo, os contêineres que executam Message Passing Interface (MPI) podem usar essas informações para definir o nome da interface de rede.
+ Não use as informações em `/etc/hostname` ou `/etc/hosts` porque elas podem ser imprecisas.
+ Informações do nome de host podem não estar imediatamente disponíveis para o contêiner do algoritmo. Recomendamos adicionar uma política de nova tentativa em operações de resolução de nomes de host à medida que os nós se tornarem disponíveis no cluster.

Veja a seguir um exemplo de arquivo no nó 1 em um cluster de três nós:

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

# Executar treinamento com EFA
<a name="your-algorithms-training-efa"></a>

 SageMaker A IA fornece integração com dispositivos [EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) para acelerar aplicativos de computação de alto desempenho (HPC) e aprendizado de máquina. Essa integração permite que você aproveite um dispositivo EFA ao executar seus trabalhos de treinamento distribuídos. Você pode adicionar a integração do EFA a um contêiner Docker existente que você traz para a SageMaker IA. As informações a seguir descrevem como configurar seu próprio contêiner para usar um dispositivo EFA em seus trabalhos de treinamento distribuídos. 

## Pré-requisitos
<a name="your-algorithms-training-efa-prereq"></a>

 Seu contêiner deve atender às [especificações do contêiner de SageMaker treinamento](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-dockerfile.html).  

## Instale o EFA e os pacotes obrigatórios
<a name="your-algorithms-training-efa-install"></a>

Seu contêiner deve baixar e instalar o [software EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html). Isso permite que seu contêiner reconheça o dispositivo EFA e forneça versões compatíveis do Libfabric e do Open MPI. 

Todas as ferramentas, como MPI e NCCL, devem ser instaladas e gerenciadas dentro do contêiner para serem usadas como parte de seu trabalho de treinamento habilitado para EFA. Para obter uma lista de todas as versões disponíveis do EFA, consulte [Verificar o instalador do EFA usando uma soma de verificação](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-verify.html). O exemplo a seguir mostra como modificar o Dockerfile do seu contêiner habilitado para EFA para instalar EFA, MPI, OFI, NCCL e NCCL-TEST.

**nota**  
Ao usar PyTorch com o EFA em seu contêiner, a versão NCCL do seu contêiner deve corresponder à versão NCCL da sua instalação. PyTorch Para verificar a versão da PyTorch NCCL, use o seguinte 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
```

## Considerações ao criar seu contêiner
<a name="your-algorithms-training-efa-considerations"></a>

O dispositivo EFA é montado no contêiner conforme a lista `/dev/infiniband/uverbs0` de dispositivos acessíveis ao contêiner. Nas instâncias P4d, o contêiner tem acesso a 4 dispositivos EFA. Os dispositivos EFA podem ser encontrados na lista de dispositivos acessíveis ao contêiner como: 
+  `/dev/infiniband/uverbs0` 
+  `/dev/infiniband/uverbs1` 
+  `/dev/infiniband/uverbs2` 
+  `/dev/infiniband/uverbs3` 

 Para obter informações sobre nome de host, nomes de host de mesmo nível e interface de rede (para MPI) do `resourceconfig.json` arquivo fornecido para cada instância de contêiner, consulte [Configuração de treinamento distribuído](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training). Seu contêiner processa tráfego TCP regular entre pares por meio das interfaces de rede elástica (ENI) padrão, enquanto processa o tráfego OFI (kernel bypass) por meio do dispositivo EFA. 

## Verifique se seu dispositivo EFA é reconhecido
<a name="your-algorithms-training-efa-verify"></a>

  Para verificar se o dispositivo EFA é reconhecido, execute o seguinte comando no seu contêiner: 

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

O resultado deve ser semelhante ao seguinte:

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

## Executando um trabalho de treinamento na EFA
<a name="your-algorithms-training-efa-run"></a>

 Depois de criar um contêiner habilitado para EFA, você pode executar um trabalho de treinamento com o EFA usando um estimador de SageMaker IA da mesma forma que faria com qualquer outra imagem do Docker. Para obter mais informações sobre como registrar seu contêiner e usá-lo para treinamento, consulte [Adaptando seu próprio contêiner de treinamento](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html#byoc-training-step5).

# Como a Amazon SageMaker AI sinaliza o sucesso e o fracasso do algoritmo
<a name="your-algorithms-training-signal-success-failure"></a>

Um algoritmo de treinamento indica se ele foi bem-sucedido ou apresentou falhas. Para isso, usa o código de saída do processo. 

Se uma execução de treinamento for bem-sucedida, seu código de saída será 0; do contrário, o código será diferente de zero. Tais resultados são convertidos para `Completed` e `Failed` no `TrainingJobStatus` retornado pelo `DescribeTrainingJob`. Essa convenção de código de saída é padrão e facilmente implementada em todas as linguagens. Por exemplo, no Python, você pode usar `sys.exit(1)` para sinalizar uma saída com falha. Basta executar até o final da rotina principal para que o Python saia com um código 0.

Em caso de falha, o algoritmo pode gravar uma descrição da falha no arquivo em questão. Consulte a próxima seção para saber os detalhes.

# Como a Amazon SageMaker AI processa os resultados de treinamento
<a name="your-algorithms-training-algo-output"></a>

À medida que é executado em um contêiner, o algoritmo gera um resultado, incluindo o status do trabalho de treinamento e do modelo e os artefatos de saída. O algoritmo deve gravar essas informações nos seguintes arquivos, que estão localizados no diretório `/output` do contêiner: A Amazon SageMaker AI processa as informações contidas nesse diretório da seguinte forma:
+ `/opt/ml/model`— Seu algoritmo deve gravar todos os artefatos do modelo final nesse diretório. SageMaker A IA copia esses dados como um único objeto no formato tar compactado para o local do S3 que você especificou na `CreateTrainingJob` solicitação. Se vários contêineres em um único trabalho de treinamento gravarem nesse diretório, eles devem garantir que nenhum `file/directory` nome entre em conflito. SageMaker A IA agrega o resultado em um arquivo TAR e faz o upload para o S3 no final do trabalho de treinamento. 
+ `/opt/ml/output/data`— Seu algoritmo deve gravar artefatos que você deseja armazenar, além do modelo final, nesse diretório. SageMaker A IA copia esses dados como um único objeto no formato tar compactado para o local do S3 que você especificou na `CreateTrainingJob` solicitação. Se vários contêineres em um único trabalho de treinamento gravarem nesse diretório, eles devem garantir que nenhum `file/directory` nome entre em conflito. SageMaker A IA agrega o resultado em um arquivo TAR e faz o upload para o S3 no final do trabalho de treinamento.
+ `/opt/ml/output/failure`: Se o treinamento apresentar falhas, depois que todos os resultados do algoritmo (por exemplo, o registro em logs) estiverem concluídos, o algoritmo deverá gravar a descrição da falha nesse arquivo. Em `DescribeTrainingJob` resposta, a SageMaker IA retorna os primeiros 1024 caracteres desse arquivo como`FailureReason`. 

Você pode especificar um bucket de uso geral do S3 ou um bucket de diretório do S3 para armazenar sua saída de treinamento. Os buckets de diretório usam apenas a classe de armazenamento Amazon S3 Express One Zone, projetada para workloads ou aplicações de performance crítica que exigem latência consistente inferior a dez milissegundos. Escolha o tipo de bucket que melhor se adapte aos requisitos de performance e da aplicação. Para mais informações sobre os buckets do diretório do S3, consulte [Buckets de diretório](https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html) no *Guia do usuário do Amazon Simple Storage Service*. 

**nota**  
Você só pode criptografar seus dados de saída de SageMaker IA em buckets de diretório do S3 com criptografia do lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3). Atualmente, a criptografia do lado do servidor com AWS KMS chaves (SSE-KMS) não é suportada para armazenar dados de saída de SageMaker IA em buckets de diretório.