

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

# 생성된 컨테이너에 추론 출력을 구성하기
<a name="autopilot-automate-model-development-container-output"></a>

Autopilot은 순서가 지정된 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html) 목록을 생성합니다. 이를 사용하여 기계 학습 파이프라인에 배포할 모델을 구축할 수 있습니다. 이 모델은 온라인 호스팅 및 추론에 사용할 수 있습니다.

고객은 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListCandidateForAutoMLJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListCandidateForAutoMLJob.html) API를 사용하여 추론 컨테이너 정의를 나열할 수 있습니다. 최적의 후보를 나타내는 추론 컨테이너 정의 목록은 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJob.html) 응답에서도 확인할 수 있습니다.

## 회귀 및 분류 문제 유형의 추론 컨테이너 정의
<a name="autopilot-problem-type-container-output"></a>

Autopilot은 [훈련 모드](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-model-support-validation.html#autopilot-training-mode) 및 작업의 [문제 유형](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-datasets-problem-types.html#autopilot-problem-types)에 맞는 추론 컨테이너를 생성합니다.

### 하이퍼파라미터 최적화(HPO) 모드의 컨테이너 정의
<a name="autopilot-problem-type-container-output-hpo"></a>
+ **회귀**: HPO는 다음과 같은 두 개의 컨테이너를 생성합니다.

  1. 원래의 기능을 회귀 알고리즘이 학습할 수 있는 기능으로 변환하는 기능 엔지니어링 컨테이너입니다.

  1. 기능을 변환하고 데이터세트의 회귀 점수를 생성하는 알고리즘 컨테이너입니다.
+ **분류**: HPO는 다음과 같은 세 개의 컨테이너를 생성합니다.

  1. 원래의 기능을 분류 알고리즘이 학습할 수 있는 기능으로 변환하는 기능 엔지니어링 컨테이너입니다.

  1. 가장 높은 확률의 `predicted_label`을 생성하는 알고리즘 컨테이너입니다. 또한 이 컨테이너는 추론 응답의 분류 결과와 관련된 다양한 확률을 산출할 수 있습니다.

  1. 알고리즘 예측의 사후 처리를 수행하는 기능 엔지니어링 컨테이너입니다. 예를 들어 예측된 레이블에 역변환을 수행하여 원래 레이블로 변경할 수 있습니다.

### 앙상블 모드의 컨테이너 정의
<a name="autopilot-problem-type-container-output-ensemble"></a>

앙상블 모드에서는 회귀 및 분류 문제 유형 모두 추론 컨테이너가 단 하나입니다. 이 추론 컨테이너는 기능을 변환하고 문제 유형에 따라 예측을 생성합니다.

## 문제 유형별 추론 응답
<a name="autopilot-problem-type-inference-response"></a>

### 분류 모델의 추론 응답
<a name="autopilot-problem-type-inference-response-classification"></a>

분류 추론 컨테이너의 경우 다음과 같이 사전 정의된 네 개의 키를 사용하여 추론 응답의 내용을 선택할 수 있습니다.
+ `predicted_label`: Autopilot에 의해 결정된, 정확한 라벨을 예측할 확률이 가장 높은 라벨.
+ `probability`: 
  + **HPO 모델:** 바이너리 분류의 `True` 확률. 멀티클래스 분류의 `predicted_label` 확률.
  + **앙상블 모델:** 바이너리 및 멀티클래스 분류의 `predicted_label` 확률.
+ `probabilities`: 해당하는 모든 클래스의 확률 목록.
+ `labels`: 모든 레이블 목록.

예를 들어 바이너리 분류 문제의 경우 추론 응답 키 `['predicted_label', 'probability', 'probabilities', 'labels']`를 전달하고 출력 응답이 `[1, 0.1, "[0.9, 0.1]", "['1', '0']"]`으로 나타나면 다음과 같이 해석해야 합니다.

1. `predicted_label`은 `1`와 같습니다. 레이블 “1"의 확률이 더 높기 때문입니다(이 경우 `0.9`).

1. HPO 모델의 경우 `probability`는 Autopilot이 선택한 `positive_class`(이 `0` 경우)의 확률인 `0.1`과 같습니다.

   앙상블 모델의 경우 `probability`는 `predicted_label`의 확률인 `0.9`와 같습니다.

1. `probabilities`은 `labels`에 있는 각 레이블의 `probability` 목록을 표시합니다.

1. `labels`는 데이터세트의 고유한 레이블로, 두 번째 레이블(이 경우 “0")이 Autopilot이 선택한 `positive_class`입니다.

기본적으로 추론 컨테이너는 `predicted_label`만 생성하도록 구성됩니다. 추가 추론 콘텐츠를 선택하려면 다음 세 가지 환경 변수를 포함하도록 `inference_response_keys` 파라미터를 업데이트하면 됩니다.
+ `SAGEMAKER_INFERENCE_SUPPORTED`: 각 컨테이너가 지원하는 콘텐츠에 대한 힌트를 제공하도록 설정됩니다.
+ `SAGEMAKER_INFERENCE_INPUT`: 컨테이너가 입력 페이로드에서 예상하는 키로 설정해야 합니다.
+ `SAGEMAKER_INFERENCE_OUTPUT`: 컨테이너가 출력하는 키 세트로 채워져야 합니다.

### HPO 모드에서 분류 모델의 추론 응답
<a name="autopilot-problem-type-inference-response-classification-hpo"></a>

이 섹션에서는 하이퍼파라미터 최적화(HPO) 모드를 사용하여 분류 모델의 추론 응답을 구성하는 방법을 보여줍니다.

HPO 모드에서 추론 응답 콘텐츠를 선택하려면: 분류 문제를 위해 HPO 모드에서 생성되는 두 번째 및 세 번째 컨테이너에 `SAGEMAKER_INFERENCE_INPUT` 및 `SAGEMAKER_INFERENCE_OUTPUT` 변수를 추가합니다.

두 번째 컨테이너(알고리즘)에서 지원하는 키는 predicted\_label, probability 및 probabilities입니다. `labels`은 의도적으로 `SAGEMAKER_INFERENCE_SUPPORTED`에 추가하지 않았습니다.

세 번째 분류 모델 컨테이너에서 지원하는 키는`predicted_label`, `labels`, `probability` 및 `probabilities`입니다. 따라서 `SAGEMAKER_INFERENCE_SUPPORTED` 환경에는 이러한 키의 이름이 포함됩니다.

`predicted_label` 및 `probability`을 받을 추론 컨테이너 정의를 업데이트하려면 다음 코드 예제를 사용합니다.

```
containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})
containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label, probability'})
containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})
```

다음 코드 예제는 `predicted_label`, `probabilities` 및 `labels`을 받을 추론 컨테이너 정의를 업데이트합니다. 두 번째 컨테이너(알고리즘 컨테이너)에 `labels`을 전달하지 마세요. 이는 세 번째 컨테이너에서 독립적으로 생성됩니다.

```
containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label,probabilities'})
containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label,probabilities'})
containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probabilities,labels'})
```

다음 축소 가능한 섹션에서는 및 SageMaker SDK for Python AWS SDK for Python (Boto3) 에 대한 코드 예제를 제공합니다. 각 섹션에서는 각 코드 예제에 대해 HPO 모드에서 추론 응답의 콘텐츠를 선택하는 방법을 보여줍니다.

#### AWS SDK for Python (Boto3)
<a name="autopilot-problem-type-inference-response-classification-hpo-boto3"></a>

```
import boto3

sm_client = boto3.client('sagemaker', region_name='{{<Region>}}')

role = '{{<IAM role>}}'
input_data = '{{<S3 input uri>}}'
output_path = '{{<S3 output uri>}}'

best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName='{{<AutoML Job Name>}}')['BestCandidate']
best_candidate_containers = best_candidate['InferenceContainers']
best_candidate_name = best_candidate['{{CandidateName}}']

best_candidate_containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})
best_candidate_containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label, probability'})
best_candidate_containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})

# create model
reponse = sm_client.create_model(
    ModelName = '{{<Model Name>}}',
    ExecutionRoleArn = role,
    Containers = best_candidate_containers
)

# Lauch Transform Job
response = sm_client.create_transform_job(
    TransformJobName='{{<Transform Job Name>}}',
    ModelName='{{<Model Name>}}',
    TransformInput={
        'DataSource': {
            'S3DataSource': {
                'S3DataType': '{{S3Prefix}}',
                'S3Uri': {{input_data}}
            }
        },
        'ContentType': "text/CSV",
        'SplitType': 'Line'
    },
    TransformOutput={
        'S3OutputPath': {{output_path}},
        'AssembleWith': 'Line',
    },
    TransformResources={
        'InstanceType': '{{ml.m4.xlarge}}',
        'InstanceCount': 1,
    },
)
```

#### Python용 SageMaker SDK
<a name="autopilot-problem-type-inference-response-classification-hpo-sdk"></a>

```
from sagemaker import AutoML

aml = AutoML.attach(auto_ml_job_name='{{<AutoML Job Name>}}')
aml_best_model = aml.create_model(name='{{<Model Name>}}',
                                  candidate=None,
                                  inference_response_keys**=['probabilities', 'labels'])

aml_transformer = aml_best_model.transformer(accept='text/csv',
                                            assemble_with='Line',
                                            instance_type='{{ml.m5.xlarge}}',
                                            instance_count=1,)

aml_transformer.transform('{{<S3 input uri>}}',
                          content_type='text/csv',
                          split_type='Line',
                          job_name='{{<Transform Job Name>}}',
                          wait=True)
```

### 앙상블 모드에서 분류 모델의 추론 응답
<a name="autopilot-problem-type-inference-response-classification-ensemble"></a>

이 섹션에서는 앙상블 모드를 사용하여 분류 모델의 추론 응답을 구성하는 방법을 보여줍니다.

**앙상블 모드**에서 추론 응답의 내용을 선택하려면 `SAGEMAKER_INFERENCE_OUTPUT` 환경 변수를 업데이트합니다.

분류 모델 컨테이너에서 지원하는 키는`predicted_label`, `labels`, `probability` 및 `probabilities`입니다. 이러한 키는 `SAGEMAKER_INFERENCE_SUPPORTED` 환경에 포함됩니다.

`predicted_label`및 `probability`를 받을 추론 컨테이너 정의를 업데이트하려면 다음 코드 예제를 참조하세요.

```
containers[0]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})
```

다음 접이식 섹션에서는 앙상블 모드에서 추론 응답의 내용을 선택하기 위한 코드 예제를 제공합니다. 이 예제에서는를 사용합니다 AWS SDK for Python (Boto3).

#### AWS SDK for Python (Boto3)
<a name="autopilot-problem-type-inference-response-classification-ensembling-boto3"></a>

```
import boto3
sm_client = boto3.client('sagemaker', region_name='{{<Region>}}')

role = '{{<IAM role>}}'
input_data = '{{<S3 input uri>}}'
output_path = '{{<S3 output uri>}}' 

best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName='{{<AutoML Job Name>}}')['BestCandidate']
best_candidate_containers = best_candidate['InferenceContainers']
best_candidate_name = best_candidate['{{CandidateName}}']

*best_candidate_containers[0]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})
*
# create model
reponse = sm_client.create_model(
    ModelName = '{{<Model Name>}}',
    ExecutionRoleArn = role,
    Containers = best_candidate_containers
)

# Lauch Transform Job
response = sm_client.create_transform_job(
    TransformJobName='{{<Transform Job Name>}}',
    ModelName='{{<Model Name>}}',
    TransformInput={
        'DataSource': {
            'S3DataSource': {
                'S3DataType': '{{S3Prefix}}',
                'S3Uri': input_data
            }
        },
        'ContentType': "text/CSV",
        'SplitType': 'Line'
    },
    TransformOutput={
        'S3OutputPath': output_path,
        'AssembleWith': 'Line',
    },
    TransformResources={
        'InstanceType': '{{ml.m4.xlarge}}',
        'InstanceCount': 1,
    },
)
```

다음 접이식 섹션에서는 HPO를 위해 Python용 SageMaker SDK 예제와 동일한 코드 예제를 제공합니다. 편의를 위해 포함되어 있습니다.

#### Python용 SageMaker SDK
<a name="autopilot-problem-type-inference-response-classification-ensembling-sdk"></a>

다음 HPO 코드 예제는 Python용 SageMaker SDK를 사용합니다.

```
from sagemaker import AutoML

aml = AutoML.attach(auto_ml_job_name='<AutoML Job Name>')
aml_best_model = aml.create_model(name='<Model Name>',
                                  candidate=None,
                                  *inference_response_keys**=['probabilities', 'labels'])*

aml_transformer = aml_best_model.transformer(accept='text/csv',
                                            assemble_with='Line',
                                            instance_type='ml.m5.xlarge',
                                            instance_count=1,)

aml_transformer.transform('<S3 input uri>',
                          content_type='text/csv',
                          split_type='Line',
                          job_name='<Transform Job Name>',
                          wait=True)
```