비동기 추론 엔드포인트 생성 - 아마존 SageMaker

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

비동기 추론 엔드포인트 생성

호스팅 서비스를 사용하여 엔드포인트를 생성하는 것과 동일한 방식으로 비동기 엔드포인트를 생성합니다. SageMaker

  • 에서 모델을 생성합니다. SageMaker CreateModel

  • CreateEndpointConfig로 엔드포인트 구성을 생성합니다.

  • CreateEndpoint로 사용하여 HTTPS 엔드포인트를 생성합니다.

엔드포인트를 생성하려면 먼저 CreateModel를 이용해 모델 아티팩트와 도커 레지스트리 경로(이미지)를 가리키는 모델을 생성합니다. 그런 다음 CreateEndpointConfig배포할 CreateModel API를 사용하여 만든 하나 이상의 모델과 SageMaker 프로비저닝할 리소스를 지정하는 구성을 생성합니다. 요청에 지정된 엔드포인트 구성을 사용하여 CreateEndpoint로 엔드포인트를 생성합니다. UpdateEndpoint API를 사용하여 비동기 엔드포인트를 업데이트할 수 있습니다. InvokeEndpointAsync를 사용하여 엔드포인트에서 호스팅되는 모델에서 추론 요청을 보내고 받습니다. DeleteEndpoint API를 사용하여 엔드포인트를 삭제할 수 있습니다.

사용 가능한 SageMaker 이미지의 전체 목록은 사용 가능한 Deep Learning Containers 이미지를 참조하십시오. 도커 이미지 생성 방법에 대한 정보는 자체 추론 코드 사용에서 확인하세요.

모델 생성

다음 예에서는 AWS SDK for Python (Boto3)을 사용하여 모델을 생성하는 방법을 보여 줍니다. 처음 몇 줄은 다음을 정의합니다.

  • sagemaker_client: AWS 서비스에 요청을 쉽게 보내고 받을 수 있게 해주는 저수준 SageMaker 클라이언트 객체입니다.

  • sagemaker_role: SageMaker IAM 역할 Amazon 리소스 이름 (ARN) 이 있는 문자열 변수입니다.

  • aws_region: 지역 이름이 포함된 문자열 변수. AWS

import boto3 # Specify your AWS Region aws_region='<aws_region>' # Create a low-level SageMaker service client. sagemaker_client = boto3.client('sagemaker', region_name=aws_region) # Role to give SageMaker permission to access AWS services. sagemaker_role= "arn:aws:iam::<account>:role/*"

다음으로 Amazon S3에 저장된 사전 훈련된 모델의 위치를 지정합니다. 이 예에서는 demo-xgboost-model.tar.gz라는 사전 학습된 XGBoost 모델을 사용합니다. 전체 Amazon S3 URI는 문자열 변수 model_url에 저장됩니다.

#Create a variable w/ the model S3 URI s3_bucket = '<your-bucket-name>' # Provide the name of your S3 bucket bucket_prefix='saved_models' model_s3_key = f"{bucket_prefix}/demo-xgboost-model.tar.gz" #Specify S3 bucket w/ model model_url = f"s3://{s3_bucket}/{model_s3_key}"

기본 컨테이너를 지정합니다. 기본 컨테이너의 경우 추론 코드, 아티팩트(이전 훈련에서 얻은), 예측을 위해 모델을 배포할 때 추론 코드가 사용하는 사용자 지정 환경 맵을 포함하는 도커 이미지를 지정합니다.

이 예에서는 XGBoost 내장 알고리즘 컨테이너 이미지를 지정합니다.

from sagemaker import image_uris # Specify an AWS container image. container = image_uris.retrieve(region=aws_region, framework='xgboost', version='0.90-1')

Amazon에서 모델을 SageMaker 생성하십시오CreateModel. 다음을 지정합니다.

  • ModelName: 모델 이름(이 예제에서는 model_name이라는 문자열 변수로 저장됨).

  • ExecutionRoleArn: Amazon이 ML 컴퓨팅 인스턴스에 배포하거나 일괄 변환 작업을 위해 모델 아티팩트와 Docker 이미지에 액세스하는 데 SageMaker 사용할 수 있는 IAM 역할의 Amazon 리소스 이름 (ARN) 입니다.

  • PrimaryContainer: 모델이 예측을 위해 배포될 때 추론 코드에서 사용하는 추론 코드, 연결된 아티팩트 및 사용자 지정 환경 맵을 포함하는 기본 도커 이미지의 위치입니다.

model_name = '<The_name_of_the_model>' #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': container, 'ModelDataUrl': model_url, })

API 파라미터의 전체 목록은 SageMaker API 참조 안내서의 CreateModel설명을 참조하십시오.

SageMaker 제공된 컨테이너를 사용하는 경우 이 단계에서 환경 변수를 설정하여 모델 서버 제한 시간 및 페이로드 크기를 기본값에서 프레임워크 지원 최대값으로 늘릴 수 있습니다. 이러한 변수를 명시적으로 설정하지 않으면 비동기 추론이 지원하는 최대 제한 시간 및 페이로드 크기를 활용하지 못할 수 있습니다. 다음 예제는 를 기반으로 추론 컨테이너의 환경 변수를 설정하는 방법을 보여줍니다. PyTorch TorchServe

model_name = '<The_name_of_the_model>' #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': container, 'ModelDataUrl': model_url, 'Environment': { 'TS_MAX_REQUEST_SIZE': '100000000', 'TS_MAX_RESPONSE_SIZE': '100000000', 'TS_DEFAULT_RESPONSE_TIMEOUT': '1000' }, })

엔드포인트 생성을 완료한 후에는 inference.py 스크립트에서 환경 변수를 출력하여 환경 변수를 올바르게 설정했는지 테스트해야 합니다. 다음 표에는 기본값을 변경하도록 설정할 수 있는 여러 프레임워크의 환경 변수가 나열되어 있습니다.

프레임워크 환경 변수

PyTorch 1.8 (기준 TorchServe)

'TS_MAX_REQUEST_SIZE': '100000000'

'TS_MAX_RESPONSE_SIZE': '100000000'

'TS_DEFAULT_RESPONSE_TIMEOUT': '1000'

PyTorch 1.4 (MMS 기준)

'MMS_MAX_REQUEST_SIZE': '1000000000'

'MMS_MAX_RESPONSE_SIZE': '1000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

HuggingFace 추론 컨테이너 (MMS 기반)

'MMS_MAX_REQUEST_SIZE': '2000000000'

'MMS_MAX_RESPONSE_SIZE': '2000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

엔드포인트 구성 생성

모델을 만들었으면 CreateEndpointConfig를 사용하여 엔드포인트 구성을 생성하세요. Amazon SageMaker 호스팅 서비스는 이 구성을 사용하여 모델을 배포합니다. 구성에서 with를 사용하여 생성한 하나 이상의 모델을 식별하여 Amazon에서 SageMaker 프로비저닝할 리소스를 배포합니다. CreateModel AsyncInferenceConfig 객체를 지정하고 OutputConfig에 대한 출력 Amazon S3 위치를 제공합니다. 예측 결과에 대한 알림을 전송할 Amazon SNS 주제를 선택적으로 지정할 수 있습니다. Amazon SNS 주제에 대한 자세한 내용은 Amazon SNS 구성을 참조하세요.

다음 예제는 AWS SDK for Python (Boto3)을 사용하여 엔드포인트 구성을 생성하는 방법을 보여줍니다.

import datetime from time import gmtime, strftime # Create an endpoint config name. Here we create one based on the date # so it we can search endpoints based on creation time. endpoint_config_name = f"XGBoostEndpointConfig-{strftime('%Y-%m-%d-%H-%M-%S', gmtime())}" # The name of the model that you want to host. This is the name that you specified when creating the model. model_name='<The_name_of_your_model>' create_endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, # You will specify this name in a CreateEndpoint request. # List of ProductionVariant objects, one for each model that you want to host at this endpoint. ProductionVariants=[ { "VariantName": "variant1", # The name of the production variant. "ModelName": model_name, "InstanceType": "ml.m5.xlarge", # Specify the compute instance type. "InitialInstanceCount": 1 # Number of instances to launch initially. } ], AsyncInferenceConfig={ "OutputConfig": { # Location to upload response outputs when no location is provided in the request. "S3OutputPath": f"s3://{s3_bucket}/{bucket_prefix}/output" # (Optional) specify Amazon SNS topics "NotificationConfig": { "SuccessTopic": "arn:aws:sns:aws-region:account-id:topic-name", "ErrorTopic": "arn:aws:sns:aws-region:account-id:topic-name", } }, "ClientConfig": { # (Optional) Specify the max number of inflight invocations per instance # If no value is provided, Amazon SageMaker will choose an optimal value for you "MaxConcurrentInvocationsPerInstance": 4 } } ) print(f"Created EndpointConfig: {create_endpoint_config_response['EndpointConfigArn']}")

앞서 언급한 예시에서는 AsyncInferenceConfig 필드에 OutputConfig에 대해 다음 키를 지정합니다.

  • S3OutputPath: 요청에 위치가 제공되지 않은 경우 응답 출력을 업로드할 위치입니다.

  • NotificationConfig: (선택 사항) 추론 요청이 성공했을 경우(SuccessTopic) 또는 실패할 경우(ErrorTopic) 알림을 게시하는 SNS 주제.

AsyncInferenceConfig 필드에서 ClientConfig에 대한 다음과 같은 선택적 인수를 지정할 수도 있습니다.

  • MaxConcurrentInvocationsPerInstance: (선택 사항) SageMaker 클라이언트가 모델 컨테이너로 보내는 최대 동시 요청 수입니다.

엔드포인트 생성

모델 및 엔드포인트 구성이 완료되면 CreateEndpointAPI를 사용하여 엔드포인트를 생성합니다. 엔드포인트 이름은 AWS 계정의 특정 AWS 지역 내에서 고유해야 합니다.

다음은 요청에 지정된 엔드포인트 구성을 사용하여 엔드포인트를 생성합니다. SageMaker Amazon은 엔드포인트를 사용하여 리소스를 프로비저닝하고 모델을 배포합니다.

# The name of the endpoint.The name must be unique within an AWS Region in your AWS account. endpoint_name = '<endpoint-name>' # The name of the endpoint configuration associated with this endpoint. endpoint_config_name='<endpoint-config-name>' create_endpoint_response = sagemaker_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name)

CreateEndpointAPI를 호출하면 Amazon SageMaker 비동기 추론이 테스트 알림을 보내 Amazon SNS 주제를 구성했는지 확인합니다. Amazon SageMaker 비동기 추론은 및 를 호출한 후에도 테스트 알림을 보냅니다. UpdateEndpoint UpdateEndpointWeightsAndCapacities 이를 통해 필요한 SageMaker 권한이 있는지 확인할 수 있습니다. 알림은 그냥 무시해도 됩니다. 테스트 알림의 형식은 다음과 같습니다.

{ "eventVersion":"1.0", "eventSource":"aws:sagemaker", "eventName":"TestNotification" }