Trabalhos em paralelo de vários nós - AWS Batch

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á.

Trabalhos em paralelo de vários nós

Você pode usar trabalhos paralelos de vários nós para executar trabalhos únicos que abrangem várias EC2 instâncias da Amazon. Com trabalhos paralelos de AWS Batch vários nós (também conhecidos como agendamento em grupo), você pode executar aplicativos de computação em grande escala e alto desempenho e treinamento de GPU modelos distribuídos sem a necessidade de iniciar, configurar e gerenciar recursos da Amazon diretamente. EC2 Uma tarefa paralela de AWS Batch vários nós é compatível com qualquer estrutura que ofereça suporte à comunicação entre nós baseada em IP. Os exemplos incluem Apache MXNet TensorFlow, Caffe2 ou Message Passing Interface ()MPI.

Trabalhos paralelos de vários nós de vários nós são enviados como uma única tarefa. No entanto, sua definição de trabalho (ou substituições de nó de envio de trabalho) especifica o número de nós a serem criados para o trabalho e quais grupos de nós criar. Cada trabalho paralelo de vários nós contém um nó principal que é executado primeiro. Depois que o nó principal estiver ativo, os nós filhos serão executados e iniciados. O trabalho será concluído somente se o nó principal sair. Nesse caso, todos nós secundários serão terminados. Para obter mais informações, consulte Grupos de nós.

Os nós de trabalho paralelos de vários nós são de locatário único. Isso significa que somente um único contêiner de trabalho é executado em cada EC2 instância da Amazon.

O status final do trabalho (SUCCEEDED ou FAILED) é determinado pelo status final do trabalho do nó principal. Para obter o status de um trabalho paralelo de vários nós, descreva a tarefa usando a ID da tarefa retornada quando você enviou a tarefa. Se precisar dos detalhes dos nós filhos, você deverá descrever cada nó filho individualmente. Você pode endereçar os nós usando a notação #N (começando com 0). Por exemplo, para acessar os detalhes do segundo nó de um trabalho, descreva aws_batch_job_id#1 usando a AWS Batch DescribeJobsAPIoperação. As informações de started, stoppedAt, statusReason e exit para um trabalho paralelo de vários nós são preenchidas a partir do nó principal.

Se você especificar novas repetições de trabalho, uma falha no nó principal fará com que outra tentativa ocorra. Falhas no nó filho não causam a ocorrência de mais tentativas. Cada nova tentativa de um tarefa em paralelo de vários nós atualiza a tentativa correspondente de seus nós filhos associados.

Para executar trabalhos paralelos de vários nós AWS Batch, o código do aplicativo deve conter as estruturas e bibliotecas necessárias para a comunicação distribuída.

Variáveis de ambiente

Em tempo de execução, cada nó é configurado com as variáveis de ambiente padrão que todos os AWS Batch trabalhos recebem. Além disso, os nós são configurados com as seguintes variáveis de ambiente específicas de trabalhos paralelos de vários nós:

AWS_BATCH_JOB_MAIN_NODE_INDEX

Essa variável é definida como o número índice do nó principal do trabalho. O código do seu aplicativo pode comparar o AWS_BATCH_JOB_MAIN_NODE_INDEX ao AWS_BATCH_JOB_NODE_INDEX em um nó individual para determinar se ele é o nó principal.

AWS_BATCH_JOB_MAIN_NODE_PRIVATE_IPV4_ADDRESS

Essa variável é definida apenas em nós filhos de trabalhos em paralelo de vários nós. Essa variável não está presente no nó principal. Essa variável é definida como o IPv4 endereço privado do nó principal do trabalho. O código da aplicação do nó filho pode utilizar esse endereço para comunicar-se com o nó principal.

AWS_BATCH_JOB_NODE_INDEX

Essa variável é definida como o número do índice de nós do nó. O índice do nó começa em 0, e cada nó filho recebe um número índice exclusivo. Por exemplo, uma tarefa em paralelo de vários nós com 10 filhos possui valores índice de 0-9.

AWS_BATCH_JOB_NUM_NODES

Essa variável é definida como o número de nós solicitados por você para seu trabalho paralelo de vários nós.

Grupos de nós

Um grupo de nós é um grupo idêntico de nós de trabalhos que compartilham as mesmas propriedades do contêiner. Você pode usar AWS Batch para especificar até cinco grupos de nós distintos para cada trabalho.

Cada grupo pode ter suas próprias imagens de contêiner, comandos, variáveis de ambiente e assim por diante. Por exemplo, você pode enviar um trabalho que exija uma instância única c5.xlarge para o nó principal e cinco nós filhos da instância c5.xlarge. Cada um desses grupos de nós distintos pode especificar diferentes imagens de contêiner ou comandos a serem executados para cada trabalho.

Como alternativa, todos os nós em seu trabalho podem usar um único grupo de nós. Além disso, o código do aplicativo pode diferenciar as funções do nó, como o nó principal e o nó filho. Ele faz isso comparando a variável de ambiente AWS_BATCH_JOB_MAIN_NODE_INDEX com seu próprio valor para AWS_BATCH_JOB_NODE_INDEX. Você pode ter até 1.000 nós em um único trabalho. Esse é o limite padrão para instâncias em um ECS cluster da Amazon. Você pode solicitar que esse limite seja aumentado.

nota

Atualmente, todos os grupos de nós em um trabalho paralelo de vários nós devem usar o mesmo tipo de instância.

Ciclo de vida do trabalho

Quando você envia um trabalho paralelo de vários nós, o trabalho entra no status SUBMITTED. Em seguida, o trabalho aguarda a conclusão de todas as dependências do trabalho. O trabalho também passa para o status RUNNABLE. Por fim, AWS Batch provisiona a capacidade da instância necessária para executar seu trabalho e executa essas instâncias.

Cada tarefa em paralelo de vários nós contém um nó principal. O nó principal é uma subtarefa única que AWS Batch monitora para determinar o resultado do trabalho de vários nós enviado. O nó principal é iniciado primeiro e passa para o status de STARTING. O valor do tempo limite especificado no campo de parâmetro attemptDurationSeconds se aplica a todo o trabalho, não aos nós.

Quando o nó principal atinge o status de RUNNING depois que o contêiner do nó estiver em execução, os nós filhos são iniciados e também são movidos para o status de STARTING. Os nós filhos são exibidos em uma ordem aleatória. Não há garantias sobre o tempo ou a ordem de execução do nó filho. Para garantir que todos os nós das tarefas estejam no RUNNING status após a execução do contêiner do nó, o código do aplicativo pode consultar o AWS Batch API para obter as informações do nó principal e do nó filho. Como alternativa, o código da aplicação pode esperar até que todos os nós estejam online, antes de iniciar qualquer tarefa de processamento distribuído. O endereço IP privado do nó principal está disponível como a variável de ambiente AWS_BATCH_JOB_MAIN_NODE_PRIVATE_IPV4_ADDRESS em cada nó filho. Seu código de aplicação pode usar essas informações para coordenar e comunicar dados entre cada tarefa.

À medida que os nós individuais saem, eles são movidos para SUCCEEDED ou FAILED, a depender do código de saída. Se o nó principal for encerrado, a tarefa será considerada terminada e todos os nós filhos serão parados. Se um nó filho morrer, AWS Batch não executará nenhuma ação nos outros nós do trabalho. Se você não quiser que seu trabalho continue com um número de nós reduzido, você deve incluir isso no código do aplicativo. Isso termina ou cancela o trabalho.

Considerações sobre o ambiente de computação

Há várias coisas a serem consideradas ao criar ambientes de computação para executar trabalhos paralelos de vários nós com o AWS Batch.

  • Trabalhos paralelos de vários nós não são compatíveis com ambientes de computação UNMANAGED.

  • Se você deseja enviar trabalhos paralelos de vários nós para um ambiente de computação, crie um grupo com posicionamento em cluster em uma Zona de Disponibilidade única e associe-a aos seus recursos de computação. Isso mantém seus trabalhos paralelos de vários nós em um agrupamento lógico de instâncias próximas com alto potencial de fluxo de rede. Para obter mais informações, consulte Grupos de posicionamento no Guia EC2 do usuário da Amazon.

  • Trabalhos paralelos de vários nós não são compatíveis com ambientes de computação que usam instâncias spot.

  • AWS Batch trabalhos paralelos de vários nós usam o modo de ECS awsvpc rede da Amazon, que dá aos contêineres de trabalhos paralelos de vários nós as mesmas propriedades de rede das instâncias da AmazonEC2. Cada contêiner de trabalho paralelo de vários nós tem sua própria interface de rede elástica, um endereço IP privado primário e um nome de DNS host interno. A interface de rede é criada na mesma VPC sub-rede do recurso computacional do host. Todos os grupos de segurança aplicados aos seus recursos de computação também são aplicados a ele. Para obter mais informações, consulte Redes de Tarefas com o Modo de Rede Awsvpc no Guia do Desenvolvedor do Amazon Elastic Container Service.

  • Seu ambiente de computação não pode ter mais de cinco grupos de segurança associados a ele.

  • O modo de rede awsvpc não fornece as interfaces de rede elásticas para trabalhos paralelos de vários nós com endereços IP públicos. Para acessar a Internet, seus recursos computacionais devem ser iniciados em uma sub-rede privada configurada para usar um NAT gateway. Para obter mais informações, consulte NATGateways no Guia do VPC usuário da Amazon. A comunicação entre nós deve usar o endereço IP privado ou o DNS nome do host do nó. Trabalhoso paralelos de vários nós executads em recursos de computação em sub-redes públicas não têm acesso à rede de saída. Para criar um VPC com sub-redes privadas e um NAT gateway, consulte. Criando uma Nuvem Privada Virtual

  • As interfaces de rede elástica criadas e anexadas aos seus recursos de computação não podem ser desassociadas manualmente nem modificadas pela sua conta. Isso visa prevenir a exclusão acidental de uma interface de rede elástica associada a uma tarefa em execução. Para liberar as interfaces de rede elásticas para uma tarefa, encerre a tarefa.

  • Seu ambiente computacional deve ter o máximo suficiente vCPUs para suportar seu trabalho paralelo de vários nós.

  • Sua cota de EC2 instância da Amazon inclui o número de instâncias necessárias para executar seu trabalho. Por exemplo, suponha que sua tarefa exija 30 instâncias, mas sua conta só pode executar 20 instâncias em uma região. Nesse caso, seu trabalho ficará preso no status RUNNABLE.

  • Se você especificar um tipo de instância para um grupo de nós em um trabalhos paralelos de vários nós, seu ambiente de computação deverá executar esse tipo de instância.