AWS Neuron 기계 학습 워크로드에 대한 Amazon ECS 작업 정의
기계 학습 워크로드를 위해 Amazon EC2 Trn1
Amazon EC2 Trn1 인스턴스는 AWS Trainium
Amazon EC2 Inf1 인스턴스 및 Inf2 인스턴스는 AWS Inferentia
기계 학습 모델은 특화된 소프트웨어 개발 키트(SDK) AWS Neuron
고려 사항
Amazon ECS에 Neuron 배포를 시작하기 전에 다음에 주의하세요.
-
클러스터에 Trn1, Inf1, Inf2 및 그 외 인스턴스가 혼재되어 있을 수 있습니다.
-
AWS Neuron을 지원하는 기계 학습 프레임워크를 사용하는 컨테이너에 Linux 애플리케이션이 필요합니다.
중요
다른 프레임워크를 사용하는 애플리케이션은 Trn1, Inf1 및 Inf2 인스턴스에서 성능이 향상되지 않을 수 있습니다.
-
각 AWSTrainium
또는 AWSInferentia 칩에서 단 하나의 추론 또는 추론 교육 태스크만 실행할 수 있습니다. Inf1의 경우 각 칩에는 4개의 NeuronCore가 있습니다. Trn1과 Inf2의 경우 각 칩에는 2개의 NeuronCore가 있습니다. 각 Trn1, Inf1 및 Inf2 인스턴스의 칩이 존재하는 만큼 많은 작업을 실행할 수 있습니다. -
서비스를 생성하거나 독립적 태스크를 실행할 경우 작업 배치 제약 조건을 구성할 때 인스턴스 유형 속성을 사용할 수 있습니다. 이렇게 하면 지정한 컨테이너 인스턴스에서 태스크가 시작됩니다. 이렇게 하면 전체 리소스 사용률을 최적화하고 추론 워크로드에 대한 작업이 Trn1, Inf1 및 Inf2 인스턴스에 있는지 확인할 수 있습니다. 자세한 내용은 Amazon ECS가 컨테이너 인스턴스에 작업을 배치하는 방법 단원을 참조하십시오.
다음의 예제에서는
default
클러스터에 있는Inf1.xlarge
인스턴스에서 태스크를 실행합니다.aws ecs run-task \ --cluster default \ --task-definition ecs-inference-task-def \ --placement-constraints type=memberOf,expression="attribute:ecs.instance-type == Inf1.xlarge"
-
Neuron 리소스 요구 사항은 태스크 정의에서 정의할 수 없습니다. 그 대신에 호스트 컨테이너 인스턴스에서 특정 AWS Trainium 또는 AWS Inferentia 칩을 사용하도록 컨테이너를 구성합니다.
linuxParameters
파라미터 및 지정한 디바이스 세부 정보를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 태스크 정의 요구 사항 단원을 참조하십시오.
Amazon ECS 최적화 Amazon Linux 2023(Neuron) AMI 사용
Amazon ECS는 AWS Trainium 및 AWS Inferentia 워크로드용 Amazon Linux 2023을 기반으로 하는 Amazon ECS에 최적화된 AMI를 제공합니다. 이는 Docker용 AWS Neuron 드라이버 및 런타임과 함께 제공됩니다. 이 AMI를 사용하면 Amazon ECS에서 더욱 쉽게 기계 학습 인퍼런스 워크로드를 실행할 수 있습니다.
Amazon EC2 Trn1, Inf1, Inf2 인스턴스를 시작할 때 Amazon ECS 최적화 Amazon Linux 2023(Neuron) AMI를 사용하는 것을 권장합니다.
다음 명령으로 AWS CLI를 사용하여 현재 Amazon ECS에 최적화된 Amazon Linux 2023(Neuron) AMI를 검색할 수 있습니다.
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/neuron/recommended
Amazon ECS에 최적화된 Amazon Linux 2023(Neuron) AMI는 다음 리전에서 지원됩니다.
-
미국 동부(버지니아 북부)
-
미국 동부(오하이오)
-
미국 서부(캘리포니아 북부)
-
미국 서부(오레곤)
-
아시아 태평양(뭄바이)
-
아시아 태평양(오사카)
-
아시아 태평양(서울)
-
아시아 태평양(도쿄)
-
아시아 태평양(싱가포르)
-
아시아 태평양(시드니)
-
캐나다(중부)
-
유럽(프랑크푸르트)
-
유럽(아일랜드)
-
유럽(런던)
-
유럽(파리)
-
유럽(스톡홀름)
-
남아메리카(상파울루)
Amazon ECS 최적화 Amazon Linux 2(Neuron) AMI 사용
Amazon ECS는AWS Trainium 및 AWS Inferentia 워크로드용 Amazon Linux 2를 기반으로 하는 Amazon ECS에 최적화된 AMI를 제공합니다. 이는 Docker용 AWS Neuron 드라이버 및 런타임과 함께 제공됩니다. 이 AMI를 사용하면 Amazon ECS에서 더욱 쉽게 기계 학습 인퍼런스 워크로드를 실행할 수 있습니다.
Amazon EC2 Trn1, Inf1 및 Inf2 인스턴스를 시작할 때 Amazon ECS 최적화 Amazon Linux 2(Neuron) AMI를 사용하는 것이 좋습니다.
최신 Amazon ECS 최적화 Amazon Linux 2(Neuron) AMI는 다음 명령으로 AWS CLI에서 검색할 수 있습니다.
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/inf/recommended
Amazon ECS 최적화 Amazon Linux 2(Neuron) AMI는 다음 리전에서 지원됩니다.
-
미국 동부(버지니아 북부)
-
미국 동부(오하이오)
-
미국 서부(캘리포니아 북부)
-
미국 서부(오레곤)
-
아시아 태평양(뭄바이)
-
아시아 태평양(오사카)
-
아시아 태평양(서울)
-
아시아 태평양(도쿄)
-
아시아 태평양(싱가포르)
-
아시아 태평양(시드니)
-
캐나다(중부)
-
유럽(프랑크푸르트)
-
유럽(아일랜드)
-
유럽(런던)
-
유럽(파리)
-
유럽(스톡홀름)
-
남아메리카(상파울루)
태스크 정의 요구 사항
Amazon ECS에 Neuron을 배포하려면 태스크 정의에 TensorFlow용 추론 모델을 제공하는 사전 구축된 컨테이너에 대한 컨테이너 정의를 포함해야 합니다. AWS 딥 러닝 컨테이너에 의해 제공됩니다. 이 컨테이너에는 AWS Neuron 런타임과 TensorFlow Serving 애플리케이션이 포함됩니다. 시작 시 이 컨테이너는 Amazon S3에서 모델을 가져오고, 저장된 모델로 Neuron TensorFlow Serving을 시작하고, 예측 요청을 기다립니다. 다음 예의 컨테이너 이미지에는 TensorFlow 1.15와 Ubuntu 18.04가 있습니다. Neuron에 최적화된 사전 구축된 Deep Learning Containers의 전체 목록은 GitHub에서 관리됩니다. 자세한 내용은 Using AWS Neuron TensorFlow Serving을 참조하세요.
763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-neuron:1.15.4-neuron-py37-ubuntu18.04
또는, 자체 Neuron 사이드카 컨테이너 이미지를 구축할 수 있습니다. 자세한 내용은 AWS Deep Learning AMIs 개발자 안내서의 Tutorial: Neuron TensorFlow Serving
작업 정의는 단일 인스턴스 유형에만 고유해야 합니다. 호스트 컨테이너 인스턴스에서 특정 AWS Trainium 또는 AWS Inferentia 디바이스를 사용하도록 컨테이너를 구성해야 합니다. linuxParameters
파라미터를 사용해 이 작업을 수행할 수 있습니다. 다음 표에는 각 인스턴스 유형에 해당하는 칩이 자세히 나와 있습니다.
인스턴스 유형 | vCPU | RAM(GiB) | AWS ML 액셀러레이터 칩 | 디바이스 경로 |
---|---|---|---|---|
trn1.2xlarge | 8 | 32 | 1 | /dev/neuron0 |
trn1.32xlarge | 128 | 512 | 16 |
/dev/neuron0 , /dev/neuron1 ,
/dev/neuron2 , /dev/neuron3 ,
/dev/neuron4 , /dev/neuron5 ,
/dev/neuron6 , /dev/neuron7 ,
/dev/neuron8 , /dev/neuron9 ,
/dev/neuron10 , /dev/neuron11 ,
/dev/neuron12 , /dev/neuron13 ,
/dev/neuron14 , /dev/neuron15
|
inf1.xlarge | 4 | 8 | 1 | /dev/neuron0 |
inf1.2xlarge | 8 | 16 | 1 | /dev/neuron0 |
inf1.6xlarge | 24 | 48 | 4 | /dev/neuron0 , /dev/neuron1 ,
/dev/neuron2 , /dev/neuron3 |
inf1.24xlarge | 96 | 192 | 16 |
/dev/neuron0 , /dev/neuron1 ,
/dev/neuron2 , /dev/neuron3 ,
/dev/neuron4 , /dev/neuron5 ,
/dev/neuron6 , /dev/neuron7 ,
/dev/neuron8 , /dev/neuron9 ,
/dev/neuron10 , /dev/neuron11 ,
/dev/neuron12 , /dev/neuron13 ,
/dev/neuron14 , /dev/neuron15
|
inf2.xlarge | 8 | 16 | 1 | /dev/neuron0 |
inf2.8xlarge | 32 | 64 | 1 | /dev/neuron0 |
inf2.24xlarge | 96 | 384 | 6 | /dev/neuron0 , /dev/neuron1 ,
/dev/neuron2 , /dev/neuron3 ,
/dev/neuron4 , /dev/neuron5 , |
inf2.48xlarge | 192 | 768 | 12 | /dev/neuron0 , /dev/neuron1 ,
/dev/neuron2 , /dev/neuron3 ,
/dev/neuron4 , /dev/neuron5 ,
/dev/neuron6 , /dev/neuron7 ,
/dev/neuron8 , /dev/neuron9 ,
/dev/neuron10 , /dev/neuron11 |