다중 모델 엔드포인트 호출 - Amazon SageMaker

다중 모델 엔드포인트 호출

다중 모델 엔드포인트를 간접 호출하려면 단일 모델 엔드포인트를 간접 호출하는 것처럼 SageMaker Runtime에서 invoke_endpoint를 사용하고 한 가지만 변경하면 됩니다. 대상으로 지정할 엔드포인트의 모델을 지정하는 TargetModel 파라미터를 전달합니다. SageMaker Runtime InvokeEndpoint 요청은 호출에 대해 지정된 모델의 상대 경로를 가져오는 새 헤더로서 X-Amzn-SageMaker-Target-Model을 지원합니다. SageMaker 시스템은 CreateModel API 직접 호출의 일부로 제공되는 접두사를 모델의 상대 경로와 결합하여 모델의 절대 경로를 구성합니다.

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

AWS SDK for Python (Boto 3)

다음 예제 예측 요청에서는 샘플 노트북에서 Python용 AWS SDK(Boto 3)를 사용합니다.

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가 생성됩니다. AWS CLI를 사용하여 예측하는 방법에 대한 추가 예제를 보려면 SageMaker Python SDK 설명서에서 AWS CLI를 사용하여 예측하기를 참조하세요.

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

참고

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

ModelNotereadyException 오류에 대한 재시도 요청

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

SageMaker는 60초 이내에 호출에 대한 응답을 invoke_endpoint로 반환합니다. 일부 모델은 너무 커서 60초 이내에 다운로드할 수 없습니다. 제한 시간 60초 이전에 모델 로드가 완료되지 않으면 오류 코드 ModelNotReadyException과 함께 invoke_endpoint에 대한 요청이 반환되고 모델은 최대 360초 동안 계속 다운로드되어 추론 컨테이너에 로드됩니다. invoke_endpoint 요청에 대한 ModelNotReadyException 오류 코드가 표시되면 요청을 다시 시도하세요. 기본적으로, Python용 AWS SDK(Boto 3)(레거시 재시도 모드 사용) 및 Java 재시도 invoke_endpoint 요청에서 ModelNotReadyException 오류가 발생합니다. 요청을 최대 360초 동안 계속 재시도하도록 재시도 전략을 구성할 수 있습니다. 모델을 다운로드하여 컨테이너로 로드하는 데 60초 이상 걸릴 것으로 예상되는 경우 SDK 소켓 제한 시간을 70초로 설정하세요. AWS SDK for Python (Boto3)의 재시도 전략을 구성하는 방법에 대한 자세한 내용은 재시도 모드 구성을 참조하세요. 다음 코드는 최대 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)