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

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

다중 모델 엔드포인트 호출

다중 모델 엔드포인트를 호출하려면 단일 모델 엔드포인트를 호출할 때와 마찬가지로 SageMaker 런타임invoke_endpoint에서 를 사용합니다. 대상으로 지정할 엔드포인트의 모델을 지정하는 TargetModel 파라미터를 전달합니다. SageMaker 런타임 InvokeEndpoint 요청은 호출에 지정된 모델의 상대 경로를 취하는 새 헤더X-Amzn-SageMaker-Target-Model로 를 지원합니다. SageMaker 시스템은 CreateModel API 호출의 일부로 제공되는 접두사를 모델의 상대 경로와 결합하여 모델의 절대 경로를 구성합니다.

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

AWS SDK for Python (Boto 3)

다음 예제 예측 요청은 샘플 노트북에서 AWS SDK Python(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 ()를 사용하여 두 행으로 CSV 요청하는 방법을 보여줍니다AWS CLI.

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 섹션을 AWS CLI참조하세요.

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

참고

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

오류에 대한 ModelNotReadyException 요청 재시도

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

SageMaker 는 60초 invoke_endpoint 이내에 호출에 대한 응답을 에 반환합니다. 일부 모델은 너무 커서 60초 이내에 다운로드할 수 없습니다. 제한 시간 60초 이전에 모델 로드가 완료되지 않으면 오류 코드 ModelNotReadyException과 함께 invoke_endpoint에 대한 요청이 반환되고 모델은 최대 360초 동안 계속 다운로드되어 추론 컨테이너에 로드됩니다. invoke_endpoint 요청에 대한 ModelNotReadyException 오류 코드가 표시되면 요청을 다시 시도하세요. 기본적으로 AWS SDKs for Python(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)