아마존 EKS의 AWS Batch에 대한 메모리 및 vCPU 고려 사항 - AWS Batch

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

아마존 EKS의 AWS Batch에 대한 메모리 및 vCPU 고려 사항

Amazon EKS의 AWS Batch에서는 컨테이너에 사용할 수 있는 리소스를 지정할 수 있습니다. 예를 들어 vCPU 및 메모리 리소스에 대해 requests 또는 limits 값을 지정할 수 있습니다.

vCPU 리소스를 지정하기 위한 제약 조건은 다음과 같습니다.

  • vCPU requests 또는 limits 중 하나는 지정해야 합니다.

  • vCPU 유닛 1개는 물리적 코어 또는 가상 코어 1개와 동일합니다.

  • vCPU 값은 정수로 입력하거나 0.25씩 증분하여 입력해야 합니다.

  • 유효한 vCPU 값 중 가장 작은 값은 0.25입니다.

  • 두 값이 지정되면, requests 값은 limits 값에 대해 지정된 값과 같거나 이보다 작아야 합니다. 이렇게 하면 소프트 vCPU 구성과 하드 vCPU 구성을 모두 구성할 수 있습니다.

  • vCPU 값은 milliCPU 형식으로 지정할 수 없습니다. 예를 들어, 100m(은)는 유효한 형식이 아닙니다.

  • AWS Batch(은)는 requests 값을 조정 결정에 사용합니다. requests 값이 지정되지 않은 경우 limits 값이 requests 값에 복사됩니다.

다음은 메모리 리소스를 지정하기 위한 제약 조건입니다.

  • 메모리 requests 또는 limits 중 하나는 지정해야 합니다.

  • 메모리 값은 mebibytes(MiBs)이어야 합니다.

  • 둘 다 지정된 경우 requests 값은 limits 값과 같아야 합니다.

  • AWS Batch(은)는 requests 값을 조정 결정에 사용합니다. requests 값이 지정되지 않은 경우 limits 값이 requests 값에 복사됩니다.

다음은 GPU 리소스를 지정하기 위한 제약 조건입니다.

  • 둘 다 지정된 경우 requests 값은 limits 값과 같아야 합니다.

  • AWS Batch(은)는 requests 값을 조정 결정에 사용합니다. requests 값이 지정되지 않은 경우 limits 값이 requests 값에 복사됩니다.

작업 정의 예제

Amazon EKS 작업 정의의 AWS Batch(은)는 소프트 vCPU 공유를 구성합니다. 이렇게 하면 Amazon EKS의 AWS Batch(이)가 해당 인스턴스 유형의 vCPU 용량을 모두 사용할 수 있습니다. 하지만 실행 중인 다른 작업이 있는 경우 작업에는 최대 2개의 vCPU가 할당됩니다. 메모리는 2GB로 제한됩니다.

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

다음 Amazon EKS의 AWS Batch 작업 정의는 request 값이 1이고 최대 4개의 vCPU를 작업에 할당합니다.

{ "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" } } } ] } } }

다음 Amazon EKS의 AWS Batch 작업 정의는 vCPU limits 값을 1로, 메모리 limits 값을 1GB로 설정합니다.

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

AWS Batch(이)가 Amazon EKS의 AWS Batch 작업을 Amazon EKS 포드로 변환하면 AWS Batch가 limits 값을 requests 값에 복사합니다. 이는 requests 값이 지정되지 않은 경우입니다. 위의 예제 작업 정의를 제출하면 포드 spec(은)는 다음과 같습니다.

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

노드 CPU 및 메모리 예약

AWS Batch(은)는 vCPU 및 메모리 예약에 bootstrap.sh 파일의 기본 로직을 사용합니다. bootstrap.sh 파일에 대한 자세한 내용은 bootstrap.sh을 참조하세요. vCPU와 메모리 리소스의 크기를 조정할 때는 다음 예제를 고려하세요.

참고

실행 중인 인스턴스가 없는 경우 vCPU 및 메모리 예약은 초기에 AWS Batch 조정 로직과 의사 결정에 영향을 미칠 수 있습니다. 인스턴스가 실행된 후 AWS Batch(은)는 초기 할당량을 조정합니다.

노드 CPU 예약 예제

CPU 예약 값은 인스턴스에 사용할 수 있는 총 vCPU 수를 사용하여 밀리코어 단위로 계산됩니다.

vCPU 번호 예약 비율(%)
1 6%
2 1%
3~4 0.5%
4 이상 0.25%

위 값을 사용하면 다음과 같습니다.

  • vCPU가 2개 있는 c5.large 인스턴스의 CPU 예약 값은 70m입니다. 이 값은 다음과 같은 방식으로 계산됩니다. (1*60)+(1*10)=70m.

  • vCPU가 96개 있는 c5.24xlarge 인스턴스의 CPU 예약 값은 310m입니다. 이는 다음과 같은 방식으로 계산됩니다. (1*60)+(1*10)+(2*5)+(92*2.5)=310m.

이 예제에서는 c5.large 인스턴스에서 작업을 실행하는 데 사용할 수 있는 밀리코어 vCPU 유닛이 1,930개(2,000~70개로 계산)입니다. 작업에 2 (2*1000 m) vCPU 유닛이 필요한데, 작업이 단일 c5.large 인스턴스에 맞지 않다고 가정하겠습니다. 하지만 1.75 vCPU 유닛이 필요한 작업에는 적합합니다.

노드 메모리 예약 예제

메모리 예약 값은 다음을 사용하여 메비바이트 단위로 계산됩니다.

  • 인스턴스 용량(MiB) 예를 들어 8GB 인스턴스는 7,748MiB입니다.

  • kubeReservedkubeReserved 값은 시스템 대몬(daemon)용으로 예약할 메모리 양입니다. kubeReserved 값은 다음과 같은 방식으로 계산됩니다. ((11*인스턴스 유형에서 지원하는 최대 포드 수)+255). 각 인스턴스 유형별로 지원되는 최대 포드 수 목록은 GitHub에서 eni-max-pods.txt를 참조하세요.

  • HardEvictionLimit 값 사용 가능한 메모리가 HardEvictionLimit 값 아래로 떨어지면 인스턴스는 포드를 제거하려고 시도합니다.

할당 가능한 메모리를 계산하는 공식은 다음과 같습니다. (instance_capacity_in_MiB)-(11*(maximum_number_of_pods))-255-(HardEvictionLimit value.)).

c5.large 인스턴스는 최대 29개의 포드를 지원합니다. c5.large 값이 100MiB인 8GB HardEvictionLimit 인스턴스의 경우 할당 가능한 메모리는 7,074MiB입니다. 이 값은 다음과 같은 방식으로 계산됩니다. (774-(11* 29)-255-100)=7074MiB. 이 예제에서 8,192MiB 작업은 8gibibyte(GiB) 인스턴스임에도 불구하고 이 인스턴스에 맞지 않습니다.

DaemonSets

DaemonSets(을)를 사용할 때 다음 사항을 고려하세요.

  • 실행 중인 Amazon EKS의 AWS Batch 인스턴스가 없는 경우, DaemonSets가 초기에 AWS Batch 조정 로직 및 의사 결정에 영향을 미칠 수 있습니다. AWS Batch는 초기에 예상된 DaemonSets에 0.5 vCPU 유닛과 500MiB를 할당합니다. 인스턴스가 실행된 후 AWS Batch(은)는 초기 할당량을 조정합니다.

  • DaemonSet(은)는 vCPU 또는 메모리 제한을 정의하면 Amazon EKS의 AWS Batch 작업은 더 적은 리소스를 가집니다. AWS Batch 작업에 할당되는 DaemonSets의 수를 가능한 한 적게 유지하는 것이 좋습니다.