Considerações sobre memória e vCPU para AWS Batch no Amazon EKS - AWS Batch

Considerações sobre memória e vCPU para AWS Batch no Amazon EKS

No AWS Batch do Amazon EKS, você pode especificar os recursos que forem disponibilizados para um contêiner. Por exemplo, você pode especificar valores requests ou limits para recursos de vCPU e memória.

Os seguintes são as restrições para especificar os recursos de vCPU:

  • Pelo menos um valor de requests ou limits de vCPU deve ser especificado.

  • Uma unidade de vCPU é equivalente a um núcleo físico ou virtual.

  • O valor da vCPU deve ser inserido em números inteiros ou em acréscimos de 0,25.

  • O menor valor válido de vCPU é 0,25.

  • Se ambos forem especificados, o valor de requests deverá ser menor que ou igual ao valor de limits. Dessa forma, você pode configurar as configurações de vCPU flexíveis e rígidas.

  • Os valores de vCPU não podem ser especificados no formato milliCPU. Por exemplo, 100m não é um valor válido.

  • AWS Batch utiliza o valor requests para decisões em escala. Se um valor requests não for especificado, o valor limits será copiado para o valor requests.

Os seguintes são as restrições para especificar os recursos de memória:

  • Pelo menos um valor de requests ou limits de memória deve ser especificado.

  • Os valores de memória devem estar em mebibytes (MiBs).

  • Se ambos forem especificados, o valor de requests deverá ser igual ao valor de limits.

  • AWS Batch utiliza o valor requests para decisões em escala. Se um valor de requests não for especificado, o valor de limits será copiado para o valor de requests.

Os seguintes são as restrições para especificar os recursos de GPU:

  • Se ambos forem especificados, o valor de requests deverá ser igual ao valor de limits.

  • AWS Batch utiliza o valor requests para decisões em escala. Se um valor requests não for especificado, o valor limits será copiado para o valor requests.

Exemplos: definições de trabalho

O seguinte AWS Batch sobre a configuração de definição de trabalho do Amazon EKS configura compartilhamentos flexíveis de vCPU. Isso permite que o AWS Batch no Amazon EKS use toda a capacidade da vCPU para o tipo de instância. No entanto, caso existam outros trabalhos em execução, ao trabalho será alocado um máximo de 2 vCPUs. A memória é limitada a 2 GB.

{ "jobDefinitionName": "MyJobOnEks_Sleep", "type": "container", "eksProperties": { "podProperties": { "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": ["sleep", "60"], "resources": { "requests": { "cpu": "2", "memory": "2048Mi" } } } ] } } }

O seguinte AWS Batch na definição de trabalho do Amazon EKS tem um valor request de 1 e aloca um máximo de 4 vCPUs para o trabalho.

{ "jobDefinitionName": "MyJobOnEks_Sleep", "type": "container", "eksProperties": { "podProperties": { "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": ["sleep", "60"], "resources": { "requests": { "cpu": "1" }, "limits": { "cpu": "4", "memory": "2048Mi" } } } ] } } }

O seguinte AWS Batch na configuração de definição de trabalho do Amazon EKS define um valor limits de vCPU de 1 e um valor de limits de memória de 1 GB.

{ "jobDefinitionName": "MyJobOnEks_Sleep", "type": "container", "eksProperties": { "podProperties": { "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": ["sleep", "60"], "resources": { "limits": { "cpu": "1", "memory": "1024Mi" } } } ] } } }

Quando o AWS Batch traduz um AWS Batch no trabalho do Amazon EKS em um pod do Amazon EKS, o AWS Batch copia o valor de limits para o valor de requests. Isso ocorre quando um valor de requests não é especificado. Quando você envia o exemplo de definição de trabalho de precedência, o pod spec é o seguinte.

apiVersion: v1 kind: Pod ... spec: ... containers: - command: - sleep - 60 image: public.ecr.aws/amazonlinux/amazonlinux:2 resources: limits: cpu: 1 memory: 1024Mi requests: cpu: 1 memory: 1024Mi ...

Reserva de Memória e Reserva de Nó de CPU

AWS Batch depende da lógica padrão do arquivo bootstrap.sh para reservas de vCPU e reservas de memória. Para mais informações sobre o arquivo bootstrap.sh, consulte bootstrap.sh. Ao medir o tamanho dos seus recursos de vCPU e memória, considere os exemplos a seguir.

nota

Se nenhuma instância estiver em execução, as reservas de vCPU e reservas de memória podem, de início, afetar a lógica em escala do AWS Batch e a tomada de decisões. Depois que as instâncias estiverem em execução, o AWS Batch ajusta as alocações iniciais.

Exemplo: reserva de nó de CPU

O valor da reserva de CPU é calculado em milicores usando o número de vCPUs total disponível para a instância.

Número da vCPU Porcentagem reservada
1 6%
2 1%
3-4 0,5%
4 e acima 0.25%

Usando os valores que precedem, o seguinte é verdadeiro:

  • O valor da reserva de CPU para uma instância c5.large com 2 vCPUs é 70 m. Isso é calculado da seguinte maneira: (1*60) + (1*10) = 70 m.

  • O valor da reserva de CPU para uma instância c5.24xlarge com 96 vCPUs é 310 m. Isso é calculado da seguinte maneira: (1*60) + (1*10) + (2*5) + (92*2.5) = 310 m.

Neste exemplo, há 1930 (calculadas de 2000-70) unidades de vCPU de milicore disponíveis para executar trabalhos em uma instância c5.large. Suponha que seu trabalho requeira 2 unidades de vCPU (2*1000 m). O trabalho não caberá em uma instância única c5.large. No entanto, um trabalho que exige 1.75 unidades de vCPU é adequado.

Exemplo: reserva de memória do nó

O valor da reserva de memória é calculado em mebibytes usando o seguinte:

  • a capacidade da instância em mebibytes. Por exemplo, uma instância de 8 GB tem 7.748 MiB.

  • O valor de kubeReserved. O valor de kubeReserved é a quantidade de memória a ser reservada para os daemons do sistema. O valor de kubeReserved é calculado no campo da seguinte forma: ((11 * número de pods máximo compatível pelo tipo de instância) + 255). Para informações sobre o número máximo de pods compatível com cada tipo de instância, consulte eni-max-pods.txt

  • O valor HardEvictionLimit. Quando a memória disponível fica abaixo do valor HardEvictionLimit, a instância tenta remover os pods.

A fórmula para calcular a memória disponível para alocação é a seguinte: (instance_capacity_in_MiB) - (11 * (maximum_number_of_pods)) - 255 - (HardEvictionLimitvalor)).

Uma instância c5.large suporta até 29 pods. Para uma instância c5.large de 8 GB com um valor HardEvictionLimit de 100 MiB, a memória disponível para alocação é 7074 MiB. Isso é calculado da seguinte maneira: (7748 - (11 * 29) -255 -100) = 7074 MiB. Neste exemplo, um trabalho MiB de 8.192 não cabe nessa instância, embora seja uma instância de 8 gibibyte (GiB).

DaemonSets

Ao usar DaemonSets, considere o seguinte:

  • Se nenhum AWS Batch nas instâncias do Amazon EKS estiver em execução, DaemonSets pode afetar inicialmente a lógica em escala do AWS Batch e a tomada de decisões. Inicialmente, AWS Batch aloca 0,5 unidades de vCPU e 500 MiB para o DaemonSets esperado. Depois que as instâncias estiverem em execução, o AWS Batch ajusta as alocações iniciais.

  • Se um DaemonSet definir limites de vCPU ou limite de memória, os trabalhos AWS Batch no Amazon EKS terão menos recursos. Recomendamos que você mantenha o número de DaemonSets atribuídos a trabalhos AWS Batch o mais baixo possível.