Recursos do AWS Batch

Por que usar o AWS Batch?

Com o AWS Batch, você empacota o código para seus trabalhos em lote, especifica suas dependências e envia seu trabalho em lote usando o Console de Gerenciamento da AWS, CLIs ou SDKs. Depois de especificar os parâmetros de execução e as dependências do trabalho, o AWS Batch facilita a integração com uma ampla variedade de linguagens e mecanismos de fluxo de trabalho de computação em lote populares (por exemplo, Pegasus WMS, Luigi, Nextflow, Metaflow, Apache Airflow e AWS Step Functions). O AWS Batch provisiona e dimensiona de forma eficiente e dinâmica os recursos de computação do Amazon Elastic Container Service (ECS), do Amazon Elastic Kubernetes Service (EKS) e do AWS Fargate, com a opção de usar instâncias sob demanda ou spot com base nas suas necessidades de trabalho. O AWS Batch fornece filas de tarefas padrão e definições de ambiente de computação para que você possa começar rapidamente.

Definições de trabalhos

Trabalhos de vários contêineres são um recurso que facilita e agiliza a execução de simulações em grande escala ao testar sistemas complexos, como os usados em veículos autônomos e robótica. Com a capacidade de executar vários contêineres em um trabalho, você pode se beneficiar dos recursos avançados de ajuste de escala, programação e otimização de custos do AWS Batch sem reconstruir seu sistema em um contêiner monolítico complexo. Em vez disso, você pode manter o uso de vários contêineres modulares menores, cada um representando diferentes componentes do sistema, como um ambiente virtual 3D, sensores de percepção de robôs ou um sidecar de registro de dados. Trabalhos de vários contêineres aceleram os tempos de desenvolvimento, reduzindo as etapas de preparação de trabalhos e eliminando a necessidade de criar ferramentas internas extras. A execução de trabalhos de simulação com vários contêineres também simplifica o desenvolvimento de softwares (Dev) e as operações de TI (Ops), definindo a responsabilidade dos componentes para que diferentes equipes possam encontrar e corrigir erros no componente de suas equipes sem se distrair com os componentes das outras.

O AWS Batch oferece suporte a trabalhos paralelos de vários nós, para que você possa executar trabalhos únicos que abrangem várias instâncias do EC2. Com esse recurso, é possível usar o AWS Batch para executar workloads com eficiência, como treinamentos de modelos de GPU distribuídos ou aplicações de computação de alta performance (HPC) em grande escala e intensa vinculação. O AWS Batch também oferece suporte ao Elastic Fabric Adapter, uma interface de rede na qual você pode executar aplicações que exigem altos níveis de comunicação entre nós em grande escala na AWS.

Com o AWS Batch, você pode especificar requisitos de recursos, como vCPU e memória, perfis do AWS Identity and Access Management (IAM), pontos de montagem de volumes, propriedades de contêiner e variáveis de ambiente para definir como os trabalhos são executados. O AWS Batch executa seus trabalhos como aplicações em contêineres no Amazon ECS.  Você também pode definir dependências entre diferentes trabalhos. Por exemplo, seu trabalho em lotes pode ser composto por três estágios de processamento com diferentes necessidades de recursos. Com as dependências, é possível criar três trabalhos com requisitos de recursos diferentes em que cada trabalho sucessivo dependa do trabalho anterior.

Integrações

O AWS Batch pode ser integrado a mecanismos de fluxo de trabalho comerciais e de código aberto, como Pegasus WMS, Luigi, Nextflow, Metaflow, Apache Airflow e AWS Step Functions, para que você possa usar linguagens de fluxo de trabalho familiares para modelar seus pipelines de computação em lote.

Agora, o AWS Batch oferece suporte a modelos de lançamento do EC2, para que você possa criar modelos personalizados para seus recursos de computação, enquanto o Batch dimensiona instâncias para atender às suas necessidades. Você pode especificar seu modelo de execução do EC2 para adicionar volumes de armazenamento, selecionar interfaces de rede ou configurar permissões, entre outros recursos. Os modelos de execução do EC2 reduzem o número de etapas necessárias para configurar ambientes do Batch por meio da captura dos parâmetros de execução em um mesmo recurso.

 

O AWS Batch exibe métricas operacionais essenciais para seus trabalhos em lote no Console de Gerenciamento da AWS. Você pode visualizar métricas relacionadas à capacidade de computação, bem como métricas de trabalhos em execução, pendentes e concluídos. Os logs dos seus trabalhos (por exemplo, STDERR e STDOUT) estão disponíveis no console e também são gravados no Amazon CloudWatch Logs.

O AWS Batch usa o IAM para controlar e monitorar os recursos da AWS que seus trabalhos podem acessar, como as tabelas do Amazon DynamoDB. Por meio do IAM, também é possível definir políticas para usuários diferentes na sua organização. Por exemplo, administradores podem receber permissões de acesso total para qualquer operação de API do AWS Batch, desenvolvedores podem ter permissões limitadas relacionadas à configuração de ambientes de computação e ao registro de trabalhos, e os usuários finais podem ficar restritos às permissões necessárias para enviar e excluir trabalhos.

Ambientes computacionais

O AWS Batch pode executar seus trabalhos em lote nos clusters existentes do Amazon EKS. Você especifica os requisitos de vCPU, memória e GPU de que seus contêineres precisam e os envia para uma fila anexada a um ambiente de computação habilitado para clusters do EKS. O AWS Batch gerencia a escalabilidade dos nós Kubernetes e o posicionamento de pods nos seus nós. Além disso, o AWS Batch gerencia filas, rastreamento de dependências, novas tentativas de trabalho, priorização e envio de pods, além de fornecer suporte para instâncias spot e sob demanda do Amazon Elastic Compute Cloud (EC2). O AWS Batch também se integra ao seu cluster EKS em um namespace distinto, para que você não precise se preocupar com a interferência de trabalhos em lote nos processos existentes. Por fim, o AWS Batch gerencia a capacidade para você, incluindo a manutenção de um grupo ativo de nós, limitando a capacidade a uma certa quantidade de vCPUs, escalando nós e executando trabalhos em um único cluster ou em vários clusters.

O AWS Batch com recursos do Fargate oferece uma arquitetura totalmente sem servidor para seus trabalhos em lote. Com o Fargate, cada trabalho recebe a quantidade exata de CPU e memória solicitada (dentro dos SKUs permitidos do Fargate) e, portanto, não há perda de tempo de recurso nem a necessidade de esperar pela inicialização da instância do EC2.

Se você já é usuário do AWS Batch, o Fargate permite uma camada adicional de separação de instâncias do EC2. Não há necessidade de gerenciar ou aplicar patch em imagens de máquina da Amazon (AMIs). Ao enviar trabalhos compatíveis com o Fargate para o Batch, você não precisa se preocupar em manter dois serviços diferentes se tiver algumas workloads executadas no Amazon EC2 e outras executadas no Fargate.

A AWS fornece um programador baseado em nuvem completo com uma fila gerenciada e a capacidade de especificar prioridades, novas tentativas de trabalho, dependências, tempos limite e muito mais. O AWS Batch gerencia o envio ao Fargate e o ciclo de vida dos seus trabalhos para que você não precise fazer isso.

O Fargate também oferece benefícios de segurança sem esforço adicional (por exemplo, conformidade com SOX e PCI) e isolamento entre recursos de computação para cada trabalho.

Agendamento

Com o AWS Batch, você pode configurar várias filas com diferentes níveis de prioridade. Os trabalhos em lote ficarão armazenados nas filas até que recursos de computação estejam disponíveis para executá-los. O programador do AWS Batch avalia quando, onde e como executar trabalhos que foram enviados para uma fila com base nos requisitos de recursos de cada trabalho. O programador avalia a prioridade de cada fila e executa trabalhos em ordem de prioridade nos recursos de computação ideais (por exemplo, otimizados para memória em comparação com otimizados para CPU), desde que esses trabalhos não tenham dependências pendentes.

A programação de GPU permite que você especifique o número e o tipo de aceleradores necessários para seus trabalhos como variáveis de entrada de definição de tarefa no AWS Batch. O AWS Batch aumentará a escala das instâncias verticalmente de modo adequado para os seus trabalhos com base no número necessário de GPUs e isolará os aceleradores de acordo com as necessidades de cada trabalho, para que somente os contêineres apropriados possam acessá-los.

Escalabilidade

Ao usar o Fargate ou AWS Fargate Spot com o Batch, basta definir alguns conceitos no Batch (um ambiente de computação, uma fila de trabalhos e uma definição de trabalho), e você terá uma arquitetura completa de fila, programador e computação sem precisar gerenciar uma única parte da infraestrutura de computação.

Para quem deseja usar instâncias do EC2, o AWS Batch fornece ambientes gerenciados de computação que provisionam e escalam dinamicamente os recursos de computação com base nos requisitos de volume e recursos dos seus trabalhos enviados. Você pode configurar seus ambientes gerenciados de computação com requisitos, como tipos de instâncias do EC2, configuração de sub-rede de VPC, os valores mínimos/máximos/desejados de vCPUs entre todas as instâncias e o valor que está disposto a pagar por instâncias spot como um percentual do preço da instância sob demanda.

Como opção, é possível provisionar e gerenciar seus próprios recursos de computação dentro de ambientes não gerenciados de computação do AWS Batch, caso seja necessário usar configurações (como volumes do EBS maiores ou um sistema operacional diferente) de instâncias do EC2 diferentes das disponibilizadas pelos ambientes gerenciados de computação do AWS Batch. Você precisa apenas provisionar instâncias do EC2 que incluam o agente do Amazon ECS e executem versões compatíveis do Linux e do Docker. Em seguida, o AWS Batch executará trabalhos em lote nas instâncias EC2 provisionadas.

Com o AWS Batch, você pode escolher três métodos para alocar recursos de computação. Essas estratégias permitem considerar a throughput e o preço ao decidir como o AWS Batch deve escalar as instâncias para você.

Melhor opção: o AWS Batch seleciona um tipo de instância que é a melhor opção para as necessidades dos trabalhos, com preferência pelo tipo de instância de menor custo. Se instâncias adicionais do tipo de instância selecionado não estiverem disponíveis, o AWS Batch aguardará que esses instâncias adicionais estejam disponíveis. Se não houver instâncias suficientes disponíveis ou se você estiver atingindo os limites de serviço do Amazon EC2, trabalhos adicionais não serão executados até que os trabalhos em execução no momento sejam concluídos. Essa estratégia de alocação mantém os custos baixos, mas pode limitar a escalabilidade.

Melhor opção progressiva: o AWS Batch selecionará tipos de instância adicionais que são suficientemente grandes para atender aos requisitos dos trabalhos na fila, com uma preferência pelos tipos de instâncias com menor custo por unidade de vCPU. Se instâncias adicionais dos tipos selecionados anteriormente não estiverem disponíveis, o AWS Batch selecionará novos tipos de instâncias.

Otimizada para capacidade spot: o AWS Batch selecionará um ou mais tipos de instâncias que são suficientemente grandes para atender aos requisitos dos trabalhos na fila, com uma preferência pelos tipos de instâncias com menor propensão de serem interrompidos. Essa estratégia de alocação só está disponível para recursos de computação de instâncias spot.