실시간 추론을 위한 모델 배포 - Amazon SageMaker

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

실시간 추론을 위한 모델 배포

실시간 추론은 실시간, 대화형, 짧은 지연 시간이 요구되는 추론 워크로드에 적합합니다. 이 섹션에서는 실시간 추론을 사용하여 모델에서 대화형 방식으로 예측을 얻는 방법을 보여줍니다.

Autopilot 실험에서 최상의 검증 지표를 생성한 모델을 배포하기 위한 몇 가지 옵션이 있습니다. 예를 들어 SageMaker Studio Classic에서 Autopilot을 사용하는 경우 모델을 자동으로 또는 수동으로 배포할 수 있습니다. 를 사용하여 SageMaker APIs Autopilot 모델을 수동으로 배포할 수도 있습니다.

다음 탭은 모델 배포를 위한 세 가지 옵션을 보여줍니다. 이 지침에서는 Autopilot으로 모델을 이미 생성했다고 가정합니다. 모델이 없는 경우 AutoML을 사용하여 테이블 형식 데이터에 대한 회귀 또는 분류 작업 생성 API 섹션을 참조하세요. 각 옵션의 예를 보려면 각 탭을 여세요.

Autopilot UI에는 모델 배포를 탐색하는 데 도움이 되는 유용한 드롭다운 메뉴, 토글, 툴팁 등이 포함되어 있습니다. 자동 또는 수동 절차 중 하나를 이용하여 배포할 수 있습니다.

  • 자동 배포: Autopilot 실험에서 나온 최적의 모델을 엔드포인트에 자동으로 배포

    1. SageMaker Studio Classic에서 실험을 생성합니다.

    2. 자동 배포 값을 로 전환합니다.

      참고

      리전 내 엔드포인트 인스턴스에 대한 기본 리소스 할당량이나 고객 할당량이 너무 제한적일 경우 자동 배포가 실패합니다. 하이퍼파라미터 최적화(HPO) 모드에서는 최소 2개의 ml.m5.2xlarge 인스턴스가 있어야 합니다. 앙상블링 모드에서는 ml.m5.12xlarge 인스턴스가 하나 이상 있어야 합니다. 할당량과 관련된 장애가 발생하면 SageMaker 엔드포인트 인스턴스에 대한 서비스 한도 증가를 요청할 수 있습니다.

  • 자동 배포: Autopilot 실험에서 나온 최적의 모델을 엔드포인트에 수동으로 배포

    1. SageMaker Studio Classic에서 실험을 생성합니다.

    2. 자동 배포 값을 아니요로 전환합니다.

    3. 모델 이름에서 배포하려는 모델을 선택합니다.

    4. 리더보드 오른쪽에 있는 주황색 배포 및 고급 설정 버튼을 선택합니다. 그러면 새 탭이 열립니다.

    5. 엔드포인트 이름, 인스턴스 유형 및 기타 선택적 정보를 구성합니다.

    6. 엔드포인트에 배포할 주황색 배포 모델을 선택합니다.

    7. 엔드포인트 섹션으로 이동하여 https://console.aws.amazon.com/sagemaker/ 에서 엔드포인트 생성 프로세스의 진행 상황을 확인합니다. 해당 섹션은 탐색 패널의 추론 드롭다운 메뉴에 있습니다.

    8. 아래와 InService같이 엔드포인트 상태가 생성에서 로 변경되면 Studio Classic으로 돌아가 엔드포인트를 호출합니다.

      SageMaker 콘솔: 엔드포인트를 생성하거나 엔드포인트 상태를 확인하는 엔드포인트 페이지입니다.

또한 API 호출을 사용하여 모델을 배포하여 실시간 추론을 얻을 수도 있습니다. 이 섹션에서는 AWS Command Line Interface (AWS CLI) 코드 조각을 사용하는 이 프로세스의 5단계를 보여줍니다.

AWS CLI 명령 및 AWS SDK Python(boto3)에 대한 전체 코드 예제를 보려면 다음 단계에 따라 탭을 직접 엽니다.

  1. 후보 정의 가져오기

    에서 후보 컨테이너 정의를 가져옵니다InferenceContainers. 이러한 후보 정의는 SageMaker 모델을 생성하는 데 사용됩니다.

    다음 예제에서는 DescribeAutoMLJobAPI를 사용하여 최상의 모델 후보에 대한 후보 정의를 가져옵니다. 다음 AWS CLI 명령을 예로 참조하세요.

    aws sagemaker describe-auto-ml-job --auto-ml-job-name <job-name> --region <region>
  2. 후보 나열

    다음 예제에서는 를 사용하여 모든 후보ListCandidatesForAutoMLJobAPI를 나열합니다. 예제로서 다음 AWS CLI 명령을 참조하세요.

    aws sagemaker list-candidates-for-auto-ml-job --auto-ml-job-name <job-name> --region <region>
  3. SageMaker 모델 생성

    이전 단계의 컨테이너 정의를 사용하여 CreateModel 를 사용하여 SageMaker 모델을 생성합니다API. 다음 AWS CLI 명령을 예로 참조하세요.

    aws sagemaker create-model --model-name '<your-custom-model-name>' \ --containers ['<container-definition1>, <container-definition2>, <container-definition3>]' \ --execution-role-arn '<execution-role-arn>' --region '<region>
  4. 엔드포인트 구성 생성

    다음 예제에서는 CreateEndpointConfigAPI를 사용하여 엔드포인트 구성을 생성합니다. 다음 AWS CLI 명령을 예로 참조하세요.

    aws sagemaker create-endpoint-config --endpoint-config-name '<your-custom-endpoint-config-name>' \ --production-variants '<list-of-production-variants>' \ --region '<region>'
  5. 엔드포인트 생성

    다음 AWS CLI 예제에서는 CreateEndpointAPI를 사용하여 엔드포인트를 생성합니다.

    aws sagemaker create-endpoint --endpoint-name '<your-custom-endpoint-name>' \ --endpoint-config-name '<endpoint-config-name-you-just-created>' \ --region '<region>'

    를 사용하여 엔드포인트 배포 진행 상황을 확인합니다DescribeEndpointAPI. 다음 AWS CLI 명령을 예로 참조하세요.

    aws sagemaker describe-endpoint —endpoint-name '<endpoint-name>' —region <region>

    EndpointStatusInService로 변경되면 엔드포인트를 실시간 추론에 사용할 수 있습니다.

  6. API 엔드포인트 호출

    다음 명령 구조는 실시간 추론을 위해 엔드포인트를 간접적으로 호출합니다.

    aws sagemaker invoke-endpoint --endpoint-name '<endpoint-name>' \ --region '<region>' --body '<your-data>' [--content-type] '<content-type>' <outfile>

다음 탭에는 Python(boto3) 또는 용 모델을 배포하기 AWS SDK 위한 전체 코드 예제가 포함되어 있습니다 AWS CLI.

AWS SDK for Python (boto3)
  1. 다음 코드 예제를 사용하여 후보 정의를 확보하세요.

    import sagemaker import boto3 session = sagemaker.session.Session() sagemaker_client = boto3.client('sagemaker', region_name='us-west-2') job_name = 'test-auto-ml-job' describe_response = sm_client.describe_auto_ml_job(AutoMLJobName=job_name) # extract the best candidate definition from DescribeAutoMLJob response best_candidate = describe_response['BestCandidate'] # extract the InferenceContainers definition from the caandidate definition inference_containers = best_candidate['InferenceContainers']
  2. 다음 코드 예제를 사용하여 모델을 생성합니다.

    # Create Model model_name = 'test-model' sagemaker_role = 'arn:aws:iam:444455556666:role/sagemaker-execution-role' create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, Containers = inference_containers )
  3. 다음 코드 예제를 사용하여 엔드포인트 구성을 생성합니다.

    endpoint_config_name = 'test-endpoint-config' instance_type = 'ml.m5.2xlarge' # for all supported instance types, see # https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html#sagemaker-Type-ProductionVariant-InstanceType # Create endpoint config endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "VariantName": "variant1", "ModelName": model_name, "InstanceType": instance_type, "InitialInstanceCount": 1 } ] ) print(f"Created EndpointConfig: {endpoint_config_response['EndpointConfigArn']}")
  4. 엔드포인트를 생성하고 다음 코드 예제를 사용하여 모델을 배포합니다.

    # create endpoint and deploy the model endpoint_name = 'test-endpoint' create_endpoint_response = sagemaker_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name) print(create_endpoint_response)

    다음 코드 예제를 사용하여 엔드포인트 생성 상태를 확인합니다.

    # describe endpoint creation status status = sagemaker_client.describe_endpoint(EndpointName=endpoint_name)["EndpointStatus"]
  5. 다음 명령 구조를 사용하여 실시간 추론을 위해 엔드포인트를 호출합니다.

    # once endpoint status is InService, you can invoke the endpoint for inferencing if status == "InService": sm_runtime = boto3.Session().client('sagemaker-runtime') inference_result = sm_runtime.invoke_endpoint(EndpointName='test-endpoint', ContentType='text/csv', Body='1,2,3,4,class')
AWS Command Line Interface (AWS CLI)
  1. 다음 코드 예제를 사용하여 후보 정의를 확보하세요.

    aws sagemaker describe-auto-ml-job --auto-ml-job-name 'test-automl-job' --region us-west-2
  2. 다음 코드 예제를 사용하여 모델을 생성합니다.

    aws sagemaker create-model --model-name 'test-sagemaker-model' --containers '[{ "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3", amzn-s3-demo-bucket1 "ModelDataUrl": "s3://amzn-s3-demo-bucket/output/model.tar.gz", "Environment": { "AUTOML_SPARSE_ENCODE_RECORDIO_PROTOBUF": "1", "AUTOML_TRANSFORM_MODE": "feature-transform", "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "application/x-recordio-protobuf", "SAGEMAKER_PROGRAM": "sagemaker_serve", "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code" } }, { "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-xgboost:1.3-1-cpu-py3", "ModelDataUrl": "s3://amzn-s3-demo-bucket/output/model.tar.gz", "Environment": { "MAX_CONTENT_LENGTH": "20971520", "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv", "SAGEMAKER_INFERENCE_OUTPUT": "predicted_label", "SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,probabilities" } }, { "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3", aws-region "ModelDataUrl": "s3://amzn-s3-demo-bucket/output/model.tar.gz", "Environment": { "AUTOML_TRANSFORM_MODE": "inverse-label-transform", "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv", "SAGEMAKER_INFERENCE_INPUT": "predicted_label", "SAGEMAKER_INFERENCE_OUTPUT": "predicted_label", "SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,labels,probabilities", "SAGEMAKER_PROGRAM": "sagemaker_serve", "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code" } }]' \ --execution-role-arn 'arn:aws:iam::1234567890:role/sagemaker-execution-role' \ --region 'us-west-2'

    자세한 내용은 모델 생성을 참조하세요.

    create model 명령은 다음과 같은 형식의 응답을 반환합니다.

    { "ModelArn": "arn:aws:sagemaker:us-west-2:1234567890:model/test-sagemaker-model" }
  3. 다음 코드 예제를 사용하여 엔드포인트 구성을 생성합니다.

    aws sagemaker create-endpoint-config --endpoint-config-name 'test-endpoint-config' \ --production-variants '[{"VariantName": "variant1", "ModelName": "test-sagemaker-model", "InitialInstanceCount": 1, "InstanceType": "ml.m5.2xlarge" }]' \ --region us-west-2

    create endpoint 구성 명령은 다음과 같은 형식의 응답을 반환합니다.

    { "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:1234567890:endpoint-config/test-endpoint-config" }
  4. 다음 코드 예제를 사용하여 엔드포인트를 생성합니다.

    aws sagemaker create-endpoint --endpoint-name 'test-endpoint' \ --endpoint-config-name 'test-endpoint-config' \ --region us-west-2

    create endpoint 명령은 다음과 같은 형식의 응답을 반환합니다.

    { "EndpointArn": "arn:aws:sagemaker:us-west-2:1234567890:endpoint/test-endpoint" }

    다음 설명 엔드포인트 코드 예제를 사용하여 엔드포인트 배포 진행 상황을 확인합니다. CLI

    aws sagemaker describe-endpoint --endpoint-name 'test-endpoint' --region us-west-2

    이전 진행 상황 확인에서는 다음 형식으로 응답을 반환합니다.

    { "EndpointName": "test-endpoint", "EndpointArn": "arn:aws:sagemaker:us-west-2:1234567890:endpoint/test-endpoint", "EndpointConfigName": "test-endpoint-config", "EndpointStatus": "Creating", "CreationTime": 1660251167.595, "LastModifiedTime": 1660251167.595 }

    EndpointStatusInService로 변경되면 엔드포인트를 실시간 추론에 사용할 수 있습니다.

  5. 다음 명령 구조를 사용하여 실시간 추론을 위해 엔드포인트를 호출합니다.

    aws sagemaker-runtime invoke-endpoint --endpoint-name 'test-endpoint' \ --region 'us-west-2' \ --body '1,51,3.5,1.4,0.2' \ --content-type 'text/csv' \ '/tmp/inference_output'

    자세한 옵션은 엔드포인트 호출을 참조하세요.

모델을 생성한 원래 계정이 아닌 다른 계정에서 Autopilot 모델을 배포할 수 있습니다. 교차 계정 모델 배포를 구현하기 위해 이 섹션에서는 다음을 수행하는 방법을 보여줍니다.

  1. 배포 계정에 권한 부여

    생성 계정에서 역할을 맡으려면 배포 계정에 권한을 부여해야 합니다. 이렇게 하면 배포 계정이 생성 계정의 Autopilot 작업을 설명할 수 있습니다.

    다음 예시에서는 신뢰할 수 있는 sagemaker-role 엔터티를 가진 생성 계정을 사용합니다. 이 예제는 ID가 111122223333인 배포 계정에 생성 계정 역할을 맡을 수 있는 권한을 부여하는 방법을 보여줍니다.

    "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "sagemaker.amazonaws.com" ], "AWS": [ "111122223333"] }, "Action": "sts:AssumeRole" }

    ID가 111122223333인 새 계정이 이제 생성 계정 역할을 맡을 수 있습니다.

    그런 다음 배포 계정DescribeAutoMLJobAPI에서 를 호출하여 생성 계정에서 생성된 작업에 대한 설명을 얻습니다.

    다음 코드 예제는 배포 계정의 모델을 설명합니다.

    import sagemaker import boto3 session = sagemaker.session.Session() sts_client = boto3.client('sts') sts_client.assume_role role = 'arn:aws:iam::111122223333:role/sagemaker-role' role_session_name = "role-session-name" _assumed_role = sts_client.assume_role(RoleArn=role, RoleSessionName=role_session_name) credentials = _assumed_role["Credentials"] access_key = credentials["AccessKeyId"] secret_key = credentials["SecretAccessKey"] session_token = credentials["SessionToken"] session = boto3.session.Session() sm_client = session.client('sagemaker', region_name='us-west-2', aws_access_key_id=access_key, aws_secret_access_key=secret_key, aws_session_token=session_token) # now you can call describe automl job created in account A job_name = "test-job" response= sm_client.describe_auto_ml_job(AutoMLJobName=job_name)
  2. 생성 계정의 모델 아티팩트에 배포 계정에 대한 액세스 권한을 부여합니다.

    배포 계정에는 생성 계정의 모델 아티팩트에 대한 액세스 권한만 있으면 배포할 수 있습니다. 이는 모델 생성 중에 원래 CreateAutoMLJob API 호출에 지정된 S3OutputPath에 있습니다.

    배포 계정에 모델 아티팩트에 대한 액세스 권한을 부여하려면 다음 옵션 중 하나를 선택합니다.

    1. 생성 계정에서 배포 계정에 ModelDataUrl에 대한 액세스 권한을 부여하세요.

      다음으로 배포 계정에 역할을 맡을 권한을 부여해야 합니다. 실시간 추론 단계에 따라 배포하세요.

    2. 생성 계정의 원래 S3OutputPath에서 생성 계정으로 모델 아티팩트를 복사합니다.

      모델 아티팩트에 대한 액세스 권한을 부여하려면 best_candidate 모델을 정의하고 모델 컨테이너를 새 계정에 재할당해야 합니다.

      다음 예제에서는 best_candidate 모델을 정의하고 ModelDataUrl을 재할당하는 방법을 보여줍니다.

      best_candidate = automl.describe_auto_ml_job()['BestCandidate'] # reassigning ModelDataUrl for best_candidate containers below new_model_locations = ['new-container-1-ModelDataUrl', 'new-container-2-ModelDataUrl', 'new-container-3-ModelDataUrl'] new_model_locations_index = 0 for container in best_candidate['InferenceContainers']: container['ModelDataUrl'] = new_model_locations[new_model_locations_index++]

      컨테이너를 할당한 후에는 를 사용하여 배포 SageMaker APIs의 단계를 따라 배포합니다.

실시간 추론으로 페이로드를 구축하려면 노트북 예제를 참조하여 테스트 페이로드를 정의하세요. CSV 파일에서 페이로드를 생성하고 엔드포인트를 호출하려면 기계 학습 모델 자동 생성의 모델 예측 섹션을 참조하세요.