Solução de problemas para treinamento distribuído no Amazon SageMaker AI - 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á.

Solução de problemas para treinamento distribuído no Amazon SageMaker AI

Se você tiver problemas ao executar um trabalho de treinamento ao usar a biblioteca, use a lista a seguir para tentar solucionar o problema. Se precisar de compatibilidade adicional, entre em contato com a equipe do SageMaker AI por meio do AWS Support Center ou dos fóruns de desenvolvedores da AWS para o Amazon SageMaker AI.

Usar o paralelismo de dados distribuídos do SageMaker AI com o Amazon SageMaker Debugger e pontos de verificação

Para monitorar gargalos do sistema, criar perfis de operações de framework e depurar tensores de saída do modelo para tarefas de treinamento com o paralelismo de dados distribuídos do SageMaker AI, use o Amazon SageMaker Debugger.

No entanto, ao usar o SageMaker Debugger, o paralelismo de dados distribuídos do SageMaker AI e os pontos de verificação do SageMaker AI, você pode ver um erro parecido com o exemplo a seguir.

SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled

Isso ocorre devido a um erro interno entre o Debugger e os pontos de verificação que ocorre quando você habilita o paralelismo de dados distribuídos do SageMaker AI.

  • Se você habilitar todos os três atributos, o SageMaker Python SDK desativará automaticamente o Depurador ao passar debugger_hook_config=False, o que equivale ao exemplo de framework estimator a seguir.

    bucket=sagemaker.Session().default_bucket() base_job_name="sagemaker-checkpoint-test" checkpoint_in_bucket="checkpoints" # The S3 URI to store the checkpoints checkpoint_s3_bucket="s3://{}/{}/{}".format(bucket, base_job_name, checkpoint_in_bucket) estimator = TensorFlow( ... distribution={"smdistributed": {"dataparallel": { "enabled": True }}}, checkpoint_s3_uri=checkpoint_s3_bucket, checkpoint_local_path="/opt/ml/checkpoints", debugger_hook_config=False )
  • Se você quiser continuar usando o paralelismo de dados distribuídos do SageMaker AI e o SageMaker Debugger, uma solução alternativa é adicionar manualmente funções de ponto de verificação ao seu script de treinamento em vez de especificar os parâmetros checkpoint_s3_uri e checkpoint_local_path do estimador. Para obter mais informações sobre como configurar o ponto de verificação manual em um script de treinamento, consulte Salvando pontos de verificação.

Um prefixo inesperado anexado às chaves dos parâmetros do modelo

Para trabalhos de treinamento distribuído do PyTorch, um prefixo inesperado (model, por exemplo) pode ser anexado a chaves state_dict (parâmetros do modelo). A biblioteca de paralelismo de dados do SageMaker AI não altera nem acrescenta diretamente nenhum nome de parâmetro do modelo quando as tarefas de treinamento do PyTorch salvam artefatos do modelo. O treinamento distribuído do PyTorch altera os nomes no state_dict para acessar a rede, precedendo o prefixo. Se você encontrar algum problema de falha no modelo devido a nomes de parâmetro diferentes ao usar a biblioteca de paralelismo de dados e o ponto de verificação do SageMaker AI para treinamento no PyTorch, adapte o código de exemplo a seguir para remover o prefixo na etapa em que você carrega os pontos de verificação em seu script de treinamento.

state_dict = {k.partition('model.')[2]:state_dict[k] for k in state_dict.keys()}

Isso considera cada chave state_dict como um valor de string, separa a string na primeira ocorrência de 'model.' e pega o terceiro item da lista (com índice 2) da string particionada.

Para obter mais informações sobre o problema do prefixo, consulte o debate em Prefixo em nomes de parâmetros no modelo salvo se treinados por várias GPUs? no fórum de discussão do PyTorch.

Para obter mais informações sobre os métodos do PyTorch para salvar e carregar modelos, consulte Salvando e carregando modelos entre dispositivos na documentação do PyTorch.

Interrupção da tarefa de treinamento distribuído do SageMaker AI durante a inicialização

Se sua tarefa de treinamento de paralelismo de dados distribuídos do SageMaker AI parar durante a inicialização ao usar instâncias habilitadas para EFA, isso provavelmente se deve a uma configuração incorreta no grupo de segurança da sub-rede da VPC usada para a tarefa de treinamento. O EFA exige uma configuração de grupo de segurança adequada para habilitar o tráfego entre os nós.

Para configurar as regras de entrada e saída dos grupos de segurança:
  1. Faça login no Console de gerenciamento da AWS e abra o console da Amazon VPC em https://console.aws.amazon.com/vpc/.

  2. No painel de navegação à esquerda, escolha Grupos de Segurança.

  3. Selecione o grupo de segurança vinculado à sub-rede da VPC que você usa para treinamento.

  4. Na seção Detalhes, copie a ID do grupo de segurança.

  5. Na guia Regras de entrada, selecione Editar regras de entrada.

  6. Na página Editar regras de entrada, faça o seguinte:

    1. Escolha Adicionar regra.

    2. Para Tipo, escolha Todo o tráfego.

    3. Em Fonte, escolha Personalizado, cole o ID do grupo de segurança na caixa de pesquisa e selecione o grupo de segurança que aparece.

  7. Escolha Salvar regras para concluir a configuração da regra de entrada para o grupo de segurança.

  8. Na guia Regras de saída, escolha Editar regras de saída.

  9. Repita as etapas 6 e 7 para adicionar a mesma regra como regra de saída.

Depois de concluir as etapas anteriores para configurar o grupo de segurança com as regras de entrada e saída, execute novamente o trabalho de treinamento e verifique se o problema de interrupção foi resolvido.

Para obter mais informações sobre como configurar grupos de segurança, consulte Grupos de segurança para sua VPC e Elastic Fabric Adapter.

Interrupção da tarefa de treinamento distribuído do SageMaker AI no final do treinamento

Uma das causas raiz dos problemas de paralisação no final do treinamento é uma não-correspondência no número de lotes que são processados por época em diferentes classificações. Todos os operadores (GPUs) sincronizam seus gradientes locais na passagem para trás para garantir que todos tenham a mesma cópia do modelo no final da iteração em lote. Se os tamanhos dos lotes forem atribuídos de forma desigual a diferentes grupos de operadores durante a época final do treinamento, o trabalho de treinamento será interrompido. Por exemplo, enquanto um grupo de operadores (grupo A) termina de processar todos os lotes e sai do ciclo de treinamento, outro grupo de operadores (grupo B) começa a processar outro lote e ainda espera que a comunicação do grupo A sincronize os gradientes. Isso faz com que o grupo B espere pelo grupo A, que já concluiu o treinamento e não tem nenhum gradiente para sincronizar.

Portanto, ao configurar seu conjunto de dados de treinamento, é importante que cada operador obtenha o mesmo número de amostras de dados para que cada operador passe pelo mesmo número de lotes durante o treinamento. Certifique-se de que cada classificação receba o mesmo número de lotes para evitar esse problema de paralisação.

Observação da degradação da eficiência do ajuste de escala devido a gargalos no throughput do Amazon FSx

Uma possível causa da redução da eficiência do ajuste de escala é o limite do throughput do FSx. Se você observar uma queda repentina na eficiência de escalonamento ao mudar para um cluster de treinamento maior, tente usar um sistema de arquivos FSx for Lustre maior com um limite de taxa de throughput mais alto. Para obter mais informações, consulte Performance do sistema de arquivos agregado e Gerenciamento da capacidade de armazenamento e capacidade de throughput no Guia do usuário do Amazon FSx para Lustre.

Tarefa de treinamento distribuído do SageMaker AI com o PyTorch exibe avisos de descontinuação

Desde a versão v1.4.0, a biblioteca de paralelismo de dados do SageMaker AI funciona como um backend do PyTorch distribuído. Devido à alteração significativa no uso da biblioteca com o PyTorch, você pode encontrar uma mensagem de aviso de que as APIs smdistributed do pacote distribuído do PyTorch estão obsoletas. A mensagem de aviso deve ser semelhante à seguinte:

smdistributed.dataparallel.torch.dist is deprecated in the SageMaker AI distributed data parallel library v1.4.0+. Please use torch.distributed and specify 'smddp' as a backend when initializing process group as follows: torch.distributed.init_process_group(backend='smddp') For more information, see the library's API documentation at https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-modify-sdp-pt.html

Na v1.4.0 e posteriores, você só precisa importar a biblioteca uma vez na parte superior do script de treinamento e defini-la como o backend durante a inicialização distribuída do PyTorch. Com a única linha de especificação de backend, você pode manter seu script de treinamento do PyTorch inalterado e usar diretamente os módulos distribuídos do PyTorch. Veja Use a biblioteca SMDDP em seu script de treinamento do PyTorch para saber mais sobre as alterações significativas e a nova forma de usar a biblioteca com o PyTorch.