Dicas de configuração para a biblioteca de SageMaker paralelismo de dados distribuídos - Amazon SageMaker

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 SageMaker paralelismo de dados distribuídos

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

Pré-processamento de dados

Se você pré-processar dados durante o treinamento usando uma biblioteca externa que utiliza a CPU, você pode se deparar com um gargalo de CPU porque o Distributed SageMaker 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ódulos únicos versus múltiplos

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 na performance. Além disso, em um único host, o NVLink já contribui para a eficiência no nó AllReduce.

Depure a eficiência do escalonamento com o Debugger

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 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 ao definir um estimador de SDK do Amazon Python SageMaker . Se você usa AWS CLI e AWS SDK for Python (Boto3) para treinar SageMaker, você pode habilitar o Debugger conforme mostrado em Configurar o depurador usando a API da SageMaker Amazon. 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 Para saber mais sobre o Debugger, consulte Amazon Debugger. SageMaker

Tamanho do lote

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

Uma maneira de conseguir isso é usar um aquecimento gradual da taxa de aprendizagem em que a taxa de aprendizagem 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 aprendizagem, 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 aprendizagem 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, Seções 2 e 3.

Opções personalizadas de MPI

A biblioteca paralela de dados SageMaker distribuídos 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 em nível de GPU. Quando você usa a biblioteca paralela de dados com um TensorFlow ou PytorchEstimator, 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 por SageMaker para treinamento. Por exemplo, você pode definir o parâmetro distribution de um Estimator usando o seguinte para usar a variável 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

Ao treinar um modelo em vários nós com paralelismo de dados distribuídos, é altamente recomendável usar o FSx for Lustre. O Amazon FSx é um serviço de armazenamento escalável e de alta performance que oferece suporte ao armazenamento de arquivos compartilhado com uma taxa de transferência mais rápida. Usando o armazenamento FSX da Amazon em escala, 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 taxa de transferência 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, a performance do treinamento poderá diminuir devido a uma baixa taxa de transferência do Amazon FSx.

Por exemplo, se você usa o tipo de implantação SCRATCH_2 dos sistemas de arquivos FSx da Amazon com a capacidade de armazenamento mínima de 1.2 TiB, a capacidade de throughput de E/S é 240 MB/s. O armazenamento FSx da Amazon funciona de forma que você possa atribuir dispositivos de armazenamento físico e, quanto mais dispositivos forem atribuídos, maior será a taxa de transferência. O menor incremento de armazenamento para o tipo SRATCH_2 é de 1.2 TiB e o ganho de taxa de transferência correspondente é de 240 MB/s.

Suponha que você tem um modelo para treinar em um cluster de 4 nódulos 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 velocidade mínima de E/S obrigatória é de aproximadamente 3 Gb/s (100 GB/ 30 s). Aparentemente, este é um requisito de throughput mais alta 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 gargalo de E/S; a taxa de transferência do treinamento de modelos pode melhorar em epochs 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 gargalo de E/S, você deve aumentar o tamanho do armazenamento do Amazon FSx para obter uma maior capacidade de throughput. Normalmente, para encontrar uma taxa de transferência de E/S ideal, você pode experimentar diferentes capacidades de throughput do Amazon FSx, atribuindo uma taxa de transferência igual ou um pouco menor do que sua estimativa, até descobrir que é suficiente para resolver os problemas de gargalo de E/S. No caso do exemplo acima mencionado, o armazenamento FSx da Amazon com taxa de transferência de 2,4 GB/s e 67 GB de cache de RAM seria suficiente. Se o sistema de arquivos tiver uma taxa de transferência ideal, a taxa de transferência 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 for Lustre: