아마존 AWS ECS에서 아마존 리눅스 2에서 뉴런 사용하기 - Amazon Elastic Container Service

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

아마존 AWS ECS에서 아마존 리눅스 2에서 뉴런 사용하기

기계 학습 워크로드를 위해 Amazon EC2 Trn1, Amazon EC2 Inf1Amazon EC2 Inf2 인스턴스를 클러스터에 등록할 수 있습니다.

Amazon EC2 Trn1 인스턴스는 AWS Trainium 칩으로 구동됩니다. 이러한 인스턴스는 클라우드에서의 기계 학습을 위한 고성능 및 저비용 교육을 제공합니다. Trn1 인스턴스에서 AWS Neuron과 함께 기계 학습 프레임워크를 사용하여 기계 학습 추론 모델을 교육시킬 수 있습니다. 그런 다음 Infe1 인스턴스 또는 Inf2 인스턴스에서 모델을 실행하여 Inferentia 칩의 가속을 사용할 수 있습니다. AWS

Amazon EC2 Inf1 인스턴스 및 Inf2 인스턴스는 AWS Inferentia 칩으로 구동됩니다. 이 칩은 클라우드에서 고성능의 가장 저렴한 추론을 제공합니다.

기계 학습 모델은 특화된 소프트웨어 개발 키트(SDK) AWS Neuron을 사용하여 컨테이너에 배포됩니다. SDK는 기계 학습 칩의 기계 학습 성능을 최적화하는 컴파일러, 런타임 및 프로파일링 도구로 구성됩니다. AWS AWS Neuron은 TensorFlow, PyTorch, Apache MXNet과 같은 인기 있는 기계 학습 프레임워크를 지원합니다.

고려 사항

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