

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

# 모델 컨테이너 사전 확인
<a name="clarify-online-explainability-precheck"></a>

이 섹션은 엔드포인트를 구성하기 전에 모델 컨테이너 입력 및 출력의 호환성을 사전 확인하는 방법을 보여줍니다. SageMaker Clarify의 설명자는 **모델에 구애받지 않지만** 모델 컨테이너 입력 및 출력에 대한 요구 사항이 있습니다.

**참고**  
단일 요청으로 2개 이상의 레코드를 지원하는 배치 요청을 지원하도록 컨테이너를 구성하여 효율성을 높일 수 있습니다. 예를 들어 단일 레코드는 CSV 데이터 한 줄 또는 JSON 행 데이터 한 줄입니다. SageMaker Clarify는 단일 레코드 요청으로 돌아가기 전에 먼저 미니 배치의 레코드를 모델 컨테이너로 보내려고 시도합니다.

## 모델 컨테이너 입력
<a name="clarify-online-explainability-input"></a>

------
#### [ CSV ]

모델 컨테이너는 MIME 유형: `text/csv`의 CSV 입력을 지원합니다. 다음 테이블에 SageMaker Clarify가 지원하는 입력의 예제가 나와 있습니다.


| 모델 컨테이너 입력(문자열 표현) | 설명 | 
| --- | --- | 
|  '1,2,3,4'  |  네 가지 수치적 특징을 사용하는 단일 레코드.  | 
|  '1,2,3,4\$1n5,6,7,8'  |  줄 바꿈 '\$1n'으로 구분된 2개의 레코드  | 
|  '"좋은 제품입니다”,5'  |  텍스트 특징 1개 및 수치적 특징 1개를 포함한 단일 레코드.  | 
|  ‘"좋은 제품입니다",5\$1n"나쁜 쇼핑 경험",1'  |  레코드 2개.  | 

------
#### [ JSON Lines ]

SageMaker AI는 다음 표와 같이 MIME 유형: `application/jsonlines`를 사용하는 [JSON 행 밀집 형식](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html#cm-jsonlines)의 입력도 지원합니다.


| 모델 컨테이너 입력 | 설명 | 
| --- | --- | 
|  '\$1"data":\$1"features":[1,2,3,4]\$1\$1'  |  단일 레코드. JMESPath 표현식 `data.features`로 기능 목록을 추출할 수 있습니다.  | 
|  '\$1"data":\$1"features":[1,2,3,4]\$1\$1\$1n\$1"data":\$1"features":[5,6,7,8]\$1\$1'  |  레코드 2개.  | 
|  '\$1"features":["좋은 제품입니다",5]\$1'  |  단일 레코드. JMESPath 표현식 `features`로 기능 목록을 추출할 수 있습니다.  | 
|  '\$1"features":["좋은 제품입니다",5]\$1\$1n\$1"features":["나쁜 쇼핑 경험",1]\$1'  |  레코드 2개.  | 

------

## 모델 컨테이너 출력
<a name="clarify-online-explainability-output"></a>

또한 모델 컨테이너 출력은 CSV 또는 JSON 행 밀집 형식이어야 합니다. 또한 모델 컨테이너에는 SageMaker Clarify가 기능 속성을 계산하는 데 사용하는 입력 레코드의 확률이 포함되어야 합니다.

다음 데이터 예제는 **CSV 형식**의 모델 컨테이너 출력에 대한 것입니다.

------
#### [ Probability only ]

회귀 및 바이너리 분류 문제의 경우 모델 컨테이너는 예측 레이블의 단일 확률 값(점수)을 출력합니다. 열 인덱스 0을 사용하여 이러한 확률을 추출할 수 있습니다. 다중 클래스 문제의 경우 모델 컨테이너는 확률 목록(점수)을 출력합니다. 다중 클래스 문제의 경우 인덱스가 제공되지 않으면 모든 값이 추출됩니다.


| 모델 컨테이너 입력 | 모델 컨테이너 출력(문자열 표현) | 
| --- | --- | 
|  단일 레코드  |  '0.6'  | 
|  레코드 2개(한 줄에 결과 표시)  |  '0.6,0.3'  | 
|  레코드 2개(두 줄로 결과 표시)  |  '0.6\$1n0.3'  | 
|  멀티클래스 모델의 단일 레코드(3개 클래스)  |  '0.1,0.6,0.3'  | 
|  멀티클래스 모델의 레코드 2개(클래스 3개)  |  '0.1,0.6,0.3\$1n0.2,0.5,0.3'  | 

------
#### [ Predicted label and probabilities ]

모델 컨테이너는 확률에 따른 예측 레이블을 **CSV** 형식으로 출력합니다. 인덱스 `1`을 사용하여 확률을 추출할 수 있습니다.


| 모델 컨테이너 입력 | 모델 컨테이너 출력 | 
| --- | --- | 
|  단일 레코드  |  '1,0.6'  | 
|  레코드 2개  |  '1,0.6\$1n0,0.3'  | 

------
#### [ Predicted labels header and probabilities ]

Autopilot으로 훈련된 멀티클래스 모델 컨테이너는 예측된 레이블 및 확률 목록의 **문자열 표현**을 **CSV** 형식으로 출력하도록 구성할 수 있습니다. 다음 예제에서는 인덱스 `1`로 확률을 추출할 수 있습니다. 인덱스 `1` 기준으로 레이블 헤더를 추출하고 인덱스 `0`을 사용하여 레이블 헤더를 추출할 수 있습니다.


| 모델 컨테이너 입력 | 모델 컨테이너 출력 | 
| --- | --- | 
|  단일 레코드  |  '"[\$1'고양이\$1',\$1'개\$1',\$1'물고기\$1']","[0.1,0.6,0.3]"'  | 
|  레코드 2개.  |  '"[\$1'고양이\$1',\$1'개\$1',\$1'물고기\$1']","[0.1,0.6,0.3]"\$1n"[\$1'고양이\$1',\$1'개\$1',\$1'물고기\$1']","[0.2,0.5,0.3]"'  | 

------

다음 데이터 예제는 **JSON 행** 형식의 모델 컨테이너 출력에 대한 것입니다.

------
#### [ Probability only ]

이 예제에서 모델 컨테이너는 [https://jmespath.org/](https://jmespath.org/) 표현식 `score`로 추출할 수 있는 확률을 **JSON 행** 형식으로 출력합니다.


| 모델 컨테이너 입력 | 모델 컨테이너 출력 | 
| --- | --- | 
|  단일 레코드  |  '\$1"score":0.6\$1'  | 
|  레코드 2개  |  '\$1"score":0.6\$1\$1n\$1"score":0.3\$1'  | 

------
#### [ Predicted label and probabilities ]

이 예제에서 멀티클래스 모델 컨테이너는 확률 목록과 함께 레이블 헤더 목록을 **JSON 행** 형식으로 출력합니다. 확률은 `JMESPath` 표현식 `probability`로 추출할 수 있고, 레이블 헤더는 `JMESPath` 표현식 `predicted labels`로 추출할 수 있습니다.


| 모델 컨테이너 입력 | 모델 컨테이너 출력 | 
| --- | --- | 
|  단일 레코드  |  '\$1"predicted\$1labels":["고양이","개","물고기"],"probabilities":[0.1,0.6,0.3]\$1'  | 
|  레코드 2개.  |  '\$1"predicted\$1labels":["고양이","개","물고기"],"probabilities":[0.1,0.6,0.3]\$1\$1n\$1"predicted\$1labels":["고양이","개","물고기"],"probabilities":[0.2,0.5,0.3]\$1'  | 

------
#### [ Predicted labels header and probabilities ]

이 예제에서 멀티클래스 모델 컨테이너는 레이블 헤더 목록과 확률을 **JSON 행** 형식으로 출력합니다. 확률은 `JMESPath` 표현식 `probability`로 추출할 수 있고, 레이블 헤더는 `JMESPath` 표현식 `predicted labels`로 추출할 수 있습니다.


| 모델 컨테이너 입력 | 모델 컨테이너 출력 | 
| --- | --- | 
|  단일 레코드  |  '\$1"predicted\$1labels":["고양이","개","물고기"],"probabilities":[0.1,0.6,0.3]\$1'  | 
|  레코드 2개.  |  '\$1"predicted\$1labels":["고양이","개","물고기"],"probabilities":[0.1,0.6,0.3]\$1\$1n\$1"predicted\$1labels":["고양이","개","물고기"],"probabilities":[0.2,0.5,0.3]\$1'  | 

------

## 모델 컨테이너 검증
<a name="clarify-online-explainability-container-validation"></a>

먼저 SageMaker AI 실시간 추론 엔드포인트에 모델을 배포한 다음 해당 엔드포인트에 요청을 보내는 것을 권장합니다. 요청(모델 컨테이너 입력)과 응답(모델 컨테이너 출력)을 수동으로 검사하여 둘 다 **모델 컨테이너 입력** 섹션 및 **모델 컨테이너 출력** 섹션의 요구 사항을 준수하는지 확인합니다. 모델 컨테이너가 배치 요청을 지원하는 경우, 먼저 단일 레코드 요청으로 시작했다가 이후 2개 이상의 레코드로 시도해볼 수 있습니다.

다음 명령은 AWS CLI를 사용하여 응답을 요청하는 방법을 보여줍니다. AWS CLI 는 SageMaker Studio Classic 및 SageMaker Notebook 인스턴스에 사전 설치되어 있습니다. 를 설치해야 하는 경우이 [설치 가이드를](https://aws.amazon.com/cli/) AWS CLI따르세요.

```
aws sagemaker-runtime invoke-endpoint \
  --endpoint-name $ENDPOINT_NAME \
  --content-type $CONTENT_TYPE \
  --accept $ACCEPT_TYPE \
  --body $REQUEST_DATA \
  $CLI_BINARY_FORMAT \
  /dev/stderr 1>/dev/null
```

파라미터는 다음과 같이 정의됩니다.
+ `$ENDPOINT NAME`: 엔드포인트의 이름.
+ `$CONTENT_TYPE`: 요청의 MIME 유형(모델 컨테이너 입력).
+ `$ACCEPT_TYPE`: 응답의 MIME 유형(모델 컨테이너 출력).
+ `$REQUEST_DATA`: 요청된 페이로드 문자열.
+ `$CLI_BINARY_FORMAT`: 명령줄 인터페이스(CLI) 파라미터 형식. AWS CLI v1의 경우이 파라미터는 비워 두어야 합니다. v2의 경우 이 파라미터를 `--cli-binary-format raw-in-base64-out`으로 설정해야 합니다.

**참고**  
AWS CLI v2는 이진 파라미터를 base64로 인코딩된 문자열 [기본](https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html#cliv2-migration-binaryparam)값으로 전달합니다.

다음 예제에서는 AWS CLI v1을 사용합니다.

------
#### [ Request and response in CSV format ]
+ 요청은 단일 레코드로 구성되며, 응답은 레코드의 확률 값에 해당합니다.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-sagemaker-xgboost-model \
    --content-type text/csv \
    --accept text/csv \
    --body '1,2,3,4' \
    /dev/stderr 1>/dev/null
  ```

  출력:

  `0.6`
+ 요청은 두 개의 레코드로 구성되며, 응답에는 레코드의 확률이 포함되고, 모델은 확률을 쉼표로 구분합니다. `--body`에 포함된 `$'content'` 표현식은 명령이 콘텐츠의 `\n`을 줄 바꿈으로 해석하도록 지시합니다.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-sagemaker-xgboost-model \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  출력:

  `0.6,0.3`
+ 요청은 두 개의 레코드로 구성되며, 응답에는 레코드의 확률이 포함되고, 모델은 확률을 줄 바꿈으로 구분합니다.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-1 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  출력:

  `0.6`

  `0.3`
+ 요청은 단일 레코드로 구성되며 응답은 확률 값(다중 클래스 모델, 세 가지 클래스)입니다.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-1 \
    --content-type text/csv \
    --accept text/csv \
    --body '1,2,3,4' \
    /dev/stderr 1>/dev/null
  ```

  출력:

  `0.1,0.6,0.3`
+ 요청은 레코드 2개로 구성되며, 응답에는 해당 레코드의 확률 값(다중 클래스 모델, 세 가지 클래스)이 포함됩니다.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-1 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  출력:

  `0.1,0.6,0.3`

  `0.2,0.5,0.3`
+ 요청은 레코드 2개로 구성되며, 응답에는 예측 레이블과 확률이 포함됩니다.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-2 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  출력:

  `1,0.6`

  `0,0.3`
+ 요청은 레코드 2개로 구성되며, 응답에는 레이블 헤더와 확률이 포함됩니다.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-3 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  출력:

  `"['cat','dog','fish']","[0.1,0.6,0.3]"`

  `"['cat','dog','fish']","[0.2,0.5,0.3]"`

------
#### [ Request and response in JSON Lines format ]
+ 요청은 단일 레코드로 구성되며, 응답은 레코드의 확률 값에 해당합니다.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines \
    --content-type application/jsonlines \
    --accept application/jsonlines \
    --body '{"features":["This is a good product",5]}' \
    /dev/stderr 1>/dev/null
  ```

  출력:

  `{"score":0.6}`
+ 요청에는 레코드 2개가 포함되며, 응답에는 예측 레이블과 확률이 포함됩니다.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines-2 \
    --content-type application/jsonlines \
    --accept application/jsonlines \
    --body $'{"features":[1,2,3,4]}\n{"features":[5,6,7,8]}' \
    /dev/stderr 1>/dev/null
  ```

  출력:

  `{"predicted_label":1,"probability":0.6}`

  `{"predicted_label":0,"probability":0.3}`
+ 요청에는 레코드 2개가 포함되며 응답에는 레이블 헤더와 확률이 포함됩니다.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines-3 \
    --content-type application/jsonlines \
    --accept application/jsonlines \
    --body $'{"data":{"features":[1,2,3,4]}}\n{"data":{"features":[5,6,7,8]}}' \
    /dev/stderr 1>/dev/null
  ```

  출력:

  `{"predicted_labels":["cat","dog","fish"],"probabilities":[0.1,0.6,0.3]}`

  `{"predicted_labels":["cat","dog","fish"],"probabilities":[0.2,0.5,0.3]}`

------
#### [ Request and response in different formats ]
+ 요청은 CSV 형식이고 응답은 JSON 행 형식입니다.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-in-jsonlines-out \
    --content-type text/csv \
    --accept application/jsonlines \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  출력:

  `{"probability":0.6}`

  `{"probability":0.3}`
+ 요청은 JSON 행 형식이고 응답은 CSV 형식입니다.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines-in-csv-out \
    --content-type application/jsonlines \
    --accept text/csv \
    --body $'{"features":[1,2,3,4]}\n{"features":[5,6,7,8]}' \
    /dev/stderr 1>/dev/null
  ```

  출력:

  `0.6`

  `0.3`

------

검증이 완료된 후 테스트 엔드포인트를 [삭제](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-delete-resources.html)하세요.