

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

# 다중 모델 엔드포인트 호출
<a name="invoke-multi-model-endpoint"></a>

다중 모델 엔드포인트를 간접 호출하려면 단일 모델 엔드포인트를 간접 호출하는 것처럼 SageMaker AI Runtime에서 [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint)를 사용하고 한 가지만 변경하면 됩니다. 대상으로 지정할 엔드포인트의 모델을 지정하는 `TargetModel` 파라미터를 전달합니다. SageMaker AI Runtime `InvokeEndpoint` 요청은 간접 호출에 대해 지정된 모델의 상대 경로를 가져오는 새 헤더로 `X-Amzn-SageMaker-Target-Model`을 지원합니다. SageMaker AI 시스템은 `CreateModel` API 직접 호출의 일부로 제공되는 접두사를 모델의 상대 경로와 결합하여 모델의 절대 경로를 구성합니다.

다음 절차는 CPU 및 GPU 지원 다중 모델 엔드포인트 모두에 동일합니다.

------
#### [ AWS SDK for Python (Boto 3) ]

다음 예제 예측 요청에서는 샘플 노트북에서 [Python용AWS SDK(Boto 3)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html)를 사용합니다.

```
response = runtime_sagemaker_client.invoke_endpoint(
                        EndpointName = {{"<ENDPOINT_NAME>"}},
                        ContentType  = "text/csv",
                        TargetModel  = {{"<MODEL_FILENAME>.tar.gz"}},
                        Body         = body)
```

------
#### [ AWS CLI ]

 다음 예제에서는 AWS Command Line Interface (AWS CLI)를 사용하여 행이 두 개인 CSV 요청을 생성하는 방법을 보여줍니다.

```
aws sagemaker-runtime invoke-endpoint \
  --endpoint-name {{"<ENDPOINT_NAME>"}} \
  --body {{"1.0,2.0,5.0"$'\n'"2.0,3.0,4.0"}} \
  --content-type "text/csv" \
  --target-model {{"<MODEL_NAME>.tar.gz"}}
  output_file.txt
```

추론이 성공하면 추론 요청에 대한 정보를 포함한 `output_file.txt`가 생성됩니다. 를 사용하여 예측하는 방법에 대한 자세한 예는 SageMaker Python SDK 설명서[의를 사용하여 예측하기 AWS CLI](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#making-predictions-with-the-aws-cli) 섹션을 AWS CLI참조하세요.

------

다중 모델 엔드포인트는 필요에 따라 대상 모델을 동적으로 로드합니다. [MME 샘플 노트북](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_xgboost_home_value/xgboost_multi_model_endpoint_home_value.html)을 실행할 때 이를 관찰할 수 있는데, 단일 엔드포인트 뒤에 호스팅되는 여러 대상 모델에 대해 임의의 호출을 반복하기 때문입니다. 모델은 Amazon Simple Storage Service(S3)에서 다운로드되어 메모리에 로드되므로 주어진 모델에 대한 첫 번째 요청에는 시간이 더 오래 걸립니다 이를 *콜드 스타트*라고 하며, 다중 모델 엔드포인트에서 최적화되어 고객을 위한 가격 대비 성능이 향상될 것으로 예상됩니다. 모델이 로드된 후 추가 오버헤드가 없으므로 후속 호출이 더 빨리 완료됩니다.

**참고**  
GPU 지원 인스턴스의 경우 GPU 컨테이너의 HTTP 응답 코드(507 포함)는 메모리 또는 기타 리소스가 부족함을 나타냅니다. 이로 인해 더 자주 사용되는 모델을 로드하기 위해 사용되지 않는 모델이 컨테이너에서 언로드됩니다.

## ModelNotereadyException 오류에 대한 재시도 요청
<a name="invoke-multi-model-config-retry"></a>

모델에 대해 `invoke_endpoint`를 처음 호출하면 모델이 Amazon Simple Storage Service에서 다운로드되어 추론 컨테이너로 로드됩니다. 따라서 첫 번째 호출이 반환하는 데 시간이 더 오래 걸립니다. 모델이 이미 로드되었으므로 동일한 모델에 대한 후속 호출은 더 빨리 완료됩니다.

SageMaker AI는 60초 이내에 직접 호출에 대한 응답을 `invoke_endpoint`로 반환합니다. 일부 모델은 너무 커서 60초 이내에 다운로드할 수 없습니다. 제한 시간 60초 이전에 모델 로드가 완료되지 않으면 오류 코드 `ModelNotReadyException`과 함께 `invoke_endpoint`에 대한 요청이 반환되고 모델은 최대 360초 동안 계속 다운로드되어 추론 컨테이너에 로드됩니다. `invoke_endpoint` 요청에 대한 `ModelNotReadyException` 오류 코드가 표시되면 요청을 다시 시도하세요. 기본적으로 Python용 AWS SDKs(Boto 3)([레거시 재시도 모드](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html#legacy-retry-mode) 사용) 및 Java 재시도 `invoke_endpoint` 요청으로 인해 `ModelNotReadyException` 오류가 발생합니다. 요청을 최대 360초 동안 계속 재시도하도록 재시도 전략을 구성할 수 있습니다. 모델을 다운로드하여 컨테이너로 로드하는 데 60초 이상 걸릴 것으로 예상되는 경우 SDK 소켓 제한 시간을 70초로 설정하세요. AWS SDK for Python (Boto3)의 재시도 전략을 구성하는 방법에 대한 자세한 내용은 [재시도 모드 구성](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html#configuring-a-retry-mode)을 참조하세요. 다음 코드는 최대 180초 동안 호출을 재시도하도록 재시도 전략을 `invoke_endpoint`로 구성하는 예를 보여줍니다.

```
import boto3
from botocore.config import Config

# This example retry strategy sets the retry attempts to 2. 
# With this setting, the request can attempt to download and/or load the model 
# for upto 180 seconds: 1 orginal request (60 seconds) + 2 retries (120 seconds)
config = Config(
    read_timeout=70,
    retries={
        'max_attempts': 2  # This value can be adjusted to 5 to go up to the 360s max timeout
    }
)
runtime_sagemaker_client = boto3.client('sagemaker-runtime', config=config)
```