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
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.
Tópicos
Pré-processamento de dados
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
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
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 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. 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
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 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
Opções personalizadas de MPI
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 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 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 NCCL_DEBUG
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 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 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: