Computação distribuída com as melhores práticas de SageMaker IA - SageMaker IA da Amazon

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.

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) for SageMaker Training, que você pode orquestrar por meio dos módulos dedicados do Python no SDK AI SageMaker Python ou por meio do with,. SageMaker APIs AWS CLIAWS SDK for Python (Boto3) SageMaker A IA fornece contêineres de treinamento para estruturas de aprendizado de máquina PyTorchTensorFlow, incluindo Hugging Face Transformers e Apache. MXNet Você tem duas opções para escrever código de aprendizado profundo para treinamento distribuído.

  • 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 pré-instalado, para que você possa paralelizar seu script de ponto de entrada usando mpi4py. Usar os contêineres de treinamento integrados MPI é uma ótima opção quando você inicia um lançador de treinamento distribuído terceirizado ou escreve código paralelo ad-hoc no SageMaker ambiente de treinamento gerenciado por IA.

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 ou DeepSpeed em SageMaker AI.

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 , Step AWS Functions e Apache Airflow, suportadas pelo Amazon Managed Workflows for Apache Airflow (MWAA) e AI Workflows. SageMaker