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 na Amazon SageMaker
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 mais suporte, entre em contato com a SageMaker equipe por meio do AWS Support Center
Tópicos
- Usando dados SageMaker distribuídos paralelamente com o Amazon SageMaker Debugger e os pontos de verificação
- Um prefixo inesperado anexado às chaves de parâmetros do modelo
- SageMaker paralisação do trabalho de treinamento distribuído durante a inicialização
- SageMaker treinamento distribuído, paralisação de empregos no final do treinamento
- Observando a degradação da eficiência de escalabilidade devido aos gargalos na taxa de transferência do Amazon FSx
- SageMaker trabalho de treinamento distribuído com avisos de depreciação de PyTorch devoluções
Usando dados SageMaker distribuídos paralelamente com o Amazon SageMaker Debugger e os pontos de verificação
Para monitorar gargalos do sistema, criar perfis de operações de estrutura e depurar tensores de saída do modelo para trabalhos de treinamento com SageMaker dados distribuídos paralelamente, use o Amazon Debugger. SageMaker
No entanto, ao usar o SageMaker Debugger, SageMaker Distributed Data Parallel e SageMaker checkpoints, 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ê ativa o Distributed SageMaker Data Parallel.
-
Se você habilitar todos os três recursos, o SageMaker Python SDK desativará automaticamente o Debugger passando
debugger_hook_config=False
, o que equivale ao exemplo de estrutura a seguir.estimator
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 dados SageMaker distribuídos paralelamente 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 e do estimador.
checkpoint_s3_uri
checkpoint_local_path
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 de parâmetros do modelo
Para trabalhos de treinamento PyTorch distribuídos, um prefixo inesperado (model
por exemplo) pode ser anexado às state_dict
chaves (parâmetros do modelo). A biblioteca paralela de SageMaker dados não altera nem acrescenta diretamente nenhum nome de parâmetro do modelo quando os trabalhos de PyTorch treinamento salvam artefatos do modelo. O PyTorch treinamento distribuído 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âmetros diferentes ao usar a biblioteca paralela de SageMaker dados e o ponto de verificação para PyTorch treinamento, 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 um tópico de discussão em Nomes de parâmetros de prefixo no modelo salvo se treinados por
Para obter mais informações sobre os PyTorch métodos para salvar e carregar modelos, consulte Salvando e carregando modelos entre dispositivos
SageMaker paralisação do trabalho de treinamento distribuído durante a inicialização
Se seu trabalho de treinamento paralelo de dados SageMaker distribuídos parar durante a inicialização ao usar instâncias habilitadas para EFA, isso pode ser devido a uma configuração incorreta no grupo de segurança da sub-rede VPC usada para o trabalho 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:
-
No painel de navegação esquerdo, escolha Grupos de Segurança.
-
Selecione o grupo de segurança vinculado à sub-rede da VPC que você usa para treinamento.
-
Na seção Detalhes, copie a ID do grupo de segurança.
-
Na guia Regras de entrada, selecione Editar regras de entrada.
-
Na página Editar regras de entrada, faça o seguinte:
-
Escolha Adicionar regra.
-
Para Tipo, escolha Todo o tráfego.
-
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.
-
-
Escolha Salvar regras para concluir a configuração da regra de entrada para o grupo de segurança.
-
Na guia Regras de saída, escolha Editar regras de saída.
-
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 paralisaçã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.
SageMaker treinamento distribuído, paralisação de empregos 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 trabalhadores 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.
Observando a degradação da eficiência de escalabilidade devido aos gargalos na taxa de transferência do Amazon FSx
Uma possível causa da redução da eficiência de escalonamento é o limite da taxa de transferência 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 for Lustre.
SageMaker trabalho de treinamento distribuído com avisos de depreciação de PyTorch devoluções
Desde a versão 1.4.0, a biblioteca de paralelismo de dados SageMaker distribuídos funciona como um back-end de distribuídos. PyTorch Devido à alteração significativa do uso da biblioteca com PyTorch, você pode encontrar uma mensagem de aviso de que as smdistributed
APIs do pacote PyTorch distribuído estão obsoletas. A mensagem de aviso deve ser semelhante à seguinte:
smdistributed.dataparallel.torch.dist is deprecated in the SageMaker 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 versão 1.4.0 e posterior, a biblioteca só precisa ser importada uma vez na parte superior do script de treinamento e definida como back-end durante a PyTorch inicialização distribuída. Com a única linha de especificação de back-end, você pode manter seu script de PyTorch treinamento inalterado e usar diretamente os módulos PyTorch distribuídos. Veja Use a SMDDP biblioteca em seu script PyTorch de treinamento para saber mais sobre as mudanças mais recentes e a nova forma de usar a biblioteca com PyTorch.