기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
아마존 AWS ECS에서 아마존 리눅스 2에서 뉴런 사용하기
기계 학습 워크로드를 위해 Amazon EC2 Trn1
Amazon EC2 Trn1 인스턴스는 AWS Trainium
Amazon EC2 Inf1 인스턴스 및 Inf2 인스턴스는 AWS Inferentia
기계 학습 모델은 특화된 소프트웨어 개발 키트(SDK) AWS Neuron
고려 사항
Amazon ECS에 Neuron 배포를 시작하기 전에 다음에 주의하세요.
-
클러스터에 Trn1, Inf1, Inf2 및 그 외 인스턴스가 혼재되어 있을 수 있습니다.
-
Neuron을 지원하는 기계 학습 프레임워크를 사용하는 컨테이너에 Linux 애플리케이션이 있어야 합니다. AWS
중요
다른 프레임워크를 사용하는 애플리케이션은 Trn1, Inf1 및 Inf2 인스턴스에서 성능이 향상되지 않을 수 있습니다.
-
각 AWS Trainium
또는 AWS Inferentia 칩에서 단 하나의 추론 또는 추론 교육 태스크만 실행할 수 있습니다. Inf1의 경우 각 칩에는 4개가 있습니다. NeuronCores Trn1과 Inf2의 경우 각 칩에는 2개가 있습니다. NeuronCores 각 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 2(Neuron) AMI 사용
Amazon ECS는 AWS 트레이니엄 및 인퍼런티아 워크로드를 위한 Amazon Linux 2를 기반으로 하는 Amazon ECS에 최적화된 AMI를 제공합니다. AWS Docker용 Neuron 드라이버 및 런타임이 AWS 함께 제공됩니다. 이 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 (뉴런) AMI는 다음 지역에서 지원됩니다.
-
미국 동부(버지니아 북부)
-
미국 동부(오하이오)
-
미국 서부(캘리포니아 북부)
-
미국 서부(오레곤)
-
아시아 태평양(뭄바이)
-
아시아 태평양(오사카)
-
아시아 태평양(서울)
-
아시아 태평양(도쿄)
-
아시아 태평양(싱가포르)
-
아시아 태평양(시드니)
-
캐나다(중부)
-
유럽(프랑크푸르트)
-
유럽(아일랜드)
-
유럽(런던)
-
유럽(파리)
-
유럽(스톡홀름)
-
남아메리카(상파울루)
태스크 정의 요구 사항
Amazon ECS에 Neuron을 배포하려면 작업 정의에 추론 모델을 제공하는 사전 구축된 컨테이너에 대한 컨테이너 정의가 포함되어야 합니다. TensorFlow AWS Deep Learning Containers에서 제공합니다. 이 컨테이너에는 AWS Neuron 런타임과 TensorFlow Serving 애플리케이션이 포함되어 있습니다. 시작 시 이 컨테이너는 Amazon S3에서 모델을 가져와서 저장된 모델로 Neuron TensorFlow Servicing을 시작하고 예측 요청을 기다립니다. 다음 예제에서 컨테이너 이미지는 TensorFlow 1.15이고 Ubuntu 18.04입니다. Neuron에 최적화된 사전 빌드된 Deep Learning Container의 전체 목록은 에서 유지 관리됩니다. GitHub 자세한 내용은 AWS 뉴런 TensorFlow 서비스 사용을 참조하십시오.
763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-neuron:1.15.4-neuron-py37-ubuntu18.04
또는, 자체 Neuron 사이드카 컨테이너 이미지를 구축할 수 있습니다. 자세한 내용은 AWS Deep Learning AMI 개발자 안내서의 자습서: 뉴런 TensorFlow 서빙을
작업 정의는 단일 인스턴스 유형에만 고유해야 합니다. 호스트 컨테이너 인스턴스에서 사용할 수 있는 특정 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 |
다음은 사용할 구문을 표시한 inf1.xlarge
에 대한 Linux 태스크 정의의 예입니다.
{ "family": "ecs-neuron", "requiresCompatibilities": ["EC2"], "placementConstraints": [ { "type": "memberOf", "expression": "attribute:ecs.os-type == linux" }, { "type": "memberOf", "expression": "attribute:ecs.instance-type ==
inf1.xlarge
" } ], "executionRoleArn": "${YOUR_EXECUTION_ROLE}
", "containerDefinitions": [ { "entryPoint": [ "/usr/local/bin/entrypoint.sh", "--port=8500", "--rest_api_port=9000", "--model_name=resnet50_neuron", "--model_base_path=s3://your-bucket-of-models/resnet50_neuron/
" ], "portMappings": [ { "hostPort": 8500, "protocol": "tcp", "containerPort": 8500 }, { "hostPort": 8501, "protocol": "tcp", "containerPort": 8501 }, { "hostPort": 0, "protocol": "tcp", "containerPort": 80 } ], "linuxParameters": { "devices": [ { "containerPath": "/dev/neuron0", "hostPath": "/dev/neuron0", "permissions": [ "read", "write" ] } ], "capabilities": { "add": [ "IPC_LOCK" ] } }, "cpu": 0, "memoryReservation": 1000, "image": "763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-neuron:1.15.4-neuron-py37-ubuntu18.04
", "essential": true, "name": "resnet50" } ] }