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á.
Computação distribuída com as melhores práticas de SageMaker IA
Esta página de melhores práticas apresenta vários tipos de computação distribuída para trabalhos de machine learning (ML) em geral. O termo computação distribuída nesta página abrange treinamento distribuído para tarefas de machine learning e computação paralela para processamento de dados, geração de dados, engenharia de atributos e aprendizado por reforço. Nesta página, discutimos sobre os desafios comuns da computação distribuída e as opções disponíveis em SageMaker Treinamento e SageMaker Processamento. Para obter materiais de leitura adicionais sobre computação distribuída, consulte O que é computação distribuída?
Você pode configurar tarefas de ML para serem executadas de forma distribuída em vários nós (instâncias), aceleradores (chips NVIDIA GPUs, AWS Trainium) e núcleos de vCPU. Quando executar a computação distribuída, você pode atingir uma variedade de objetivos, como operações de computação mais rápidas, lidar com grandes conjuntos de dados ou treinar grandes modelos de ML.
A lista a seguir aborda os desafios comuns que você pode enfrentar quando executar um trabalho de treinamento de ML em grande escala.
-
Você precisa tomar decisões sobre como distribuir a computação, dependendo das tarefas de ML, das bibliotecas de software que você deseja usar e dos recursos computacionais.
-
Nem todas as tarefas de ML são fáceis de distribuir. Além disso, nem todas as bibliotecas de ML oferecem apoio à computação distribuída.
-
A computação distribuída pode nem sempre resultar em um aumento linear na eficiência computacional. Em particular, você precisa identificar se a E/S de dados e a comunicação entre GPUs têm gargalos ou causam sobrecarga.
-
A computação distribuída pode perturbar os processos numéricos e alterar a precisão do modelo. Especificamente para o treinamento de redes neurais paralelas a dados, quando você altera o tamanho do lote global ao aumentar a escala verticalmente para um cluster de computação maior, também precisa ajustar a taxa de aprendizado adequadamente.
SageMaker A IA fornece soluções de treinamento distribuídas para facilitar esses desafios em vários casos de uso. Escolha uma das opções a seguir que melhor se adequa ao seu caso de uso.
Tópicos
Opção 1: usar um algoritmo de SageMaker IA integrado que ofereça suporte ao treinamento distribuído
SageMaker A IA fornece algoritmos integrados que você pode usar imediatamente por meio do console de SageMaker IA ou do SDK do SageMaker Python. Usando os algoritmos integrados, você não precisa perder tempo personalizando códigos, entendendo a ciência por trás dos modelos ou executando o Docker em instâncias provisionadas da Amazon. EC2
Um subconjunto dos algoritmos integrados de SageMaker IA oferece suporte ao treinamento distribuído. Para verificar se o algoritmo de sua escolha oferece apoio ao treinamento distribuído, consulte a coluna Paralelizável na tabela Informações comuns sobre algoritmos integrados. Alguns dos algoritmos oferecem suporte ao treinamento distribuído em várias instâncias, enquanto o restante dos algoritmos paralelizáveis oferece suporte à paralelização entre várias em uma única instância, conforme indicado GPUs na coluna Paralelizável.
Opção 2: executar um código de ML personalizado no ambiente de treinamento ou processamento gerenciado por SageMaker IA
SageMaker Os trabalhos de IA podem instanciar um ambiente de treinamento distribuído para casos de uso e estruturas específicos. Esse ambiente funciona como um ready-to-use quadro branco, onde você pode trazer e executar seu próprio código de ML.
Se o seu código de ML usa uma estrutura de aprendizado profundo
Você pode iniciar trabalhos de treinamento distribuídos usando o Deep Learning Containers (DLC)
-
As bibliotecas de treinamento distribuídas pela SageMaker IA
As bibliotecas de treinamento distribuídas de SageMaker IA propõem código AWS gerenciado para paralelismo de dados de redes neurais e paralelismo de modelos. SageMaker O treinamento distribuído de IA também vem com clientes lançadores integrados ao SDK do SageMaker Python, e você não precisa criar um código de lançamento paralelo. Para saber mais, consulte a biblioteca de paralelismo de dados da SageMaker IA e a biblioteca de paralelismo de modelos da SageMaker IA.
-
Bibliotecas de treinamento distribuído de código aberto
As estruturas de código aberto têm seus próprios mecanismos de distribuição, como DistributedDataParallelism (DDP) em PyTorch ou
tf.distribute
módulos em. TensorFlow Você pode optar por executar essas estruturas de treinamento distribuídas nos contêineres da estrutura SageMaker gerenciada por IA. Por exemplo, o código de exemplo para treinar o MaskRCNN em SageMaker IA mostra como usar o PyTorch DDP no contêiner da estrutura de SageMaker IA e o Horovod no contêiner da PyTorch estrutura. SageMaker TensorFlow
SageMaker Os contêineres de AI ML também vêm com o MPI
Notas para treinamento de rede neural paralela a dados em GPUs
-
Escale para paralelismo com várias GPUs e várias máquinas quando apropriado
Frequentemente, executamos trabalhos de treinamento de redes neurais em instâncias de várias CPUs ou GPUs. Cada instância baseada em GPU geralmente contém vários dispositivos de GPU. Consequentemente, a computação distribuída de GPU pode ocorrer em uma única instância de GPU com várias GPUs (treinamento de várias GPUs de um único nó) ou em várias instâncias de GPU com vários núcleos de GPU em cada uma (treinamento de vários nós com várias GPUs). O treinamento em instância única é mais fácil de escrever código e depurar, e a taxa de transferência entre nós geralmente é mais rápida do que a taxa de GPU-to-GPU transferência entre nós. GPU-to-GPU Portanto, é uma boa ideia escalar o paralelismo de dados verticalmente primeiro (usar uma instância de GPU com várias GPUs) e expandir para várias instâncias de GPU, se necessário. Isso pode não se aplicar aos casos em que o orçamento da CPU é alto (por exemplo, uma grande carga de trabalho para pré-processamento de dados) e quando a CPU-to-GPU proporção de uma instância com várias GPUs é muito baixa. Em todos os casos, você precisa experimentar diferentes combinações de tipos de instância com base em suas próprias necessidades de treinamento de ML e workload.
-
Monitore a qualidade da convergência
Ao treinar uma rede neural com paralelismo de dados, aumentar o número de e manter constante o tamanho do minilote por GPU leva GPUs ao aumento do tamanho do minilote global para o processo de descida de gradiente estocástico (MSGD) do minilote. Sabe-se que o tamanho dos minilotes do MSGD afeta o ruído descendente e a convergência. Para escalar adequadamente e preservar a precisão, você precisa ajustar outros hiperparâmetros, como a taxa de aprendizado [Goyal et al.
(2017)]. -
Monitorar gargalos de E/S
À medida que você aumenta o número de GPUs, a taxa de transferência do armazenamento de leitura e gravação também deve aumentar. Certifique-se de que sua fonte de dados e seu pipeline não se tornem gargalos.
-
Modifique seu script de treinamento conforme necessário
Os scripts de treinamento escritos para treinamento com uma única GPU devem ser modificados para treinamento com vários nós e várias GPUs. Na maioria das bibliotecas de paralelismo de dados, a modificação do script é necessária para fazer o seguinte:
-
Atribua lotes de dados de treinamento a cada GPU.
-
Use um otimizador que possa lidar com cálculos de gradientes e atualizações de parâmetros em vários. GPUs
-
Atribua a responsabilidade do ponto de verificação a um host e GPU específicos.
-
Se seu código de ML envolver processamento tabular de dados
PySpark é uma interface Python do Apache Spark, que é uma estrutura de computação distribuída de código aberto. PySpark tem sido amplamente adotado para processamento distribuído de dados tabulares para cargas de trabalho de produção em grande escala. Se você quiser executar o código tabular de processamento de dados, considere usar os PySpark contêineres SageMaker de processamento e executar trabalhos paralelos. Você também pode executar trabalhos de processamento de dados paralelamente usando o SageMaker Training and SageMaker Processing APIs no Amazon SageMaker Studio Classic, que é integrado ao Amazon EMR e. AWS Glue
Opção 3: escrever seu próprio código de treinamento distribuído personalizado
Quando você envia um trabalho de treinamento ou processamento para a SageMaker IA, o SageMaker Training e o SageMaker AI Processing APIs iniciam as instâncias de EC2 computação da Amazon. Você pode personalizar o ambiente de treinamento e processamento nas instâncias executando seu próprio contêiner Docker ou instalando bibliotecas adicionais nos contêineres AWS gerenciados. Para obter mais informações sobre o Docker with SageMaker Training, consulte Adaptar seu próprio contêiner do Docker para trabalhar com SageMaker IA e Criar um contêiner com seus próprios algoritmos e modelos. Para obter mais informações sobre o Docker com SageMaker AI Processing, consulte Use seu próprio código de processamento.
Cada ambiente SageMaker de trabalho de treinamento contém um arquivo de configuração em/opt/ml/input/config/resourceconfig.json
, e todo ambiente SageMaker de trabalho de processamento contém um arquivo de configuração semelhante em/opt/ml/config/resourceconfig.json
. Seu código pode ler esse arquivo para encontrar hostnames
e estabelecer comunicações entre nós. Para saber mais, incluindo o esquema do arquivo JSON, consulte Configuração de treinamento distribuído e Como o Amazon SageMaker Processing configura seu contêiner de processamento. Você também pode instalar e usar bibliotecas de computação distribuída de terceiros, como Ray
Você também pode usar SageMaker Treinamento e SageMaker Processamento para executar cálculos distribuídos personalizados que não exijam comunicação entre trabalhadores. Na literatura de computação, essas tarefas são frequentemente descritas como embaraçosamente paralelas ou que não compartilham nada. Os exemplos incluem processamento paralelo de arquivos de dados, treinamento de modelos em paralelo em configurações diferentes ou execução de inferência em lote em uma coleção de registros. Você pode paralelizar trivialmente esses casos de uso sem compartilhar nada com a Amazon AI. SageMaker Quando você inicia um trabalho de SageMaker treinamento ou SageMaker processamento em um cluster com vários nós, a SageMaker IA, por padrão, replica e inicia seu código de treinamento (em Python ou Docker) em todos os nós. Tarefas que exigem distribuição aleatória de dados de entrada entre esses vários nós podem ser facilitadas S3DataDistributionType=ShardedByS3Key
definindo a configuração de entrada de dados da TrainingInput
API de SageMaker IA.
Opção 4: iniciar vários trabalhos em paralelo ou sequencialmente
Você também pode distribuir um fluxo de trabalho de computação de ML em tarefas computacionais paralelas ou sequenciais menores, cada uma representada por seu próprio trabalho de SageMaker treinamento ou SageMaker processamento. Dividir uma tarefa em vários trabalhos pode ser benéfico para as seguintes situações ou tarefas:
-
Quando você tem canais de dados e entradas de metadados específicos (como hiperparâmetros, configuração do modelo ou tipos de instância) para cada subtarefa.
-
Quando você implementa etapas de repetição em nível de subtarefa.
-
Quando você varia a configuração das subtarefas ao longo da workload, como ao treinar para aumentar o tamanho dos lotes.
-
Quando você precisa executar uma tarefa de ML que demore mais do que o tempo máximo de treinamento permitido para um único trabalho de treinamento (máximo de 28 dias).
-
Quando diferentes etapas de um fluxo de trabalho computacional exigem tipos de instância diferentes.
Para o caso específico da pesquisa por hiperparâmetros, use o SageMaker AI Automated Model Tuning. SageMaker O AI Automated Model Tuning é um orquestrador de pesquisa de parâmetros sem servidor que lança vários trabalhos de treinamento em seu nome, de acordo com uma lógica de pesquisa que pode ser aleatória, bayesiana ou. HyperBand
Além disso, para orquestrar vários trabalhos de treinamento, você também pode considerar ferramentas de orquestração de fluxo de trabalho, como Pipelines SageMaker ,