Amazon ECS에서 GPU 사용 - Amazon Elastic Container Service

Amazon ECS에서 GPU 사용

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

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

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

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

중요

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

인스턴스 유형

GPU

GPU 메모리(GiB)

vCPUs

메모리(GiB)

p2.xlarge

1

12

4

61

p2.8xlarge

8

96

32

488

p2.16xlarge

16

192

64

732

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

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

Considerations

Amazon ECS에서 GPU 태스크를 시작할 때 먼저 다음 사항을 고려하세요.

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

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

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

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

  • NVIDIA 컨테이너 런타임은 작동하려면 컨테이너에 일부 환경 변수를 설정해야 합니다. 이러한 환경 변수 목록은 nvidia-container-runtime을 참조하세요. Amazon ECS는 Amazon ECS가 컨테이너에 할당하는 GPU 디바이스 ID의 목록이 될 NVIDIA_VISIBLE_DEVICES 환경 변수 값을 설정합니다. 다른 필수 환경 변수의 경우 Amazon ECS에서는 그러한 변수를 설정하지 않으므로 컨테이너 이미지에서 해당 변수를 설정하거나 컨테이너 정의에 설정해야 합니다.

  • g4 인스턴스 유형 패밀리는 20190913 이상 버전의 Amazon ECS GPU 최적화 AMI에서 지원됩니다. 자세한 내용은 Linux Amazon ECS 최적화 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 Container Runtime 변수를 다음 값 중 하나로 설정해야 합니다.

    • utility,compute

    • all

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

태스크 정의 시 GPU 지정

Docker GPU 실행 시간과 컨테이너 인스턴스의 GPU를 이용하려면 태스크 정의 시 컨테이너에 필요한 GPU 수를 지정해야 합니다. GPU 지원 컨테이너가 배치되므로 Amazon ECS 컨테이너 에이전트가 필요한 실제 GPU 수를 해당 컨테이너에 고정합니다. 태스크의 모든 컨테이너에 예약된 GPU 수가 태스크가 실행되는 컨테이너 인스턴스에서 사용할 수 있는 GPU 수를 초과하면 안 됩니다. 자세한 내용은 태스크 정의 생성하기 섹션을 참조하세요.

중요

태스크 정의 때 GPU 조건을 지정하지 않으면 해당 태스크에서 기본 Docker 실행 시간이 사용됩니다.

다음은 태스크 정의 시 GPU 조건의 JSON 형식입니다.

{ "containerDefinitions": [ { ... "resourceRequirements" : [ { "type" : "GPU", "value" : "2" } ], }, ... }

다음 예제는 GPU 조건을 지정하는 Docker 컨테이너용 구문을 보여줍니다. 이 컨테이너는 GPU 2개를 사용하고, nvidia-smi 유틸리티를 실행한 후 종료합니다.

{ "containerDefinitions": [ { "memory": 80, "essential": true, "name": "gpu", "image": "nvidia/cuda:11.0-base", "resourceRequirements": [ { "type":"GPU", "value": "2" } ], "command": [ "sh", "-c", "nvidia-smi" ], "cpu": 100 } ], "family": "example-ecs-gpu" }