

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

# Dicas de configuração para a biblioteca de paralelismo de dados distribuídos de SageMaker IA
<a name="data-parallel-config"></a>

Leia as dicas a seguir antes de usar a biblioteca de paralelismo de dados distribuídos de SageMaker IA (SMDDP). Essa lista inclui dicas que são aplicáveis a todos os frameworks.

**Topics**
+ [Pré-processamento de dados](#data-parallel-config-dataprep)
+ [Nós únicos versus múltiplos](#data-parallel-config-multi-node)
+ [Eficiência de ajuste de escala de depuração com o Depurador](#data-parallel-config-debug)
+ [Tamanho do lote](#data-parallel-config-batch-size)
+ [Opções personalizadas de MPI](#data-parallel-config-mpi-custom)
+ [Use o Amazon FSx e configure uma capacidade de throughput e de armazenamento ideal](#data-parallel-config-fxs)

## Pré-processamento de dados
<a name="data-parallel-config-dataprep"></a>

Se você pré-processa dados durante o treinamento usando uma biblioteca externa que utiliza a CPU, você pode se deparar com um gargalo de CPU porque o AI SageMaker distributed data parallel usa a CPU para operações. `AllReduce` Você pode melhorar o tempo de treinamento movendo as etapas de pré-processamento para uma biblioteca que usa GPUs, ou concluindo todo o pré-processamento antes do treinamento.

## Nós únicos versus múltiplos
<a name="data-parallel-config-multi-node"></a>

Recomendamos o uso dessa biblioteca com vários nós. A biblioteca pode ser usada com uma configuração de um único host e vários dispositivos (por exemplo, uma única instância de computação de ML com várias GPUs); no entanto, quando você usa dois ou mais nós, a operação `AllReduce` da biblioteca proporciona uma melhoria significativa no desempenho. Além disso, em um único host, o NVLink já contribui para a eficiência no nó `AllReduce`.

## Eficiência de ajuste de escala de depuração com o Depurador
<a name="data-parallel-config-debug"></a>

Você pode usar o Amazon SageMaker Debugger para monitorar e visualizar a utilização da CPU e da GPU e outras métricas de interesse durante o treinamento. Você pode usar as [regras integradas](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html) do Depurador para monitorar problemas de performance de computação, como `CPUBottleneck`, `LoadBalancing` e `LowGPUUtilization`. Você pode especificar essas regras com as [configurações do Debugger](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-configuration-for-debugging.html) ao definir um estimador de SDK do Amazon Python SageMaker . Se você usa AWS CLI e AWS SDK para Python (Boto3) para treinar em SageMaker IA, você pode habilitar o Debugger conforme mostrado em [Configurar o depurador usando a API da SageMaker Amazon](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-createtrainingjob-api.html). SageMaker 

[Para ver um exemplo usando o Debugger em um trabalho de SageMaker treinamento, você pode consultar um dos exemplos de cadernos no repositório Notebook Examples. SageMaker GitHub ](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger) [Para saber mais sobre o Debugger, consulte Amazon Debugger. SageMaker ](https://docs.aws.amazon.com/sagemaker/latest/dg/train-debugger.html)

## Tamanho do lote
<a name="data-parallel-config-batch-size"></a>

No treinamento distribuído, à medida que mais nós são adicionados, os tamanhos dos lotes devem aumentar proporcionalmente. Para melhorar a velocidade de convergência à medida que você adiciona mais nós ao seu trabalho de treinamento e aumenta o tamanho do lote global, aumente a taxa de aprendizado.

Uma maneira de conseguir isso é usar um aquecimento gradual da taxa de aprendizado em que a taxa de aprendizado aumenta de um valor pequeno para um valor grande à medida que o trabalho de treinamento progride. Essa rampa evita um aumento repentino da taxa de aprendizado, permitindo uma convergência íntegra no início do treinamento. Por exemplo, você pode usar uma *regra em escala linear* em que cada vez que o tamanho do minilote é multiplicado por k, a taxa de aprendizado também é multiplicada por k. Para saber mais sobre essa técnica, consulte o paper de pesquisa [Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour](https://arxiv.org/pdf/1706.02677.pdf), Seções 2 e 3.

## Opções personalizadas de MPI
<a name="data-parallel-config-mpi-custom"></a>

A biblioteca paralela de dados distribuídos de SageMaker IA emprega a Interface de Passagem de Mensagens (MPI), um padrão popular para gerenciar a comunicação entre nós em um cluster de alto desempenho, e usa a biblioteca NCCL da NVIDIA para comunicação. GPU-level Quando você usa a biblioteca paralela de dados com um TensorFlow ou Pytorch`Estimator`, o respectivo contêiner configura o ambiente MPI e executa o `mpirun` comando para iniciar trabalhos nos nós do cluster.

Você pode definir operações MPI personalizadas usando o parâmetro `custom_mpi_options` no `Estimator`. Todas `mpirun` as bandeiras passadas nesse campo são adicionadas ao `mpirun` comando e executadas pela SageMaker IA para treinamento. Por exemplo, você pode definir o parâmetro `distribution` de um `Estimator` usando o seguinte para usar a variável [https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html#nccl-debug](https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html#nccl-debug) para imprimir a versão NCCL no início do programa:

```
distribution = {'smdistributed':{'dataparallel':{'enabled': True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"}}}
```

## Use o Amazon FSx e configure uma capacidade de throughput e de armazenamento ideal
<a name="data-parallel-config-fxs"></a>

Ao treinar um modelo em vários nós com paralelismo de dados distribuídos, é altamente recomendável usar o [FSx for Lustre](https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html). O Amazon FSx é um serviço de armazenamento escalável e de alto desempenho que oferece apoio ao armazenamento de arquivos compartilhado com uma throughput mais rápida. Usando o armazenamento emescala do Amazon FSx, você pode alcançar uma velocidade de carregamento de dados mais rápida nos nós de computação.

Normalmente, com o paralelismo de dados distribuídos, você esperaria que a throughput total do treinamento fosse escalada quase linearmente com o número de GPUs. No entanto, se você usa o armazenamento FSx Amazon abaixo do ideal, o desempenho do treinamento poderá diminuir devido a uma baixa throughput do Amazon FSx. 

Por exemplo, se você usar o tipo de [implantação **SCRATCH\_2** do sistema de arquivos Amazon FSx](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf) com a capacidade de armazenamento mínima de 1,2 TiB, a capacidade de transferência é 240. I/O MB/s O armazenamento do Amazon FSx funciona de forma que você possa atribuir dispositivos de armazenamento físico e, quanto mais dispositivos forem atribuídos, maior será a throughput. O menor incremento de armazenamento para o tipo SRATCH\_2 é 1,2 TiB e o ganho de taxa de transferência correspondente é 240. MB/s

Suponha que você tem um modelo para treinar em um cluster de 4 nós em um conjunto de dados de 100 GB. Com um determinado tamanho do lote otimizado para o cluster, suponha que o modelo possa concluir uma epoch em cerca de 30 segundos. Nesse caso, a I/O velocidade mínima necessária é de aproximadamente 3 GB/s (100 GB/30 s). Aparentemente, esse é um requisito de taxa de transferência muito maior do que 240 MB/s. Com uma capacidade tão limitada do Amazon FSx, escalar seu trabalho de treinamento distribuído para clusters maiores pode agravar os problemas de I/O gargalo; a taxa de transferência do treinamento de modelos pode melhorar em épocas posteriores à medida que o cache se acumula, mas a taxa de transferência do Amazon FSx ainda pode ser um gargalo.

Para aliviar esses problemas de I/O gargalo, você deve aumentar o tamanho do armazenamento do Amazon FSx para obter uma maior capacidade de transferência. Normalmente, para encontrar uma taxa de I/O transferência ideal, você pode experimentar diferentes capacidades de taxa de transferência do Amazon FSx, atribuindo uma taxa de transferência igual ou ligeiramente inferior à sua estimativa, até descobrir que ela é suficiente para resolver os problemas de gargalo. I/O No caso do exemplo acima mencionado, o armazenamento Amazon FSx com taxa de GB/s transferência de 2,4 e cache de 67 GB de RAM seria suficiente. Se o sistema de arquivos tiver uma throughput ideal, a throughput de treinamento de modelos deve atingir o máximo imediatamente ou após a primeira epoch, à medida que o cache se acumula.

Para saber mais sobre como aumentar os tipos de armazenamento e implantação do Amazon FSx, consulte as seguintes páginas na documentação do *Amazon FSx para Lustre*:
+  [Como aumentar a capacidade de armazenamento](https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-storage-capacity.html#increase-storage-capacity) 
+  [Performance do sistema de arquivos agregados](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf) 