

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

# 다중 모델 엔드포인트를 위한 사용자 지정 컨테이너 계약
<a name="mms-container-apis"></a>

여러 모델을 처리하려면 필요에 따라 모델을 로드, 나열, 가져오기 및 로드 해제하기 위해 Amazon SageMaker AI가 컨테이너와 통신할 수 있도록 컨테이너에서 일련의 API를 지원해야 합니다. `model_name`는 새 API 세트에서 키 입력 파라미터로 사용됩니다. 고객 컨테이너는 매핑 키로 `model_name`을 사용하여 로드된 모델을 추적해야 합니다. 또한 `model_name`는 불투명 식별자로, `InvokeEndpoint` API에 전달된 `TargetModel` 파라미터의 값이 아닐 수도 있습니다. `InvokeEndpoint` 요청의 원래 `TargetModel` 값은 `X-Amzn-SageMaker-Target-Model` 헤더로서 API의 컨테이너에 전달되어 로깅 목적으로 사용할 수 있습니다.

**참고**  
GPU 지원 인스턴스용 다중 모델 엔드포인트는 현재 SageMaker AI의 [NVIDIA Triton 추론 서버 컨테이너](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html)에서만 지원됩니다. 이 컨테이너는 아래에 정의된 계약을 이미 구현하고 있습니다. 고객은 추가 작업 없이 다중 모델 GPU 엔드포인트와 함께 이 컨테이너를 직접 사용할 수 있습니다.

CPU 지원 다중 모델 엔드포인트를 위해 컨테이너에서 다음 API를 구성할 수 있습니다.

**Topics**
+ [모델 API 로드](#multi-model-api-load-model)
+ [모델 API 나열](#multi-model-api-list-model)
+ [모델 API 가져오기](#multi-model-api-get-model)
+ [모델 API 언로드](#multi-model-api-unload-model)
+ [모델 API 간접 호출](#multi-model-api-invoke-model)

## 모델 API 로드
<a name="multi-model-api-load-model"></a>

고객 컨테이너의 메모리에 본문의 `url` 필드에 존재하는 특정 모델을 로드하고 할당된 `model_name`으로 이를 추적하도록 컨테이너에게 지시합니다. 모델이 로드된 후에는 컨테이너가 이 `model_name`을 사용하여 추론 요청을 처리 할 준비가 되어 있어야 합니다.

```
POST /models HTTP/1.1
Content-Type: application/json
Accept: application/json

{
     "model_name" : "{model_name}",
     "url" : "/opt/ml/models/{model_name}/model",
}
```

**참고**  
`model_name`이 이미 로드된 경우 이 API는 409를 반환해야 합니다. 메모리 부족이나 다른 리소스로 인해 모델을 로드할 수 없을 때마다 이 API는 507 HTTP 상태 코드를 SageMaker AI로 반환해야 합니다. 그런 다음 사용되지 않은 모델을 로드 해제하여 회수합니다.

## 모델 API 나열
<a name="multi-model-api-list-model"></a>

고객 컨테이너의 메모리에 로드된 모델의 목록을 반환합니다.

```
GET /models HTTP/1.1
Accept: application/json

Response = 
{
    "models": [
        {
             "modelName" : "{model_name}",
             "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        {
            "modelName" : "{model_name}",
            "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        ....
    ]
}
```

이 API는 페이지 매김도 지원합니다.

```
GET /models HTTP/1.1
Accept: application/json

Response = 
{
    "models": [
        {
             "modelName" : "{model_name}",
             "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        {
            "modelName" : "{model_name}",
            "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        ....
    ]
}
```

SageMaker AI는 처음에 `next_page_token`에 대한 값을 제공하지 않고 모델 API 나열을 직접적으로 호출할 수 있습니다. 응답의 일부로 반환된 `nextPageToken` 필드는 후속 모델 나열 호출에서 `next_page_token`의 값으로 제공됩니다. `nextPageToken`가 반환되지 않으면 반환할 모델이 더 이상 없다는 의미입니다.

## 모델 API 가져오기
<a name="multi-model-api-get-model"></a>

이것은 `model_name` 엔터티에 대한 간단한 읽기 API입니다.

```
GET /models/{model_name} HTTP/1.1
Accept: application/json

{
     "modelName" : "{model_name}",
     "modelUrl" : "/opt/ml/models/{model_name}/model",
}
```

**참고**  
`model_name`이 로드되지 않은 경우 이 API는 404를 반환해야 합니다.

## 모델 API 언로드
<a name="multi-model-api-unload-model"></a>

고객 컨테이너에 명령하여 메모리에서 모델을 로드 해제하도록 SageMaker AI 플랫폼에 지시합니다. 이렇게 하면 새 모델을 로드하는 프로세스를 시작할 때 플랫폼에 의해 결정된대로 후보 모델의 퇴거가 개시됩니다. `model_name`에 프로비저닝된 리소스는 이 API가 응답을 반환할 때 컨테이너에서 회수되어야 합니다.

```
DELETE /models/{model_name}
```

**참고**  
`model_name`이 로드되지 않은 경우 이 API는 404를 반환해야 합니다.

## 모델 API 간접 호출
<a name="multi-model-api-invoke-model"></a>

제공된 특정 `model_name`에서 예측 요청을 만듭니다. SageMaker AI Runtime `InvokeEndpoint` 요청은 간접 호출에 대해 지정된 모델의 상대 경로를 가져오는 새 헤더로 `X-Amzn-SageMaker-Target-Model`을 지원합니다. SageMaker AI 시스템은 `CreateModel` API 직접 호출의 일부로 제공되는 접두사를 모델의 상대 경로와 결합하여 모델의 절대 경로를 구성합니다.

```
POST /models/{model_name}/invoke HTTP/1.1
Content-Type: ContentType
Accept: Accept
X-Amzn-SageMaker-Custom-Attributes: CustomAttributes
X-Amzn-SageMaker-Target-Model: [relativePath]/{artifactName}.tar.gz
```

**참고**  
`model_name`이 로드되지 않은 경우 이 API는 404를 반환해야 합니다.

또한 GPU 인스턴스에서 메모리 또는 기타 리소스 부족으로 `InvokeEndpoint`에 오류가 발생하는 경우 이 API는 507 HTTP 상태 코드를 SageMaker AI에 반환해야 하며, 그러면 사용하지 않는 모델 로드 해제를 시작하여 리클레임합니다.