GPU 워크로드에 대한 Amazon ECS 작업 정의 - Amazon Elastic Container Service

GPU 워크로드에 대한 Amazon ECS 작업 정의

GPU를 지원하는 컨테이너 인스턴스로 클러스터를 생성하는 경우 Amazon ECS는 GPU를 사용하는 워크로드를 지원합니다. p2, p3, p5, g3, g4 및 g5 인스턴스 유형을 사용하는 Amazon EC2 GPU 기반 컨테이너 인스턴스는 NVIDIA GPU에 대한 액세스를 제공합니다. 자세한 내용은 Amazon EC2 사용 설명서의 Linux 가속 컴퓨팅 인스턴스를 참조하세요.

Amazon ECS는 NVIDIA 커널 드라이버와 Docker GPU 실행 시간이 구성되어 있어 바로 사용할 수 있는 GPU 최적화 AMI를 제공합니다. 자세한 정보는 Amazon ECS 최적화 Linux AMI을 참조하세요.

컨테이너 수준에서 태스크 할당을 고려할 때 태스크 정의 내 GPU 개수를 지정할 수 있습니다. Amazon ECS는 GPU를 지원하는 사용 가능한 컨테이너 인스턴스로 예약하고 최적의 성능을 위해 물리적 GPU를 적절한 컨테이너에 고정합니다.

다음과 같은 Amazon EC2 GPU 기반 인스턴스 유형이 지원됩니다. 자세한 내용은 Amazon EC2 P2 인스턴스, Amazon EC2 P3 인스턴스, Amazon EC2 P4d 인스턴스, Amazon EC2 P5 인스턴스, Amazon EC2 G3 인스턴스, Amazon EC2 G4 인스턴스, Amazon EC2 G5 인스턴스, Amazon EC2 G6 인스턴스를 참조하세요.

인스턴스 타입

GPU

GPU 메모리(GiB)

vCPU

메모리(GiB)

p3.2xlarge

1

16

8

61

p3.8xlarge

4

64

32

244

p3.16xlarge

8

128

64

488

p3dn.24xlarge

8

256

96

768

p4d.24xlarge

8 320 96 1152
p5.48xlarge 8 640 192 2048

g3s.xlarge

1

8

4

30.5

g3.4xlarge

1

8

16

122

g3.8xlarge

2

16

32

244

g3.16xlarge

4

32

64

488

g4dn.xlarge

1

16

4

16

g4dn.2xlarge

1

16

8

32

g4dn.4xlarge

1

16

16

64

g4dn.8xlarge

1

16

32

128

g4dn.12xlarge

4

64

48

192

g4dn.16xlarge

1

16

64

256

g5.xlarge

1

24

4

16

g5.2xlarge

1

24

8

32

g5.4xlarge

1

24

16

64

g5.8xlarge

1

24

32

128

g5.16xlarge

1

24

64

256

g5.12xlarge

4

96

48

192

g5.24xlarge

4

96

96

384

g5.48xlarge

8

192

192

768

g6.xlarge 1 24 4 16
g6.2xlarge 1 24 8 32
g6.4xlarge 1 24 16 64
g6.8xlarge 1 24 32 128
g6.16.xlarge 1 24 64 256
g6.12xlarge 4 96 48 192
g6.24xlarge 4 96 48 192
g6.48xlarge 8 192 192 768
g6.metal 8 192 192 768
gr6.4xlarge 1 24 16 128
gr6.8xlarge 1 24 32 256

AWS Systems Manager Parameter Store API를 쿼리하여 Amazon ECS 최적화 AMI의 Amazon Machine Image(AMI) ID를 검색할 수 있습니다. 이 파라미터를 사용하면 Amazon ECS 최적화 AMI ID를 수동으로 조회할 필요가 없습니다. Systems Manager 파라미터 스토어 API에 대한 자세한 내용은 GetParameter 섹션을 참조하세요. Amazon ECS 최적화 AMI 메타데이터를 검색하려면 사용자에 ssm:GetParameter IAM 권한이 있어야 합니다.

aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended --region us-east-1

고려 사항

참고

g2 인스턴스 패밀리 유형에 대한 지원은 더 이상 사용되지 않습니다.

p2 인스턴스 유형 패밀리는 20230912 이전 버전의 Amazon ECS GPU 최적화 AMI에서만 지원됩니다. p2 인스턴스를 계속 사용해야 하는 경우 P2 인스턴스가 필요한 경우 수행할 작업를 참조하세요.

이 두 인스턴스 패밀리 유형에서 NVIDIA/CUDA 드라이버를 현재 위치 업데이트하면 잠재적인 GPU 워크로드 실패가 발생합니다.

Amazon ECS에서 GPU 작업을 시작하기 전에 다음 사항을 고려하는 것이 좋습니다.

  • 클러스터에 GPU와 비-GPU 컨테이너 인스턴스가 혼재되어 있을 수 있습니다.

  • 외부 인스턴스에서 GPU 워크로드를 실행할 수 있습니다. 클러스터에 외부 인스턴스를 등록할 때 --enable-gpu 플래그가 설치 스크립트에 포함되어 있는지 확인합니다. 자세한 정보는 Amazon ECS 클러스터에 외부 인스턴스 등록을 참조하세요.

  • 에이전트 구성 파일에서 ECS_ENABLE_GPU_SUPPORTtrue로 설정해야 합니다. 자세한 정보는 Amazon ECS 컨테이너 에이전트 구성을 참조하세요.

  • 태스크를 실행하거나 서비스를 생성할 경우 작업 배치 제약 조건을 구성할 때 인스턴스 유형 속성을 사용하여 태스크가 시작될 컨테이너 인스턴스를 결정할 수 있습니다. 이렇게 하면 리소스를 더욱 효과적으로 사용할 수 있습니다. 자세한 정보는 Amazon ECS가 컨테이너 인스턴스에 작업을 배치하는 방법 섹션을 참조하세요.

    다음 예제는 기본 클러스터의 g4dn.xlarge 컨테이너 인스턴스에서 태스크를 시작합니다.

    aws ecs run-task --cluster default --task-definition ecs-gpu-task-def \ --placement-constraints type=memberOf,expression="attribute:ecs.instance-type == g4dn.xlarge" --region us-east-2
  • 컨테이너 정의에 지정된 GPU 리소스 요구 사항이 있는 각 컨테이너에 대해 Amazon ECS는 컨테이너 런타임을 NVIDIA 컨테이너 런타임으로 설정합니다.

  • NVIDIA 컨테이너 런타임이 제대로 작동하려면 컨테이너에 일부 환경 변수를 설정해야 합니다. 이러한 환경 변수 목록은 Specialized Configurations with Docker를 참조하세요. Amazon ECS는 Amazon ECS가 컨테이너에 할당하는 GPU 디바이스 ID의 목록이 될 NVIDIA_VISIBLE_DEVICES 환경 변수 값을 설정합니다. 다른 필수 환경 변수의 경우, Amazon ECS가 이러한 변수를 설정하지 않습니다. 따라서 컨테이너 이미지가 해당 변수를 설정하거나 컨테이너 정의에 설정되어 있어야 합니다.

  • p5 인스턴스 유형 패밀리는 20230929 이상 버전의 Amazon ECS GPU 최적화 AMI에서 지원됩니다.

  • g4 인스턴스 유형 패밀리는 20230913 이상 버전의 Amazon ECS GPU 최적화 AMI에서 지원됩니다. 자세한 내용은 Amazon ECS 최적화 Linux AMI 단원을 참조하십시오. Amazon ECS 콘솔의 클러스터 생성 워크플로에서는 지원되지 않습니다. 이러한 인스턴스 유형을 사용하려면 Amazon EC2 콘솔, AWS CLI 또는 API를 사용하고 클러스터에 인스턴스를 수동으로 등록해야 합니다.

  • p4d.24xlarge 인스턴스 유형은 CUDA 11 이상에서만 작동합니다.

  • Amazon ECS GPU 최적화 AMI는 IPv6가 활성화되어 있어서 yum을 사용할 때 문제가 발생합니다. 다음 명령으로 IPv4를 사용하도록 yum을 구성하면 문제가 해결됩니다.

    echo "ip_resolve=4" >> /etc/yum.conf
  • NVIDIA/CUDA 기본 이미지를 사용하지 않는 컨테이너 이미지를 구축할 때는 NVIDIA_DRIVER_CAPABILITIES 컨테이너 런타임 변수를 다음 값 중 하나로 설정해야 합니다.

    • utility,compute

    • all

    변수를 설정하는 방법에 대한 자세한 정보는 NVIDIA 웹사이트에서 NVIDIA Container Runtime 제어를 참조하세요.

  • GPU는 Windows 컨테이너에서 지원되지 않습니다.

P2 인스턴스가 필요한 경우 수행할 작업

P2 인스턴스를 사용해야 하는 경우 다음 옵션 중 하나를 사용하여 인스턴스를 계속 사용할 수 있습니다.

두 옵션 모두 인스턴스 사용자 데이터를 수정해야 합니다. 자세한 내용은 Amazon EC2 사용 설명서의 인스턴스 사용자 데이터 작업을 참조하세요.

마지막으로 지원되는 GPU 최적화 AMI 사용

GPU 최적화 AMI 20230906 버전을 사용하고 인스턴스 사용자 데이터에 다음을 추가할 수 있습니다.

cluster-name을 해당 클러스터의 이름으로 바꿉니다.

#!/bin/bash echo "exclude=*nvidia* *cuda*" >> /etc/yum.conf echo "ECS_CLUSTER=cluster-name" >> /etc/ecs/ecs.config

최신 GPU 최적화 AMI 사용 및 사용자 데이터 업데이트

인스턴스 사용자 데이터에 다음을 추가할 수 있습니다. 이렇게 하면 Nvidia 535/Cuda12.2 드라이버가 제거되고 Nvidia 470/Cuda11.4 드라이버가 설치되고 버전이 수정됩니다.

#!/bin/bash yum remove -y cuda-toolkit* nvidia-driver-latest-dkms* tmpfile=$(mktemp) cat >$tmpfile <<EOF [amzn2-nvidia] name=Amazon Linux 2 Nvidia repository mirrorlist=\$awsproto://\$amazonlinux.\$awsregion.\$awsdomain/\$releasever/amzn2-nvidia/latest/\$basearch/mirror.list priority=20 gpgcheck=1 gpgkey=https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/7fa2af80.pub enabled=1 exclude=libglvnd-* EOF mv $tmpfile /etc/yum.repos.d/amzn2-nvidia-tmp.repo yum install -y system-release-nvidia cuda-toolkit-11-4 nvidia-driver-latest-dkms-470.182.03 yum install -y libnvidia-container-1.4.0 libnvidia-container-tools-1.4.0 nvidia-container-runtime-hook-1.4.0 docker-runtime-nvidia-1 echo "exclude=*nvidia* *cuda*" >> /etc/yum.conf nvidia-smi

자체 P2 호환 GPU 최적화 AMI 생성

P2 인스턴스와 호환되는 사용자 지정 Amazon ECS GPU 최적화 AMI를 생성한 다음 AMI를 사용하여 P2 인스턴스를 시작할 수 있습니다.

  1. 다음 명령을 실행하여 amazon-ecs-ami repo를 복제합니다.

    git clone https://github.com/aws/amazon-ecs-ami
  2. release.auto.pkrvars.hcl 또는 overrides.auto.pkrvars.hcl에서 필요한 Amazon ECS 에이전트 및 소스 Amazon Linux AMI 버전을 설정합니다.

  3. 다음 명령을 실행하여 프라이빗 P2 호환 EC2 AMI를 빌드합니다.

    region을 인스턴스 리전이 리전으로 바꿉니다.

    REGION=region make al2keplergpu
  4. AMI에서 다음 인스턴스 사용자 데이터를 사용하여 Amazon ECS 클러스터에 연결합니다.

    cluster-name을 해당 클러스터의 이름으로 바꿉니다.

    #!/bin/bash echo "ECS_CLUSTER=cluster-name" >> /etc/ecs/ecs.config