

# AWS Neuron 기계 학습 워크로드에 대한 Amazon ECS 작업 정의
<a name="ecs-inference"></a>

기계 학습 워크로드를 위해 클러스터에서 [Amazon EC2 Trn1](https://aws.amazon.com/ec2/instance-types/trn1/), [Amazon EC2 Trn2](https://aws.amazon.com/ec2/instance-types/trn2/), [Amazon EC2 Inf1](https://aws.amazon.com/ec2/instance-types/inf1/)(Inf1은 EC2 시작 유형에서만 지원됨) 및 [Amazon EC2 Inf2](https://aws.amazon.com/ec2/instance-types/inf2/) 인스턴스를 사용할 수 있습니다.

Amazon EC2 Trn1, Trn2 인스턴스는 [AWS Trainium](https://aws.amazon.com/ai/machine-learning/trainium/) 칩으로 구동됩니다. 이러한 인스턴스는 클라우드에서의 기계 학습을 위한 고성능 및 저비용 교육을 제공합니다. Trn1 또는 Trn2 인스턴스에서 AWS Neuron과 함께 기계 학습 프레임워크를 사용하여 기계 학습 추론 모델을 교육시킬 수 있습니다. 그런 다음 Inf1 인스턴스(Inf1은 EC2 시작 유형에서만 지원됨) 또는 Inf2 인스턴스에서 모델을 실행하여 AWS Inferentia 칩의 가속을 사용할 수 있습니다.

Amazon EC2 Inf1 인스턴스 및 Inf2 인스턴스는 [AWS Inferentia](https://aws.amazon.com/ai/machine-learning/inferentia/) 칩으로 구동됩니다. 이 칩은 클라우드에서 고성능의 가장 저렴한 추론을 제공합니다.

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

## 고려 사항
<a name="ecs-inference-considerations"></a>

Amazon ECS에 Neuron 배포를 시작하기 전에 다음에 주의하세요.
+ 시작 유형에 따라 클러스터에 Trn1, Trn2, Inf1, Inf2 및 그 외 인스턴스가 혼재되어 있을 수 있습니다.
+ AWS Neuron을 지원하는 기계 학습 프레임워크를 사용하는 컨테이너에 Linux 애플리케이션이 필요합니다.
**중요**  
다른 프레임워크를 사용하는 애플리케이션은 Trn1, Trn2, Inf1 및 Inf2 인스턴스에서 성능이 향상되지 않을 수 있습니다.
+ Amazon ECS는 Neuron 디바이스 액세스 구성을 위한 두 가지 접근 방식을 지원합니다.
  + **관리형 Neuron 디바이스 할당** - 컨테이너 정의에서 `NeuronDevice` 유형의 `resourceRequirements` 파라미터를 사용합니다. Amazon ECS는 자동으로 Neuron 디바이스를 검색하고 컨테이너에 할당합니다. 관리형 인스턴스에서만 사용할 수 있습니다. 자세한 내용은 [관리형 Neuron 디바이스 할당](#ecs-inference-managed) 섹션을 참조하세요.
  + **수동 Neuron 디바이스 지정** - `linuxParameters.devices` 파라미터를 사용하여 Neuron 디바이스 경로를 명시적으로 지정합니다. EC2 인스턴스 시작 유형과 관리형 인스턴스 모두에서 사용할 수 있습니다. 자세한 내용은 [수동 Neuron 디바이스 지정](#ecs-inference-ec2) 섹션을 참조하세요.
**중요**  
충돌을 피하려면 한 가지 접근 방식만 일관되게 사용하세요.

## 관리형 Neuron 디바이스 할당
<a name="ecs-inference-managed"></a>

관리형 인스턴스를 사용하면 컨테이너 정의에서 `resourceRequirements` 파라미터를 통해 Neuron 디바이스를 요청할 수 있습니다. Amazon ECS는 인스턴스에서 Neuron 디바이스를 자동으로 검색하고, 태스크에 할당하고, 인스턴스의 모든 Neuron 디바이스에 액세스할 수 있는 컨테이너를 구성합니다. 태스크에는 모든 디바이스에 대한 독점 액세스가 필요하므로 인스턴스당 하나의 Neuron 태스크만 실행됩니다.

**참고**  
`Inf1` 인스턴스는 EC2 시작 유형에서만 지원됩니다. Inf1 인스턴스를 사용하려면 [수동 Neuron 디바이스 지정](#ecs-inference-ec2) 섹션을 참조하세요.

### Neuron 인스턴스 선택
<a name="ecs-inference-managed-instance-selection"></a>

관리형 인스턴스 워크로드에 대해 Neuron 지원 인스턴스 유형을 선택하려면 용량 공급자의 시작 템플릿에 있는 `instanceRequirements` 객체를 사용합니다. 다음 속성을 사용하여 Neuron 지원 인스턴스를 선택할 수 있습니다.
+ `acceleratorManufacturers` - `amazon-web-services`를 사용하여 AWS 액셀러레이터(Inferentia 및 Trainium 포함)가 있는 인스턴스를 선택합니다.
+ `acceleratorNames` - `inferentia2`, `trainium` 또는 `trainium2`를 사용하여 특정 액셀러레이터 칩을 선택합니다.
+ `allowedInstanceTypes` - `inf*`와 `trn*`를 사용하여 이름으로 Neuron 인스턴스 유형을 선택합니다.

다음 예에는 `allowedInstanceTypes`가 사용됩니다.

```
{
    "instanceRequirements": {
        "allowedInstanceTypes": ["inf*", "trn*"]
    }
}
```

### 태스크 정의
<a name="ecs-inference-managed-task-def"></a>

태스크 정의에서 Neuron 디바이스를 요청하려면 유형을 `NeuronDevice`로 설정하고 값을 `ALL`로 설정하여 `resourceRequirements` 항목을 추가합니다. 이를 통해 컨테이너가 인스턴스의 모든 Neuron 디바이스에 독점적으로 액세스할 수 있습니다.

다음과 같은 제약이 적용됩니다.
+ `resourceRequirements`에서 `NeuronDevice`를 지정할 수 있는 컨테이너 정의는 최대 하나입니다.
+ 동일한 태스크 정의 내에서 Neuron 디바이스에 대해 `resourceRequirements`(`NeuronDevice` 유형)와 `linuxParameters.devices`를 함께 사용할 수 없습니다.

태스크가 시작된 후 `DescribeTasks` API 작업을 직접적으로 호출하여 Neuron 디바이스 할당을 확인할 수 있습니다. 응답에는 할당된 Neuron 디바이스의 ID를 보여주는 각 컨테이너의 `neuronDeviceIds` 필드가 포함됩니다. `DescribeContainerInstances` API 작업을 직접적으로 호출하여 컨테이너 인스턴스의 `registeredResources` 및 `remainingResources` 필드에서 `NEURON_DEVICES`를 확인할 수도 있습니다.

태스크 정의 예제는 [Neuron 태스크 정의 예제](ecs-inference-task-def.md) 섹션을 참조하세요.

## 수동 Neuron 디바이스 지정
<a name="ecs-inference-ec2"></a>

이 접근 방식을 사용하면 `linuxParameters.devices` 파라미터로 태스크 정의에서 AWS Trainium 또는 AWS Inferentia 디바이스 경로를 수동으로 지정할 수 있습니다. 이 접근 방식은 EC2 시작 유형과 관리형 인스턴스 모두에서 작동합니다.

각 [AWSTrainium](https://aws.amazon.com/ai/machine-learning/trainium/) 또는 [AWSInferentia](https://aws.amazon.com/ai/machine-learning/inferentia/) 칩에서 단 하나의 추론 또는 추론 교육 태스크만 실행할 수 있습니다. 각 태스크에 서로 다른 디바이스를 할당하여 인스턴스에 있는 칩 수만큼 태스크를 실행할 수 있습니다.

EC2 시작 유형의 경우 태스크 배치 제약 조건을 구성할 때 인스턴스 유형 속성을 사용하여 태스크가 지정한 인스턴스 유형에서 시작되도록 할 수 있습니다. 자세한 내용은 [Amazon ECS가 컨테이너 인스턴스에 작업을 배치하는 방법](task-placement.md) 섹션을 참조하세요.

### 태스크 정의 요구 사항
<a name="ecs-inference-requirements"></a>

작업 정의는 단일 인스턴스 유형에만 고유해야 합니다. 호스트 컨테이너 인스턴스에서 특정 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  | 
| trn2.48xlarge | 192 | 1536 | 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 | 

태스크 정의 예제는 [Neuron 태스크 정의 예제](ecs-inference-task-def.md) 섹션을 참조하세요.

### 관리형 인스턴스
<a name="ecs-inference-manual-mi"></a>

관리형 인스턴스는 Neuron 드라이버가 포함된 AMI를 자동으로 사용합니다. 추가 AMI 구성은 필요하지 않습니다.

### EC2 시작 유형
<a name="ecs-inference-manual-ec2"></a>

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
```