

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

# Amazon SageMaker 추론 추천자를 사용한 추천 작업
<a name="inference-recommender-recommendation-jobs"></a>

Amazon SageMaker Inference Recommender로 수행 가능한 두 가지 유형의 권장 사항:

1. 추론 권장 사항(`Default` 작업 유형)은 권장 인스턴스 유형에 대해 일련의 부하 테스트를 실행합니다. 서버리스 엔드포인트에 대한 부하 테스트도 실행할 수 있습니다. 모델 패키지 Amazon 리소스 이름(ARN)만 입력하면 이런 유형의 권장 작업을 실시할 수 있습니다. 추론 권장 작업은 45분 이내에 완료됩니다.

1. 엔드포인트 권장 사항(`Advanced` 작업 유형)은 원하는 ML 인스턴스 또는 서버리스 엔드포인트를 선택하고, 사용자 지정 트래픽 패턴을 입력하고, 프로덕션 요구 사항에 따라 지연 시간 및 처리량에 대한 요구 사항을 입력하는 사용자 지정 부하 테스트를 기반으로 합니다. 작업 완료 시간은 설정된 작업 지속 시간과 테스트한 추론 구성의 총 개수에 따라 달라지지만 평균 2시간입니다.

두 가지 권장 사항 모두 동일한 API로 작업을 생성하고, 설명하고, 중단합니다. 출력은 관련 환경 변수, 비용, 처리량, 지연 시간 지표가 포함된 인스턴스 구성 권장 사항 목록입니다. 권장 작업은 오토 스케일링 정책 구성 시 사용할 수 있는 초기 인스턴스 수도 제공합니다. 두 가지 작업을 구분하려면 SageMaker AI 콘솔 또는 API로 작업을 생성할 때 예비 엔드포인트 권장 사항을 생성하려면 `Default`를, 사용자 지정 부하 테스트와 엔드포인트 권장 사항을 생성하려면 `Advanced`를 지정합니다.

**참고**  
자체 워크플로에서 두 가지 권장 작업을 모두 수행할 필요는 없습니다. 둘 중 하나를 서로 독립적으로 수행할 수 있습니다.

또한 Inference Recommender는 예상 인스턴스 목록 또는 모델 배포를 위한 비용, 처리량, 지연 시간에 최적화된 상위 5개 인스턴스 유형 목록을 신뢰도 점수와 함께 제공할 수 있습니다. 이러한 인스턴스는 모델 배포 시 선택할 수 있습니다. Inference Recommender는 모델을 대상으로 자동 벤치마킹을 수행하여 예상 인스턴스를 제공합니다. 이는 예비 권장 사항이므로 더 정확한 결과를 얻으려면 추가 인스턴스 권장 작업을 실행하는 것이 좋습니다. 예상 인스턴스는 SageMaker AI 모델 세부정보 페이지에서 확인하세요. 자세한 내용은 [인스턴트 예상 인스턴스 가져오기](inference-recommender-prospective.md) 단원을 참조하십시오.

**Topics**
+ [인스턴트 예상 인스턴스 가져오기](inference-recommender-prospective.md)
+ [추론 권장 사항](inference-recommender-instance-recommendation.md)
+ [기존 엔드포인트에 대한 추론 권장 사항 가져오기](inference-recommender-existing-endpoint.md)
+ [추론 권장 사항 중단하기](instance-recommendation-stop.md)
+ [Neo로 컴파일된 권장 사항](inference-recommender-neo-compilation.md)
+ [권장 결과](inference-recommender-interpret-results.md)
+ [오토 스케일링 정책 권장 사항 가져오기](inference-recommender-autoscaling.md)
+ [사용자 지정 부하 테스트 실행하기](inference-recommender-load-test.md)
+ [부하 테스트 중단하기](load-test-stop.md)
+ [Inference Recommender 오류 문제 해결](inference-recommender-troubleshooting.md)

# 인스턴트 예상 인스턴스 가져오기
<a name="inference-recommender-prospective"></a>

또한 Inference Recommender는 SageMaker AI 모델 세부 정보 페이지에서 *예상 인스턴스* 목록 또는 모델에 적합할 수 있는 인스턴스 유형을 제공할 수도 있습니다. Inference Recommender는 모델을 대상으로 자동 예비 벤치마킹을 수행하여 상위 5개 예상 인스턴스를 제공합니다. 이는 예비 권장 사항이므로 더 정확한 결과를 얻으려면 추가 인스턴스 권장 작업을 실행하는 것이 좋습니다.

[DescribeModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeModel.html) API, SageMaker Python SDK 또는 SageMaker AI 콘솔을 사용하여 프로그래밍 방식으로 모델의 예상 인스턴스 목록을 볼 수 있습니다.

**참고**  
이 기능이 가용화되기 전에 SageMaker AI에서 생성한 모델의 예상 인스턴스는 가져올 수 없습니다.

콘솔을 통해 모델의 예상 인스턴스를 보는 방법은 다음과 같습니다.

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker 콘솔로 이동합니다.

1. 왼쪽 탐색 창에서 **추론(Inference)**을 선택한 다음 **모델(Models)**을 선택합니다.

1. 모델 목록에서 모델을 선택합니다.

모델 세부정보 페이지에서 **모델을 배포할 예상 인스턴스 섹션(Prospective instances to deploy model)**으로 이동합니다. 아래 스크린샷에서 이 섹션을 볼 수 있습니다.

![\[모델 세부정보 페이지에 있는 예상 인스턴스 목록 스크린샷.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/inf-rec-prospective.png)


이 섹션에서는 메모리 크기, CPU 및 GPU 수, 시간당 비용 등 각 인스턴스 유형에 대한 추가 정보와 함께 모델 배포를 위한 비용, 처리량, 지연 시간에 맞게 최적화된 예상 인스턴스를 볼 수 있습니다.

샘플 페이로드를 벤치마크하고 모델에 대한 전체 추론 권장 작업을 실행하기로 결정한 경우, 이 페이지에서 기본 추론 권장 작업을 시작할 수 있습니다. 콘솔을 통해 기본 작업을 시작하는 방법은 다음과 같습니다.

1. 모델 세부정보 페이지에 있는 **모델을 배포할 예상 인스턴스 섹션(Prospective instances to deploy model section)**에서 **Inference Recommender 작업 실행(Run Inference recommender job)**을 선택합니다.

1. 표시되는 대화 상자에서 **벤치마킹 페이로드용 S3 버킷(S3 bucket for benchmarking payload)**에 모델의 샘플 페이로드를 저장한 Amazon S3의 위치를 입력합니다.

1. **페이로드 콘텐츠 유형(Payload content type)**에 페이로드 데이터의 MIME 유형을 입력합니다.

1. (선택 사항) **SageMaker Neo를 사용한 모델 컴파일(Model compilation using SageMaker Neo)** 섹션에서 **데이터 입력 구성(Data input configuration)**에 사전 형식의 데이터 형상을 입력합니다.

1. **작업 실행(Run job)**을 선택합니다.

Inference Recommender에서 작업을 시작하면 SageMaker AI 콘솔의 **Inference Recommender** 목록 페이지에서 작업과 결과를 볼 수 있습니다.

고급 작업을 실행하고 사용자 지정 부하 테스트를 수행하거나, 작업에 대한 추가 설정 및 파라미터를 구성하는 방법은 [사용자 지정 부하 테스트 실행하기](inference-recommender-load-test.md)에서 확인하세요.

# 추론 권장 사항
<a name="inference-recommender-instance-recommendation"></a>

추론 권장 작업은 권장 인스턴스 유형이나 서버리스 엔드포인트에 대해 일련의 부하 테스트를 실행합니다. 추론 권장 작업은 모델 버전 등록 시 입력한 샘플 데이터를 사용한 부하 테스트를 기반으로 하는 성능 지표를 사용합니다.

**참고**  
Inference Recommender 권장 작업을 생성하기 전에 [Amazon SageMaker 추론 추천자를 사용하기 위한 사전 조건](inference-recommender-prerequisites.md) 충족 여부를 확인합니다.

다음은 Amazon SageMaker Inference Recommender를 사용하여 AWS SDK for Python (Boto3) AWS CLI및 Amazon SageMaker Studio Classic과 SageMaker AI 콘솔을 사용하여 모델 유형에 따라 추론 권장 사항을 생성하는 방법을 보여줍니다.

**Topics**
+ [추론 권장 사항 생성하기](instance-recommendation-create.md)
+ [추론 권장 작업 결과 확인하기](instance-recommendation-results.md)

# 추론 권장 사항 생성하기
<a name="instance-recommendation-create"></a>

 AWS SDK for Python (Boto3) 또는를 사용하여 프로그래밍 방식으로 추론 권장 사항을 생성 AWS CLI하거나 Studio Classic 또는 SageMaker AI 콘솔을 사용하여 대화형으로 추론 권장 사항을 생성합니다. 모델 레지스트리에 모델을 등록할 때 추론 권장 사항의 작업 이름, AWS IAM 역할 ARN, 입력 구성, 모델 패키지 ARN 또는 **사전 조건** 섹션에서 모델을 생성할 때의 모델 이름 및 `ContainerConfig` 사전을 지정합니다.

------
#### [ AWS SDK for Python (Boto3) ]

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html) API로 추론 권장 작업을 시작합니다. 추론 권장 작업 시 `JobType` 필드를 `'Default'`(으)로 설정합니다. 또한 다음을 입력합니다.
+ Inference Recommender가 사용자를 대신하여 작업을 수행할 수 있게 지원하는 IAM 역할의 Amazon 리소스 이름(ARN). `RoleArn` 필드에 정의합니다.
+ 모델 패키지 ARN 또는 모델 이름 Inference Recommender는 하나의 모델 패키지 ARN 또는 모델 이름을 입력으로 지원합니다. 다음 중 하나를 지정하세요.
  + SageMaker AI 모델 레지스트리에 모델을 등록할 때 생성한 버전 지정 모델 패키지의 ARN. `ModelPackageVersionArn` 시 `InputConfig` 필드에 정의합니다.
  + 생성한 모델의 이름. `ModelName` 시 `InputConfig` 필드에 정의합니다. 또한 모델 이름과 함께 입력해야 하는 필수 필드가 포함된 `ContainerConfig` 사전을 입력합니다. `ContainerConfig` 시 `InputConfig` 필드에 정의합니다. `ContainerConfig`에서 선택적으로 `SupportedEndpointType` 필드를 `RealTime` 또는 `Serverless`(으)로 지정할 수도 있습니다. 이 필드를 지정하면 Inference Recommender는 해당 엔드포인트 유형에 대한 권장 사항만 반환합니다. 이 필드를 지정하지 않으면 Inference Recommender는 두 엔드포인트 유형 모두에 대한 권장 사항을 반환합니다.
+ `JobName` 필드에 대한 Inference Recommender 권장 작업 이름. Inference Recommender 작업 이름은 AWS 리전 및 계정 AWS 내에서 고유해야 합니다.

 AWS SDK for Python (Boto3) 패키지를 가져오고 클라이언트 클래스를 사용하여 SageMaker AI 클라이언트 객체를 생성합니다. **필수 조건** 섹션의 단계를 따랐다면 다음 중 하나만 지정합니다.
+ 옵션 1: 모델 패키지 ARN으로 추론 권장 작업을 생성하려면, 모델 패키지 그룹 ARN을 `model_package_arn` 변수에 저장합니다.
+ 옵션 2: 모델 이름과 `ContainerConfig`을(를) 사용하여 추론 권장 작업을 생성하려면, 모델 이름을 `model_name` 변수에 저장하고 `ContainerConfig` 사전을 `container_config` 변수에 저장합니다.

```
# Create a low-level SageMaker service client.
import boto3
aws_region = '<INSERT>'
sagemaker_client = boto3.client('sagemaker', region_name=aws_region) 

# Provide only one of model package ARN or model name, not both.
# Provide your model package ARN that was created when you registered your 
# model with Model Registry 
model_package_arn = '<INSERT>'
## Uncomment if you would like to create an inference recommendations job with a
## model name instead of a model package ARN, and comment out model_package_arn above
## Provide your model name
# model_name = '<INSERT>'
## Provide your container config 
# container_config = '<INSERT>'

# Provide a unique job name for SageMaker Inference Recommender job
job_name = '<INSERT>'

# Inference Recommender job type. Set to Default to get an initial recommendation
job_type = 'Default'

# Provide an IAM Role that gives SageMaker Inference Recommender permission to 
# access AWS services
role_arn = 'arn:aws:iam::<account>:role/*'

sagemaker_client.create_inference_recommendations_job(
    JobName = job_name,
    JobType = job_type,
    RoleArn = role_arn,
    # Provide only one of model package ARN or model name, not both. 
    # If you would like to create an inference recommendations job with a model name,
    # uncomment ModelName and ContainerConfig, and comment out ModelPackageVersionArn.
    InputConfig = {
        'ModelPackageVersionArn': model_package_arn
        # 'ModelName': model_name,
        # 'ContainerConfig': container_config
    }
)
```

[Amazon SageMaker API 참조 안내서](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html)에서 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html)에 전달할 수 있는 선택 및 필수 인수 전체 목록을 확인하세요.

------
#### [ AWS CLI ]

`create-inference-recommendations-job` API로 추론 권장 작업을 시작합니다. 추론 권장 작업 시 `job-type` 필드를 `'Default'`(으)로 설정합니다. 또한 다음을 입력합니다.
+ Amazon SageMaker Inference Recommender가 사용자를 대신하여 작업을 수행할 수 있게 지원하는 IAM 역할의 Amazon 리소스 이름(ARN). `role-arn` 필드에 정의합니다.
+ 모델 패키지 ARN 또는 모델 이름 Inference Recommender는 하나의 모델 패키지 ARN 또는 모델 이름을 입력으로 지원합니다. 다음 중 하나를 지정하세요.
  + 모델 레지스트리에 모델을 등록할 때 생성한 버전 지정 모델 패키지의 ARN. `ModelPackageVersionArn` 시 `input-config` 필드에 정의합니다.
  + 생성한 모델의 이름. `ModelName` 시 `input-config` 필드에 정의합니다. 또한 모델 이름과 함께 입력해야 하는 필수 필드가 포함된 `ContainerConfig` 사전을 입력합니다. `ContainerConfig` 시 `input-config` 필드에 정의합니다. `ContainerConfig`에서 선택적으로 `SupportedEndpointType` 필드를 `RealTime` 또는 `Serverless`(으)로 지정할 수도 있습니다. 이 필드를 지정하면 Inference Recommender는 해당 엔드포인트 유형에 대한 권장 사항만 반환합니다. 이 필드를 지정하지 않으면 Inference Recommender는 두 엔드포인트 유형 모두에 대한 권장 사항을 반환합니다.
+ `job-name` 필드에 대한 Inference Recommender 권장 작업 이름. Inference Recommender 작업 이름은 AWS 리전 및 계정 AWS 내에서 고유해야 합니다.

모델 패키지 ARN으로 추론 권장 작업을 생성하려면, 다음 예제를 적용합니다.

```
aws sagemaker create-inference-recommendations-job 
    --region <region>\
    --job-name <job_name>\
    --job-type Default\
    --role-arn arn:aws:iam::<account:role/*>\
    --input-config "{
        \"ModelPackageVersionArn\": \"arn:aws:sagemaker:<region:account:role/*>\",
        }"
```

모델 이름과 `ContainerConfig`(으)로 추론 권장 작업을 생성하려면, 다음 예제를 적용합니다. 이 예제에서는 `SupportedEndpointType` 필드를 사용하여 실시간 추론 권장 사항만 반환하도록 지정합니다.

```
aws sagemaker create-inference-recommendations-job 
    --region <region>\
    --job-name <job_name>\
    --job-type Default\
    --role-arn arn:aws:iam::<account:role/*>\
    --input-config "{
        \"ModelName\": \"model-name\",
        \"ContainerConfig\" : {
                \"Domain\": \"COMPUTER_VISION\",
                \"Framework\": \"PYTORCH\",
                \"FrameworkVersion\": \"1.7.1\",
                \"NearestModelName\": \"resnet18\",
                \"PayloadConfig\": 
                    {
                        \"SamplePayloadUrl\": \"s3://{bucket}/{payload_s3_key}\", 
                        \"SupportedContentTypes\": [\"image/jpeg\"]
                    },
                \"SupportedEndpointType\": \"RealTime\",
                \"DataInputConfig\": \"[[1,3,256,256]]\",
                \"Task\": \"IMAGE_CLASSIFICATION\",
            },
        }"
```

------
#### [ Amazon SageMaker Studio Classic ]

Studio Classic에서 추론 권장 작업을 생성합니다.

1. Studio Classic 애플리케이션에서 홈 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. Studio Classic 왼쪽 사이드바에서 **모델**을 선택합니다.

1. 드롭다운 목록에서 **모델 레지스트리**를 선택하면 모델 레지스트리에 등록한 모델이 표시됩니다.

   왼쪽 패널에는 모델 그룹 목록이 표시됩니다. 목록에는 Studio Classic 외부에서 등록된 모델을 포함하여 계정의 모델 레지스트리에 등록된 모든 모델 그룹이 포함됩니다.

1. 모델 그룹의 이름을 선택합니다. 모델 그룹을 선택하면 Studio Classic 오른쪽 창에 **버전**, **설정** 등의 열 제목이 표시됩니다.

   모델 그룹에 모델 패키지가 하나 이상 있는 경우, **버전** 열에 모델 패키지 목록이 표시됩니다.

1. **Inference Recommender** 열을 선택합니다.

1. Inference Recommender에 AWS 서비스에 액세스할 수 있는 권한을 부여하는 IAM 역할을 선택합니다. 역할을 생성하고 `AmazonSageMakerFullAccess` IAM 관리형 정책을 연결하여 수행할 수 있습니다. 또는 Studio Classic이 대신 역할을 생성하도록 할 수도 있습니다.

1. **추천 받기**를 선택합니다.

   추론 권장 사항은 최대 45분이 걸릴 수 있습니다.
**주의**  
이 탭을 닫지 마세요. 탭을 닫으면 인스턴스 권장 작업이 취소됩니다.

------
#### [ SageMaker AI console ]

SageMaker AI 콘솔을 통해 인스턴스 권장 작업을 생성하는 방법은 다음과 같습니다.

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔로 이동합니다.

1. 왼쪽 탐색 창에서 **추론(Inference)**을 선택한 다음 **Inference Recommender**를 선택합니다.

1. **Inference Recommender 작업(Inference recommender jobs)** 페이지에서 **작업 생성(Create job)**을 선택합니다.

1. **1단계: 모델 구성**에서 다음을 수행합니다.

   1. **작업 유형(Job type)**으로 **기본 Recommender 작업(Default recommender job)**을 선택합니다.

   1. SageMaker AI 모델 레지스트리에 등록된 모델을 사용하는 경우, **모델 레지스트리에서 모델 선택** 전환을 켜고 다음을 수행합니다.

      1. **모델 그룹** 드롭다운 목록에서 모델이 위치한 SageMaker AI 모델 레지스트리의 모델 그룹을 선택합니다.

      1. **모델 버전(Model version)** 드롭다운 목록에서 원하는 모델 버전을 선택합니다.

   1. SageMaker AI에서 생성한 모델을 사용하는 경우, **모델 레지스트리에서 모델 선택** 전환을 끄고 다음을 수행합니다.

      1. **모델 이름** 필드에 SageMaker AI 모델의 이름을 입력합니다.

   1. **IAM 역할** 드롭다운 목록에서 인스턴스 권장 작업을 생성하는 데 필요한 권한이 있는 기존 AWS IAM 역할을 선택할 수 있습니다. 기존 역할이 없는 경우에는 **새 역할 생성**을 선택하여 역할 생성 팝업을 열 수 있습니다. 그러면 SageMaker AI가 생성한 새 역할에 필요한 권한을 추가합니다.

   1. **페이로드 벤치마킹용 S3 버킷(S3 bucket for benchmarking payload)**에 샘플 페이로드 아카이브의 Amazon S3 경로를 입력합니다. 이 경로에는 Inference Recommender가 다양한 인스턴스 유형에서 모델을 벤치마크할 때 사용하는 샘플 페이로드 파일이 포함되어야 합니다.

   1. **페이로드 콘텐츠 유형(Payload content type)**에 샘플 페이로드 데이터의 MIME 유형을 입력합니다.

   1. (선택 사항) **모델 레지스트리에서 모델 선택** 전환을 끄고 SageMaker AI 모델을 지정한 경우, **컨테이너 구성**에서 다음을 수행합니다.

      1. **도메인(Domain)** 드롭다운 목록에서 컴퓨터 비전, 자연어 처리, 기계 학습 등 모델의 기계 학습 도메인을 선택합니다.

      1. **프레임워크(Framework)** 드롭다운 목록에서 TensorFlow, XGBoost 등 컨테이너의 프레임워크를 선택합니다.

      1. **프레임워크 버전(Framework version)**에 컨테이너 이미지의 프레임워크 버전을 입력합니다.

      1. **가장 가까운 모델 이름(Nearest model name)** 드롭다운 목록에서 사용자 모델과 가장 가깝게 일치하는 사전 훈련된 모델을 선택합니다.

      1. **태스크(Task)** 드롭다운 목록에서 모델이 수행하는 기계 학습 태스크(예: 이미지 분류, 회귀)를 선택합니다.

   1. (선택 사항) **SageMaker Neo를 사용한 모델 컴파일(Model compilation using SageMaker Neo)**에서 SageMaker Neo로 컴파일한 모델에 대한 권장 작업을 구성할 수 있습니다. **데이터 입력 구성(Data input configuration)**에 `{'input':[1,1024,1024,3]}`와(과) 비슷한 형식으로 모델에 맞는 정확한 입력 데이터 형상을 입력합니다.

   1. **다음**을 선택합니다.

1. **2단계: 인스턴스 및 환경 파라미터**에서 다음을 수행합니다.

   1. (선택 사항) **벤치마킹할 인스턴스 선택(Select instances for benchmarking)**에서 벤치마킹할 인스턴스 유형을 최대 8개까지 선택할 수 있습니다. 인스턴스를 선택하지 않으면 Inference Recommender는 모든 인스턴스 유형을 고려합니다.

   1. **다음**을 선택합니다.

1. **3단계: 작업 파라미터**에서 다음을 수행합니다.

   1. (선택 사항) **작업 이름(Job name)** 필드에 인스턴스 권장 작업의 이름을 입력합니다. 작업 생성 시 SageMaker AI는 이 이름 끝에 타임스탬프를 추가합니다.

   1. (선택 사항) **작업 설명(Job description)** 필드에 작업에 대한 설명을 입력합니다.

   1. (선택 사항) **암호화 키** 드롭다운 목록에서 이름으로 AWS KMS 키를 선택하거나 ARN을 입력하여 데이터를 암호화합니다.

   1. (선택 사항) **최장 테스트 지속 시간(Max test duration (s))**에 개별 테스트를 실행할 최장 시간(초)을 입력합니다.

   1. (선택 사항) **분당 최대 간접 호출(Max invocations per minute)**에 엔드포인트가 권장 작업을 중단하기 전에 도달할 수 있는 분당 최대 요청 수를 입력합니다. 이 한도에 도달하면 SageMaker AI는 작업을 종료합니다.

   1. (선택 사항) **P99 모델 지연 시간 임계값(ms)(P99 Model latency threshold (ms))**에 모델 지연 시간 백분위수를 밀리초 단위로 입력합니다.

   1. **다음**을 선택합니다.

1. **4단계: 작업 검토**에서 구성 검토 후 **제출(Submit)**을 선택합니다.

------

# 추론 권장 작업 결과 확인하기
<a name="instance-recommendation-results"></a>

 AWS SDK for Python (Boto3), , AWS CLI Studio Classic 또는 SageMaker AI 콘솔을 사용하여 프로그래밍 방식으로 추론 권장 작업의 결과를 수집합니다.

------
#### [ AWS SDK for Python (Boto3) ]

추론 권장 사항이 완료된 후, `DescribeInferenceRecommendationsJob`을(를) 사용하여 작업 세부정보와 권장 사항을 가져올 수 있습니다. 추론 권장 작업을 생성할 때 사용한 작업 이름을 입력합니다.

```
job_name='<INSERT>'
response = sagemaker_client.describe_inference_recommendations_job(
                    JobName=job_name)
```

응답 객체를 출력합니다. 이전 코드 샘플은 응답을 변수 이름 `response`에 저장했습니다.

```
print(response['Status'])
```

이는 다음 예제와 유사한 JSON 응답을 반환합니다. 참고로 이 예제에서는 실시간 추론을 위한 권장 인스턴스 유형을 볼 수 있습니다(서버리스 추론 권장 사항을 보여주는 예는 다음 예제 참조).

```
{
    'JobName': 'job-name', 
    'JobDescription': 'job-description', 
    'JobType': 'Default', 
    'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 20, 4, 57, 627000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 20, 25, 1, 997000, tzinfo=tzlocal()), 
    'InputConfig': {
                'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 
                'JobDurationInSeconds': 0
                }, 
    'InferenceRecommendations': [{
            'Metrics': {
                'CostPerHour': 0.20399999618530273, 
                'CostPerInference': 5.246913588052848e-06, 
                'MaximumInvocations': 648, 
                'ModelLatency': 263596
                }, 
            'EndpointConfiguration': {
                'EndpointName': 'endpoint-name', 
                'VariantName': 'variant-name', 
                'InstanceType': 'ml.c5.xlarge', 
                'InitialInstanceCount': 1
                }, 
            'ModelConfiguration': {
                'Compiled': False, 
                'EnvironmentParameters': []
                }
         }, 
         {
            'Metrics': {
                'CostPerHour': 0.11500000208616257, 
                'CostPerInference': 2.92620870823157e-06, 
                'MaximumInvocations': 655, 
                'ModelLatency': 826019
                }, 
            'EndpointConfiguration': {
                'EndpointName': 'endpoint-name', 
                'VariantName': 'variant-name', 
                'InstanceType': 'ml.c5d.large', 
                'InitialInstanceCount': 1
                }, 
            'ModelConfiguration': {
                'Compiled': False, 
                'EnvironmentParameters': []
                }
            }, 
            {
                'Metrics': {
                    'CostPerHour': 0.11500000208616257, 
                    'CostPerInference': 3.3625731248321244e-06, 
                    'MaximumInvocations': 570, 
                    'ModelLatency': 1085446
                    }, 
                'EndpointConfiguration': {
                    'EndpointName': 'endpoint-name', 
                    'VariantName': 'variant-name', 
                    'InstanceType': 'ml.m5.large', 
                    'InitialInstanceCount': 1
                    }, 
                'ModelConfiguration': {
                    'Compiled': False, 
                    'EnvironmentParameters': []
                    }
            }], 
    'ResponseMetadata': {
        'RequestId': 'request-id', 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': 'x-amzn-requestid', 
            'content-type': 'content-type', 
            'content-length': '1685', 
            'date': 'Tue, 26 Oct 2021 20:31:10 GMT'
            }, 
        'RetryAttempts': 0
        }
}
```

처음 몇 줄에는 추론 권장 작업 자체에 대한 정보가 있습니다. 여기에는 작업 이름, 역할 ARN, 생성 및 삭제 시간이 포함됩니다.

`InferenceRecommendations` 사전에는 Inference Recommender 추론 권장 사항 목록이 포함됩니다.

`EndpointConfiguration` 중첩 사전에는 권장 작업 중에 사용된 엔드포인트 및 변형 이름(배포된 AWS 기계 학습 모델`InstanceType`)과 함께 인스턴스 유형() 권장 사항이 포함되어 있습니다. 이 엔드포인트와 변형 이름은 Amazon CloudWatch Events에서 모니터링 시 사용할 수 있습니다. 자세한 정보는 [Amazon CloudWatch의 Amazon SageMaker AI 지표](monitoring-cloudwatch.md)을 참조하세요.

`Metrics` 중첩 사전에는 실시간 엔드포인트의 미화 기준 시간당 예상 비용(`CostPerHour`), 실시간 엔드포인트의 미화 기준 추론당 예상 비용(`CostPerInference`), 엔드포인트로 전송되는 분당 예상 최대 `InvokeEndpoint` 요청 수(`MaxInvocations`), 모델이 SageMaker AI에 응답하는 데 걸린 시간 간격(마이크로초)인 모델 지연 시간(`ModelLatency`)에 대한 정보가 포함됩니다. 모델 지연 시간에는 요청을 전송하고 모델의 컨테이너에서 응답을 가져오는 데 걸리는 로컬 통신 시간과 컨테이너에서 추론을 완료하는 데 걸리는 시간도 포함됩니다.

다음 예제에서는 서버리스 추론 권장 사항을 반환하도록 구성된 추론 권장 작업에 대한 응답의 `InferenceRecommendations` 일부를 볼 수 있습니다.

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "value",
            "InitialInstanceCount": value,
            "InstanceType": "value",
            "VariantName": "value",
            "ServerlessConfig": {
                "MaxConcurrency": value,
                "MemorySizeInMb": value
            }
         },
         "InvocationEndTime": value,
         "InvocationStartTime": value,
         "Metrics": { 
            "CostPerHour": value,
            "CostPerInference": value,
            "CpuUtilization": value,
            "MaxInvocations": value,
            "MemoryUtilization": value,
            "ModelLatency": value,
            "ModelSetupTime": value
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "value"
         },
         "RecommendationId": "value"
      }
   ]
```

서버리스 추론에 대한 권장 사항을 실시간 추론 결과와 비슷하게 해석할 수 있습니다. 단, `ServerlessConfig`의 경우에는 서버리스 엔드포인트에 대해 반환된 지표를 지정된 `MemorySizeInMB` 및 `MaxConcurrency = 1`와 함께 알려줍니다. 엔드포인트에서 가능한 처리량을 늘리려면 `MaxConcurrency` 값을 선형으로 늘립니다. 예를 들어, 추론 권장 사항에서 `MaxInvocations`이(가) `1000`(으)로 표시되는 경우, `MaxConcurrency`을(를) `2`(으)로 늘리면 2000 `MaxInvocations`을(를) 지원하게 됩니다. 참고로 이는 특정 시점까지만 적용되며, 모델과 코드에 따라 달라질 수 있습니다. 서버리스 권장 사항은 서버리스 엔드포인트에서 컴퓨터 리소스를 실행하는 데 걸리는 시간(마이크로초)을 측정하는 지표 `ModelSetupTime`도 측정합니다. 서버리스 엔드포인트 설정에 대한 자세한 정보는 [서버리스 추론 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html)에서 확인하세요.

------
#### [ AWS CLI ]

추론 권장 사항이 완료된 후, `describe-inference-recommendations-job`을(를) 사용하여 작업 세부정보와 권장 인스턴스 유형을 가져올 수 있습니다. 추론 권장 작업을 생성할 때 사용한 작업 이름을 입력합니다.

```
aws sagemaker describe-inference-recommendations-job\
    --job-name <job-name>\
    --region <aws-region>
```

JSON 응답은 다음 예제와 비슷해야 합니다. 참고로 이 예제에서는 실시간 추론을 위한 권장 인스턴스 유형을 볼 수 있습니다(서버리스 추론 권장 사항을 보여주는 예는 다음 예제 참조).

```
{
    'JobName': 'job-name', 
    'JobDescription': 'job-description', 
    'JobType': 'Default', 
    'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 20, 4, 57, 627000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 20, 25, 1, 997000, tzinfo=tzlocal()), 
    'InputConfig': {
                'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 
                'JobDurationInSeconds': 0
                }, 
    'InferenceRecommendations': [{
            'Metrics': {
                'CostPerHour': 0.20399999618530273, 
                'CostPerInference': 5.246913588052848e-06, 
                'MaximumInvocations': 648, 
                'ModelLatency': 263596
                }, 
            'EndpointConfiguration': {
                'EndpointName': 'endpoint-name', 
                'VariantName': 'variant-name', 
                'InstanceType': 'ml.c5.xlarge', 
                'InitialInstanceCount': 1
                }, 
            'ModelConfiguration': {
                'Compiled': False, 
                'EnvironmentParameters': []
                }
         }, 
         {
            'Metrics': {
                'CostPerHour': 0.11500000208616257, 
                'CostPerInference': 2.92620870823157e-06, 
                'MaximumInvocations': 655, 
                'ModelLatency': 826019
                }, 
            'EndpointConfiguration': {
                'EndpointName': 'endpoint-name', 
                'VariantName': 'variant-name', 
                'InstanceType': 'ml.c5d.large', 
                'InitialInstanceCount': 1
                }, 
            'ModelConfiguration': {
                'Compiled': False, 
                'EnvironmentParameters': []
                }
            }, 
            {
                'Metrics': {
                    'CostPerHour': 0.11500000208616257, 
                    'CostPerInference': 3.3625731248321244e-06, 
                    'MaximumInvocations': 570, 
                    'ModelLatency': 1085446
                    }, 
                'EndpointConfiguration': {
                    'EndpointName': 'endpoint-name', 
                    'VariantName': 'variant-name', 
                    'InstanceType': 'ml.m5.large', 
                    'InitialInstanceCount': 1
                    }, 
                'ModelConfiguration': {
                    'Compiled': False, 
                    'EnvironmentParameters': []
                    }
            }], 
    'ResponseMetadata': {
        'RequestId': 'request-id', 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': 'x-amzn-requestid', 
            'content-type': 'content-type', 
            'content-length': '1685', 
            'date': 'Tue, 26 Oct 2021 20:31:10 GMT'
            }, 
        'RetryAttempts': 0
        }
}
```

처음 몇 줄에는 추론 권장 작업 자체에 대한 정보가 있습니다. 여기에는 작업 이름, 역할 ARN, 생성 및 삭제 시간이 포함됩니다.

`InferenceRecommendations` 사전에는 Inference Recommender 추론 권장 사항 목록이 포함됩니다.

`EndpointConfiguration` 중첩 사전에는 권장 작업 중에 사용되는 엔드포인트 및 변형 이름(배포된 AWS 기계 학습 모델`InstanceType`)과 함께 인스턴스 유형() 권장 사항이 포함되어 있습니다. 이 엔드포인트와 변형 이름은 Amazon CloudWatch Events에서 모니터링 시 사용할 수 있습니다. 자세한 정보는 [Amazon CloudWatch의 Amazon SageMaker AI 지표](monitoring-cloudwatch.md)을 참조하세요.

`Metrics` 중첩 사전에는 실시간 엔드포인트의 미화 기준 시간당 예상 비용(`CostPerHour`), 실시간 엔드포인트의 미화 기준 추론당 예상 비용(`CostPerInference`), 엔드포인트로 전송되는 분당 예상 최대 `InvokeEndpoint` 요청 수(`MaxInvocations`), 모델이 SageMaker AI에 응답하는 데 걸린 시간 간격(마이크로초)인 모델 지연 시간(`ModelLatency`)에 대한 정보가 포함됩니다. 모델 지연 시간에는 요청을 전송하고 모델의 컨테이너에서 응답을 가져오는 데 걸리는 로컬 통신 시간과 컨테이너에서 추론을 완료하는 데 걸리는 시간도 포함됩니다.

다음 예제에서는 서버리스 추론 권장 사항을 반환하도록 구성된 추론 권장 작업에 대한 응답의 `InferenceRecommendations` 일부를 볼 수 있습니다.

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "value",
            "InitialInstanceCount": value,
            "InstanceType": "value",
            "VariantName": "value",
            "ServerlessConfig": {
                "MaxConcurrency": value,
                "MemorySizeInMb": value
            }
         },
         "InvocationEndTime": value,
         "InvocationStartTime": value,
         "Metrics": { 
            "CostPerHour": value,
            "CostPerInference": value,
            "CpuUtilization": value,
            "MaxInvocations": value,
            "MemoryUtilization": value,
            "ModelLatency": value,
            "ModelSetupTime": value
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "value"
         },
         "RecommendationId": "value"
      }
   ]
```

서버리스 추론에 대한 권장 사항을 실시간 추론 결과와 비슷하게 해석할 수 있습니다. 단, `ServerlessConfig`의 경우에는 서버리스 엔드포인트에 대해 반환된 지표를 지정된 `MemorySizeInMB` 및 `MaxConcurrency = 1`와 함께 알려줍니다. 엔드포인트에서 가능한 처리량을 늘리려면 `MaxConcurrency` 값을 선형으로 늘립니다. 예를 들어, 추론 권장 사항에서 `MaxInvocations`이(가) `1000`(으)로 표시되는 경우, `MaxConcurrency`을(를) `2`(으)로 늘리면 2000 `MaxInvocations`을(를) 지원하게 됩니다. 참고로 이는 특정 시점까지만 적용되며, 모델과 코드에 따라 달라질 수 있습니다. 서버리스 권장 사항은 서버리스 엔드포인트에서 컴퓨터 리소스를 실행하는 데 걸리는 시간(마이크로초)을 측정하는 지표 `ModelSetupTime`도 측정합니다. 서버리스 엔드포인트 설정에 대한 자세한 정보는 [서버리스 추론 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html)에서 확인하세요.

------
#### [ Amazon SageMaker Studio Classic ]

추론 권장 사항은 Studio Classic의 새 **추론 권장 사항(Inference recommendations)** 탭에 채워집니다. 결과가 표시되려면 최대 45분이 걸릴 수 있습니다. 이 탭에는 **결과(Results)**와 **세부정보(Details)** 열이 포함됩니다.

**세부정보(Details)** 열에는 추론 권장 사항 이름, 작업 생성 시간(**생성 시간(Creation time)**) 등과 같은 추론 권장 사항 작업에 대한 정보가 있습니다. 또한 분당 발생한 최대 간접 호출 수 및 사용된 Amazon 리소스 이름에 대한 정보와 같은 **설정(Settings)** 정보도 있습니다.

**결과** 열에는 배포 중요도에 따라 결과가 표시되는 순서를 조정할 수 있는 **배포 목표** 및 **SageMaker AI 권장 사항** 창이 있습니다. 세 가지 드롭다운 메뉴를 사용하여 **비용(Cost)**, **지연 시간(Latency)**, **처리량(Throughput)**의 중요도를 사용 사례에 맞게 설정할 수 있습니다. 개별 목표(비용, 지연 시간, 처리량)의 중요도를 **최저(Lowest Importance)**, **낮음(Low Importance)**, **보통(Moderate importance)**, **높음(High importance)**, **최고(Highest importance)**로 설정할 수 있습니다.

사용자가 선택한 개별 목표의 중요도에 따라 Inference Recommender는 패널 오른쪽 **SageMaker 권장 사항(SageMaker recommendation)** 필드에 시간당 예상 비용 및 추론 요청과 함께 상위 권장 사항을 표시합니다. 또한 예상 모델 지연 시간, 최대 간접 호출 수, 인스턴스 수에 대한 정보도 표시합니다. 서버리스 권장 사항의 경우 최대 동시성 및 엔드포인트 메모리 크기에 대한 이상적인 값을 확인할 수 있습니다.

표시된 상위 권장 사항 외에 Inference Recommender가 **전체 실행(All runs)** 섹션에서 테스트한 모든 인스턴스에 대한 동일한 정보를 볼 수 있습니다.

------
#### [ SageMaker AI console ]

SageMaker AI 콘솔에서 인스턴스 권장 작업을 확인하는 방법은 다음과 같습니다.

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔로 이동합니다.

1. 왼쪽 탐색 창에서 **추론(Inference)**을 선택한 다음 **Inference Recommender**를 선택합니다.

1. **Inference Recommender 작업(Inference recommender jobs)** 페이지에서 추론 권장 작업 이름을 선택합니다.

작업 세부정보 페이지에서 다음 스크린샷과 같이 SageMaker AI가 모델에 권장하는 인스턴스 유형인 **추론 권장 사항**을 볼 수 있습니다.

![\[SageMaker AI 콘솔의 작업 세부정보 페이지에 있는 추론 권장 사항 목록의 스크린샷.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/inf-rec-instant-recs.png)


이 섹션에서는 **모델 지연 시간(Model latency)**, **시간당 비용(Cost per hour)**, **추론당 비용(Cost per inference)**, **분당 간접 호출 수(Invocations per minute)**와 같은 다양한 요인을 기준으로 인스턴스 유형을 비교할 수 있습니다.

이 페이지에서 작업에 지정한 구성을 볼 수도 있습니다. **모니터(Monitor)** 섹션에서 인스턴스 유형별로 기록된 Amazon CloudWatch 지표를 볼 수 있습니다. 이러한 지표 해석에 대한 자세한 내용은 [결과 해석](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-interpret-results.html)에서 확인하세요.

------

권장 작업 결과 해석 방법에 대한 자세한 정보는 [권장 결과](inference-recommender-interpret-results.md)에서 확인하세요.

# 기존 엔드포인트에 대한 추론 권장 사항 가져오기
<a name="inference-recommender-existing-endpoint"></a>

추론 권장 작업은 권장 인스턴스 유형과 기존 엔드포인트에 대해 일련의 부하 테스트를 실행합니다. 추론 권장 작업은 모델 버전 등록 시 입력한 샘플 데이터를 사용한 부하 테스트를 기반으로 하는 성능 지표를 사용합니다.

기존 SageMaker AI 추론 엔드포인트을 벤치마킹하고 추론 권장 사항을 가져오면 엔드포인트 성능 개선에 도움이 될 수 있습니다. 기존 SageMaker AI 추론 엔드포인트에 대한 권장 사항을 가져오는 절차는 엔드포인트 없이 [추론 권장 사항을 가져오는](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-instance-recommendation.html) 절차와 유사합니다. 기존 엔드포인트를 벤치마킹할 때는 주의해야 할 몇 가지 기능 제외 사항이 있습니다.
+ Inference Recommender 작업당 하나의 기존 엔드포인트만 사용할 수 있습니다.
+ 엔드포인트에는 하나의 변형만 있을 수 있습니다.
+ 오토 스케일링을 지원하는 엔드포인트는 사용할 수 없습니다.
+ 이 기능은 [실시간 추론](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) 시에만 지원됩니다.
+ 이 기능은 [실시간 다중 모델 엔드포인트](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html)를 지원하지 않습니다.

**주의**  
실시간 트래픽을 처리하는 프로덕션 엔드포인트에서는 Inference Recommender 작업을 실행하지 말 것을 강력히 권고합니다. 벤치마킹 중에 발생하는 합성 부하는 프로덕션 엔드포인트에 악영향을 주어 제한 현상을 일으키거나 부정확한 벤치마크 결과를 초래할 수 있습니다. 비교 목적으로 비프로덕션 또는 개발자 엔드포인트를 사용할 것을 권장합니다.

다음 섹션에서는 AWS Amazon SageMaker Inference Recommender를 사용하여 SDK for Python(Boto3) 및를 사용하는 모델 유형에 따라 기존 엔드포인트에 대한 추론 권장 사항을 생성하는 방법을 보여줍니다 AWS CLI.

**참고**  
Inference Recommender 권장 작업을 생성하기 전에 [Amazon SageMaker 추론 추천자를 사용하기 위한 사전 조건](inference-recommender-prerequisites.md) 충족 여부를 확인합니다.

## 사전 조건
<a name="inference-recommender-existing-endpoint-prerequisites"></a>

기존의 SageMaker AI 추론 엔드포인트가 없는 경우, 엔드포인트 없이 [추론 권장 사항을 가져오거나](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-instance-recommendation.html) [엔드포인트 생성 및 모델 배포](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-deployment.html) 지침에 따라 실시간 추론 엔드포인트를 생성할 수 있습니다.

## 기존 엔드포인트에 대한 추론 권장 사항 생성하기
<a name="inference-recommender-existing-endpoint-create"></a>

 AWS SDK for Python (Boto3)또는를 사용하여 프로그래밍 방식으로 추론 권장 사항을 생성합니다 AWS CLI. 모델 레지스트리에 모델을 등록할 때 추론 권장 사항의 작업 이름, 기존 SageMaker AI 추론 엔드포인트의 이름, AWS IAM 역할 ARN, 입력 구성 및 모델 패키지 ARN을 지정합니다.

------
#### [ AWS SDK for Python (Boto3) ]

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html) API로 추론 권장 작업을 가져옵니다. 추론 권장 작업 시 `JobType` 필드를 `'Default'`(으)로 설정합니다. 또한 다음을 입력합니다.
+ `JobName` 필드에 대한 Inference Recommender 권장 작업 이름을 입력합니다. Inference Recommender 작업 이름은 AWS 리전 및 계정 AWS 내에서 고유해야 합니다.
+ Inference Recommender가 사용자를 대신하여 작업을 수행할 수 있게 지원하는 IAM 역할의 Amazon 리소스 이름(ARN). `RoleArn` 필드에 정의합니다.
+ 모델 레지스트리에 모델을 등록할 때 생성한 버전 지정 모델 패키지의 ARN. `ModelPackageVersionArn` 시 `InputConfig` 필드에 정의합니다.
+ Inference Recommender의 `Endpoints`에서 `InputConfig` 필드에 벤치마킹하고자 하는 기존 SageMaker AI 추론 엔드포인트의 이름을 입력합니다.

 AWS SDK for Python (Boto3) 패키지를 가져오고 클라이언트 클래스를 사용하여 SageMaker AI 클라이언트 객체를 생성합니다. **필수 조건(Prerequisites)** 섹션의 단계를 따랐다면 모델 패키지 그룹 ARN이 `model_package_arn` 변수에 저장됩니다.

```
# Create a low-level SageMaker service client.
import boto3
aws_region = '<region>'
sagemaker_client = boto3.client('sagemaker', region_name=aws_region) 

# Provide your model package ARN that was created when you registered your 
# model with Model Registry 
model_package_arn = '<model-package-arn>'

# Provide a unique job name for SageMaker Inference Recommender job
job_name = '<job-name>'

# Inference Recommender job type. Set to Default to get an initial recommendation
job_type = 'Default'

# Provide an IAM Role that gives SageMaker Inference Recommender permission to 
# access AWS services
role_arn = '<arn:aws:iam::<account>:role/*>'
                                    
# Provide endpoint name for your endpoint that want to benchmark in Inference Recommender
endpoint_name = '<existing-endpoint-name>'

sagemaker_client.create_inference_recommendations_job(
    JobName = job_name,
    JobType = job_type,
    RoleArn = role_arn,
    InputConfig = {
        'ModelPackageVersionArn': model_package_arn,
        'Endpoints': [{'EndpointName': endpoint_name}]
    }
)
```

[Amazon SageMaker API 참조 안내서](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html)에서 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html)에 전달할 수 있는 선택 및 필수 인수 전체 목록을 확인하세요.

------
#### [ AWS CLI ]

`create-inference-recommendations-job` API로 인스턴스 엔드포인트 권장 사항을 가져옵니다. 추론 엔드포인트 권장 작업 시 `job-type` 필드를 `'Default'`(으)로 설정합니다. 또한 다음을 입력합니다.
+ `job-name` 필드에 대한 Inference Recommender 권장 작업 이름을 입력합니다. Inference Recommender 작업 이름은 AWS 리전 및 계정 AWS 내에서 고유해야 합니다.
+ Amazon SageMaker Inference Recommender가 사용자를 대신하여 작업을 수행할 수 있게 지원하는 IAM 역할의 Amazon 리소스 이름(ARN). `role-arn` 필드에 정의합니다.
+ 모델 레지스트리에 모델을 등록할 때 생성한 버전 지정 모델 패키지의 ARN. `ModelPackageVersionArn` 시 `input-config` 필드에 정의합니다.
+ Inference Recommender의 `Endpoints`에서 `input-config` 필드에 벤치마킹하고자 하는 기존 SageMaker AI 추론 엔드포인트의 이름을 입력합니다.

```
aws sagemaker create-inference-recommendations-job 
    --region <region>\
    --job-name <job_name>\
    --job-type Default\
    --role-arn arn:aws:iam::<account:role/*>\
    --input-config "{
        \"ModelPackageVersionArn\": \"arn:aws:sagemaker:<region:account:role/*>\",
        \"Endpoints\": [{\"EndpointName\": <endpoint_name>}]
        }"
```

------

## 추론 권장 작업 결과 확인하기
<a name="inference-recommender-existing-endpoint-results"></a>

표준 추론 권장 작업과 동일한 절차로 프로그래밍 방식으로 추론 권장 작업 결과를 수집할 수 있습니다. 자세한 내용은 [추론 권장 작업 결과 확인하기](instance-recommendation-results.md) 섹션을 참조하세요.

기존 엔드포인트에 대한 추론 권장 작업 결과를 가져오면 다음과 비슷한 JSON 응답을 받게 됩니다.

```
{
    "JobName": "job-name",
    "JobType": "Default",
    "JobArn": "arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id",
    "RoleArn": "iam-role-arn",
    "Status": "COMPLETED",
    "CreationTime": 1664922919.2,
    "LastModifiedTime": 1664924208.291,
    "InputConfig": {
        "ModelPackageVersionArn": "arn:aws:sagemaker:region:account-id:model-package/resource-id",
        "Endpoints": [
            {
                "EndpointName": "endpoint-name"
            }
        ]
    },
    "InferenceRecommendations": [
        {
            "Metrics": {
                "CostPerHour": 0.7360000014305115,
                "CostPerInference": 7.456940238625975e-06,
                "MaxInvocations": 1645,
                "ModelLatency": 171
            },
            "EndpointConfiguration": {
                "EndpointName": "sm-endpoint-name",
                "VariantName": "variant-name",
                "InstanceType": "ml.g4dn.xlarge",
                "InitialInstanceCount": 1
            },
            "ModelConfiguration": {
                "EnvironmentParameters": [
                    {
                        "Key": "TS_DEFAULT_WORKERS_PER_MODEL",
                        "ValueType": "string",
                        "Value": "4"
                    }
                ]
            }
        }
    ],
    "EndpointPerformances": [
        {
            "Metrics": {
                "MaxInvocations": 184,
                "ModelLatency": 1312
            },
            "EndpointConfiguration": {
                "EndpointName": "endpoint-name"
            }
        }
    ]
}
```

처음 몇 줄에는 추론 권장 작업 자체에 대한 정보가 있습니다. 여기에는 작업 이름, 역할 ARN, 생성 및 최근 수정 시간이 포함됩니다.

`InferenceRecommendations` 사전에는 Inference Recommender 추론 권장 사항 목록이 포함됩니다.

`EndpointConfiguration` 중첩 사전에는 권장 작업 중에 사용된 엔드포인트 및 변형 이름(배포된 AWS 기계 학습 모델`InstanceType`)과 함께 인스턴스 유형() 권장 사항이 포함되어 있습니다.

`Metrics` 중첩 사전에는 실시간 엔드포인트의 미화 기준 시간당 예상 비용(`CostPerHour`), 실시간 엔드포인트의 미화 기준 추론당 예상 비용(`CostPerInference`), 엔드포인트로 전송되는 분당 예상 최대 `InvokeEndpoint` 요청 수(`MaxInvocations`), 모델이 SageMaker AI에 응답하는 데 걸린 시간 간격(마이크로초)인 모델 지연 시간(`ModelLatency`)에 대한 정보가 포함됩니다. 모델 지연 시간에는 요청을 전송하고 모델의 컨테이너에서 응답을 가져오는 데 걸리는 로컬 통신 시간과 컨테이너에서 추론을 완료하는 데 걸리는 시간도 포함됩니다.

`EndpointPerformances` 중첩 사전에는 권장 작업이 실행된 기존 엔드포인트의 이름(`EndpointName`)과 엔드포인트 성능 지표(`MaxInvocations` 및 `ModelLatency`)가 포함됩니다.

# 추론 권장 사항 중단하기
<a name="instance-recommendation-stop"></a>

실수로 작업을 시작했거나 더 이상 작업을 실행할 필요가 없는 경우 현재 실행 중인 작업을 중지할 수 있습니다. `StopInferenceRecommendationsJob` API 또는 Studio Classic으로 프로그래밍 방식으로 Inference Recommender 추론 권장 작업을 중단합니다.

------
#### [ AWS SDK for Python (Boto3) ]

`JobName` 필드에 추론 권장 작업 이름을 지정합니다.

```
sagemaker_client.stop_inference_recommendations_job(
                                    JobName='<INSERT>'
                                    )
```

------
#### [ AWS CLI ]

`job-name` 플래그에 추론 권장 작업 이름을 지정합니다.

```
aws sagemaker stop-inference-recommendations-job --job-name <job-name>
```

------
#### [ Amazon SageMaker Studio Classic ]

추론 권장 사항을 개시한 탭을 닫아 Inference Recommender 추론 권장 사항을 중단합니다.

------
#### [ SageMaker AI console ]

SageMaker AI 콘솔을 통해 인스턴스 권장 작업을 중단하는 방법은 다음과 같습니다.



1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔로 이동합니다.

1. 왼쪽 탐색 창에서 **추론(Inference)**을 선택한 다음 **Inference Recommender**를 선택합니다.

1. **Inference Recommender 작업(Inference recommender jobs)** 페이지에서 인스턴스 권장 작업을 선택합니다.

1. **작업 중단(Stop job)**을 선택합니다.

1. 대화 상자가 열리면 **확인(Confirm)**을 선택합니다.

작업 중단 후 작업 **상태(Status)** **중단 중(Stopping)**으로 변경되어야 합니다.

------

# Neo로 컴파일된 권장 사항
<a name="inference-recommender-neo-compilation"></a>

Inference Recommender에서는 Neo로 모델을 컴파일하고 컴파일된 모델에 대한 엔드포인트 권장 사항을 가져올 수 있습니다. [SageMaker Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html)는 대상 하드웨어 플랫폼(즉, 특정 인스턴스 유형 또는 환경)에 맞게 모델을 최적화하는 서비스입니다. Neo로 모델을 최적화하면 호스팅된 모델의 성능이 향상될 수 있습니다.

Neo 지원 프레임워크 및 컨테이너인 경우, Inference Recommender는 Neo에 최적화된 권장 사항을 자동으로 제안합니다. Neo 컴파일 대상이 되려면 입력이 다음 필수 조건을 충족해야 합니다.
+ SageMaker AI 소유 [DLC](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/what-is-dlc.html) 또는 XGBoost 컨테이너 사용.
+ Neo에서 지원하는 프레임워크 버전 사용. Neo에서 지원하는 프레임워크 버전은 [클라우드 인스턴스](neo-supported-cloud.md#neo-supported-cloud-instances)에 있는 SageMaker Neo 설명서에서 확인하세요.
+ Neo를 사용하려면 모델에 맞는 정확한 입력 데이터 형상을 입력해야 합니다. 이 데이터 형상은 모델 패키지를 생성할 때 `[DataInputConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelInput.html#sagemaker-Type-ModelInput-DataInputConfig)`(`[InferenceSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-InferenceSpecification)` 내)(으)로 지정할 수 있습니다. 프레임워크별 정확한 데이터 형상에 대한 자세한 정보는 SageMaker Neo 설명서에 있는 [컴파일용 모델 준비](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-compilation-preparing-model.html)에서 확인하세요.

  다음 예제에서는 `data_input_configuration`이 사전 형식의 데이터 형상(예: `{'input':[1,1024,1024,3]}`)을 포함하는 변수인 `InferenceSpecification`에서 `DataInputConfig` 필드를 지정하는 방법을 볼 수 있습니다.

  ```
  "InferenceSpecification": {
          "Containers": [
              {
                  "Image": dlc_uri,
                  "Framework": framework.upper(),
                  "FrameworkVersion": framework_version,
                  "NearestModelName": model_name,
                  "ModelInput": {"DataInputConfig": data_input_configuration},
              }
          ],
          "SupportedContentTypes": input_mime_types,  # required, must be non-null
          "SupportedResponseMIMETypes": [],
          "SupportedRealtimeInferenceInstanceTypes": supported_realtime_inference_types,  # optional
      }
  ```

요청에서 이러한 조건이 충족되면 Inference Recommender는 컴파일된 버전과 컴파일되지 않은 버전의 모델 모두에 대해 시나리오를 실행하여 선택할 수 있는 여러 권장 조합을 제공합니다. 동일한 추론 권장 사항의 컴파일된 버전과 컴파일되지 않은 버전의 구성을 비교하여 사용 사례에 가장 적합한 버전을 정할 수 있습니다. 권장 사항은 추론당 비용을 기준으로 순위가 매겨집니다.

Neo 컴파일 권장 사항을 가져오려면 입력이 상기 요구 사항을 충족하는지 확인하는 것 외에 추가 구성을 수행할 필요가 없습니다. 입력이 요구 사항을 충족하는 경우 Inference Recommender는 모델에서 Neo 컴파일을 자동으로 실행하며 Neo 권장 사항이 포함된 응답을 받습니다.

Neo 컴파일 중에 오류가 발생할 경우 [Neo 컴파일 오류 문제 해결](neo-troubleshooting-compilation.md)을(를) 참조하세요.

다음 표는 컴파일된 모델에 대한 권장 사항이 포함된 Inference Recommender 작업에서 가져올 수 있는 응답의 예시입니다. `InferenceSpecificationName` 필드가 `None`라면 권장 사항은 컴파일되지 않은 모델입니다. **InferenceSpecificationName** 필드 값이 `neo-00011122-2333-4445-5566-677788899900`인 마지막 행은 이며, Neo로 컴파일된 모델입니다. 필드 값은 모델을 컴파일하고 최적화하는 데 사용되는 Neo 작업의 이름입니다.


| EndpointName | InstanceType | InitialInstanceCount | EnvironmentParameters | CostPerHour | CostPerInference | MaxInvocations | ModelLatency | InferenceSpecificationName | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| sm-epc-example-000111222 | ml.c5.9xlarge | 1 | [] | 1.836 | 9.15E-07 | 33456 | 7 | 없음 | 
| sm-epc-example-111222333 | ml.c5.2xlarge | 1 | [] | 0.408 | 2.11E-07 | 32211 | 21 | 없음 | 
| sm-epc-example-222333444 | ml.c5.xlarge | 1 | [] | 0.204 | 1.86E-07 | 18276 | 92 | 없음 | 
| sm-epc-example-333444555 | ml.c5.xlarge | 1 | [] | 0.204 | 1.60E-07 | 21286 | 42 | neo-00011122-2333-4445-5566-677788899900 | 

## 시작하기
<a name="inference-recommender-neo-compilation-get-started"></a>

NEO에 최적화된 권장 사항을 포함하는 Inference Recommender 작업을 생성하는 일반적인 단계는 다음과 같습니다.
+ 컴파일용 ML 모델을 준비합니다. 자세한 정보는 Neo 설명서에 있는 [컴파일용 모델 준비](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-compilation-preparing-model.html)에서 확인하세요.
+ 모델 아카이브(`.tar.gz` 파일)에 모델을 패키징합니다.
+ 샘플 페이로드 아카이브를 생성합니다.
+ SageMaker 모델 레지스트리에 모델을 등록합니다.
+ Inference Recommender 작업을 생성합니다.
+ Inference Recommender 작업 결과를 보고 구성을 선택합니다.
+ 컴파일 실패 시 디버그합니다. 자세한 정보는 [Neo 컴파일 오류 해결](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html)에서 확인하세요.

이전 워크플로를 보여주는 예제와 XGBoost를 사용하여 Neo에 최적화된 권장 사항을 가져오는 방법을 보여주는 예제는 다음 [예제 노트북](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/xgboost/xgboost-inference-recommender.ipynb)에서 확인하세요. 이전 TensorFlow를 사용하여 Neo에 최적화된 권장 사항을 가져오는 방법을 보여주는 예제는 다음 [예제 노트북](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/inference-recommender.ipynb)에서 확인하세요.

# 권장 결과
<a name="inference-recommender-interpret-results"></a>

개별 Inference Recommender 작업 결과에는 컨테이너의 지연 시간 및 처리량 개선을 위해 조정된 환경 변수 파라미터인 `InstanceType`, `InitialInstanceCount`, `EnvironmentParameters`이(가) 포함됩니다. 결과에는 `MaxInvocations`, `ModelLatency`, `CostPerHour`, `CostPerInference`, `CpuUtilization`, `MemoryUtilization` 같은 성능 및 비용 지표도 포함됩니다.

아래 표에 이 지표에 대한 설명이 있습니다. 이 지표로 검색 범위를 좁혀 사용 사례에 가장 적합한 엔드포인트 구성을 찾을 수 있습니다. 예를 들어, 처리량에 중점을 둔 전반적인 가격 대비 성능이 동기라면 `CostPerInference`에 집중해야 합니다.


| 지표 | 설명 | 사용 사례: | 
| --- | --- | --- | 
|  `ModelLatency`  |  SageMaker AI에서 본 모델 응답 시간 간격. 이 간격에는 요청을 전송하고 모델의 컨테이너에서 응답을 가져오는 데 걸리는 로컬 통신 시간과 컨테이너에서 추론을 완료하는 데 걸리는 시간도 포함됩니다. 단위: 밀리초  | 광고 게재, 의료 진단 등 지연 시간에 민감한 워크로드 | 
|  `MaximumInvocations`  |  1분 간 모델 엔드포인트로 전송된 최대 `InvokeEndpoint` 요청 수. 단위: 없음  | 비디오 처리, 일괄 추론 등 처리량 중심의 워크로드 | 
|  `CostPerHour`  |  실시간 엔드포인트의 시간당 예상 비용. 단위: 미국 달러  | 지연 기한이 없는 비용에 민감한 워크로드 | 
|  `CostPerInference`  |  실시간 엔드포인트의 추론 호출당 예상 비용. 단위: 미국 달러  | 처리량을 중심으로 전반적인 가격 대비 성능을 극대화합니다. | 
|  `CpuUtilization`  |  엔드포인트 인스턴스의 분당 최대 간접 호출 시 예상 CPU 사용률. 단위: 백분율  | 인스턴스의 코어 CPU 사용률을 파악하여 벤치마킹 중에 인스턴스 상태를 파악합니다. | 
|  `MemoryUtilization`  |  엔드포인트 인스턴스의 분당 최대 간접 호출 시 예상 메모리 사용률. 단위: 백분율  | 인스턴스의 코어 메모리 사용률을 파악하여 벤치마킹 중에 인스턴스 상태를 파악합니다. | 

경우에 따라 기타 [SageMaker AI 엔드포인트 간접 호출 지표](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-endpoint-invocation)(예: `CPUUtilization`)의 탐색이 필요할 수 있습니다. 모든 Inference Recommender 작업 결과에는 부하 테스트 중에 구동된 엔드포인트의 이름이 포함됩니다. CloudWatch를 사용하면 이러한 엔드포인트가 삭제된 후에도 로그를 검토할 수 있습니다.

다음 이미지는 권장 사항 결과에서 단일 엔드포인트에 대해 검토할 수 있는 CloudWatch 지표 및 차트의 예입니다. 이 권장 사항 결과는 기본 작업에서 도출된 것입니다. 권장 사항 결과의 스칼라 값을 해석하는 방법은 간접 호출 그래프가 처음으로 평준화되기 시작하는 시점을 기준으로 계산하는 것입니다. 예를 들어, 보고된 `ModelLatency` 값은 `03:00:31` 부근에서 정체기가 시작됩니다.

![\[CloudWatch 지표에 대한 차트입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/inference-recommender-cw-metrics.png)


위 차트에서 사용된 CloudWatch 지표에 대한 전체 설명은 [SageMaker AI 엔드포인트 간접 호출 지표](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-endpoint-invocation)에서 확인하세요.

`ClientInvocations`, `NumberOfUsers` 등 Inference Recommender에서 게시한 성능 지표는 `/aws/sagemaker/InferenceRecommendationsJobs` 네임스페이스에서도 볼 수 있습니다. Inference Recommender에서 게시한 지표와 설명 전체 목록은 [SageMaker 추론 추천 작업 지표](monitoring-cloudwatch.md#cloudwatch-metrics-inference-recommender)에서 확인하세요.

 AWS SDK for Python(Boto3)을 사용하여 엔드포인트에 대한 [ CloudWatch 지표를 탐색하는 방법의 예는 amazon-sagemaker-examples Github 리포지토리의 Amazon SageMaker Inference Recommender ](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/tensorflow-cloudwatch/tf-cloudwatch-inference-recommender.ipynb)- CloudWatch Metrics Jupyter 노트북을 참조하세요. [amazon-sagemaker-examples](https://github.com/aws/amazon-sagemaker-examples) 

# 오토 스케일링 정책 권장 사항 가져오기
<a name="inference-recommender-autoscaling"></a>

Amazon SageMaker Inference Recommender로 예상 트래픽 패턴에 따라 SageMaker AI 엔드포인트의 오토 스케일링 정책에 대한 권장 사항을 가져올 수 있습니다. 추론 추천 작업을 이미 완료한 경우, 작업 세부정보를 입력하여 엔드포인트에 적용할 수 있는 오토 스케일링 정책에 대한 권장 사항을 가져올 수 있습니다.

Inference Recommender는 각 지표에 대해 서로 다른 값을 벤치마킹하여 엔드포인트에 적합한 오토 스케일링 구성을 결정합니다. 오토 스케일링 권장 사항은 추론 권장 작업에 정의된 각 지표에 대해 권장되는 오토 스케일링 정책을 반환합니다. [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) API로 정책을 저장하고 엔드포인트에 적용할 수 있습니다.

시작하려면 다음 필수 조건을 확인하세요.

## 사전 조건
<a name="inference-recommender-autoscaling-prereqs"></a>

시작하기 전에 추론 권장 작업을 정상적으로 완료해야 합니다. 다음 섹션에서는 추론 권장 사항 ID 또는 추론 권장 작업 중에 벤치마크된 SageMaker AI 엔드포인트의 이름을 입력할 수 있습니다.

권장 작업 ID나 엔드포인트 이름을 검색하려면, SageMaker AI 콘솔에서 추론 권장 작업 세부정보를 확인하거나 `RecommendationId` 또는 `EndpointName` 필드([DescribeInferenceRecommendationsJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeInferenceRecommendationsJob.html) API에서 반환)를 사용하면 됩니다.

## 오토 스케일링 구성 권장 사항 생성하기
<a name="inference-recommender-autoscaling-create"></a>

오토 스케일링 권장 정책을 생성하려면 AWS SDK for Python (Boto3)을(를) 사용하면 됩니다.

다음 예제에서는 [GetScalingConfigurationRecommendation](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_GetScalingConfigurationRecommendation.html) API 필드를 볼 수 있습니다. 다음 필드를 사용하여 API를 호출합니다.
+ `InferenceRecommendationsJobName`- 추론 권장 작업의 이름을 입력합니다.
+ `RecommendationId`- 권장 작업에서 추론 권장 사항 ID를 입력합니다. `EndpointName` 필드를 지정한 경우 선택 사항입니다.
+ `EndpointName`- 추론 권장 작업 중에 벤치마킹된 엔드포인트의 이름을 입력합니다. `RecommendationId` 필드를 지정한 경우 선택 사항입니다.
+ `TargetCpuUtilizationPerCore`- (선택 사항) 오토 스케일링 전 엔드포인트 인스턴스에서 사용하려는 사용률을 백분율 값으로 입력합니다. 이 필드를 지정하지 않으면 기본값 50%가 적용됩니다.
+ `ScalingPolicyObjective`- (선택 사항) 예상 트래픽 패턴을 지정하는 객체.
  + `MinInvocationsPerMinute`- (선택 사항) 엔드포인트에 대한 분당 최소 예상 요청 수.
  + `MaxInvocationsPerMinute`- (선택 사항) 엔드포인트에 대한 분당 최대 예상 요청 수.

```
{
    "InferenceRecommendationsJobName": "string", // Required
    "RecommendationId": "string", // Optional, provide one of RecommendationId or EndpointName
    "EndpointName": "string", // Optional, provide one of RecommendationId or EndpointName
    "TargetCpuUtilizationPerCore": number, // Optional
    "ScalingPolicyObjective": { // Optional
        "MinInvocationsPerMinute": number,
        "MaxInvocationsPerMinute": number
    }
}
```

요청 제출 후, 개별 지표에 정의된 오토 스케일링 정책이 포함된 응답을 수신하게 됩니다. 응답 해석에 대한 정보는 다음 섹션에서 확인하세요.

## 오토 스케일링 구성 권장 사항 결과를 확인하세요.
<a name="inference-recommender-autoscaling-review"></a>

다음 예제에서는 [GetScalingConfigurationRecommendation](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_GetScalingConfigurationRecommendation.html) API 응답을 볼 수 있습니다.

```
{
    "InferenceRecommendationsJobName": "string", 
    "RecommendationId": "string", // One of RecommendationId or EndpointName is shown
    "EndpointName": "string", 
    "TargetUtilizationPercentage": Integer,
    "ScalingPolicyObjective": { 
        "MinInvocationsPerMinute": Integer, 
        "MaxInvocationsPerMinute": Integer
    },
    "Metric": {
        "ModelLatency": Integer,
        "InvocationsPerInstance": Integer
    },
    "DynamicScalingConfiguration": {
        "MinCapacity": number,
        "MaxCapacity": number, 
        "ScaleInCooldown": number,
        "ScaleOutCooldown": number,
        "ScalingPolicies": [
            {
                "TargetTracking": {
                    "MetricSpecification": {
                        "Predefined" {
                            "PredefinedMetricType": "string"
                         },
                        "Customized": {
                            "MetricName": "string",
                            "Namespace": "string",
                            "Statistic": "string"
                         }
                    },
                    "TargetValue": Double
                } 
            }
        ]
    }
}
```

`InferenceRecommendationsJobName`, `RecommendationID` 또는 `EndpointName`, `TargetCpuUtilizationPerCore` 및 `ScalingPolicyObjective` 객체 필드가 초기 요청에서 복사됩니다.

`Metric` 객체에는 인스턴스 사용률이 `TargetCpuUtilizationPerCore` 값과 같을 때 개별 지표에 대한 값 계산과 함께 추론 권장 작업에서 벤치마킹된 지표가 나열됩니다. 이는 권장 오토 스케일링 정책에 따라 엔드포인트의 스케일 인 및 스케일 아웃 시 성능 지표를 예측하는 데 유용합니다. 예를 들어, 추론 권장 작업에서 인스턴스 사용률이 50% 이고 `InvocationsPerInstance` 값이 원래 `4` 값이었다고 가정해 봅시다. 오토 스케일링 권장 사항 요청에서 `TargetCpuUtilizationPerCore` 값을 100%로 지정할 경우, 응답에서 반환되는 `InvocationsPerInstance` 지표 값은 `2`이 되는데, 그 이유는 인스턴스 사용률이 두 배 할당될 것으로 예상했기 때문입니다.

`DynamicScalingConfiguration` 객체는 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html#autoscaling-PutScalingPolicy-request-TargetTrackingScalingPolicyConfiguration)에서 지정해야 하는 값을 반환합니다([PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) API 호출 시). 여기에는 권장되는 최소 및 최대 용량 값, 권장되는 스케일 인 및 스케일 아웃 휴지 시간, `ScalingPolicies` 객체(개별 지표에 지정해야 하는 권장되는 `TargetValue` 포함)이 포함됩니다.

# 사용자 지정 부하 테스트 실행하기
<a name="inference-recommender-load-test"></a>

Amazon SageMaker Inference Recommender 부하 테스트는 지연 시간 및 처리량, 사용자 지정 트래픽 패턴, 선택한 서버리스 엔드포인트 또는 실시간 인스턴스(최대 10개)에 대한 프로덕션 요구 사항을 기반으로 광범위한 벤치마킹을 수행합니다.

다음 섹션에서는 AWS SDK for Python (Boto3) 및를 사용하여 프로그래밍 방식으로 또는 Amazon SageMaker Studio Classic 또는 SageMaker AI 콘솔을 사용하여 대화형으로 로드 테스트를 생성 AWS CLI, 설명 및 중지하는 방법을 보여줍니다.

## 부하 테스트 작업 생성하기
<a name="load-test-create"></a>

를 사용하거나 AWS SDK for Python (Boto3)를 사용하거나 Studio Classic AWS CLI또는 SageMaker AI 콘솔을 사용하여 프로그래밍 방식으로 로드 테스트를 생성합니다. 추론 추천과 마찬가지로 모델 레지스트리에 모델을 등록할 때 로드 테스트의 작업 이름, AWS IAM 역할 ARN, 입력 구성 및 모델 패키지 ARN을 지정합니다. 부하 테스트를 실시하려면 트래픽 패턴과 중단 조건도 지정해야 합니다.

------
#### [ AWS SDK for Python (Boto3) ]

`CreateInferenceRecommendationsJob` API로 Inference Recommender 부하 테스트를 생성합니다. `Advanced`을(를) `JobType` 필드에 지정하고 다음을 입력합니다.
+ 부하 테스트 작업 이름(`JobName`). 작업 이름은 AWS 리전 및 AWS 계정 내에서 고유해야 합니다.
+ Inference Recommender가 사용자를 대신하여 작업을 수행할 수 있게 지원하는 IAM 역할의 Amazon 리소스 이름(ARN). `RoleArn` 필드에 정의합니다.
+ 엔드포인트 구성 사전(`InputConfig`)에서 다음을 지정합니다.
  + `TrafficPattern`에 단계별 또는 계단식 트래픽 패턴을 지정합니다. 단계별 트래픽 패턴으로 지정하면 지정한 속도로 1분마다 새 사용자가 생성됩니다. 계단식 트래픽 패턴으로 지정하면 지정한 속도로 일정한 시간 간격(또는 *단계*)마다 새 사용자가 생성됩니다. 다음 중 하나를 선택합니다.
    + `TrafficType`에서 `PHASES`를 지정합니다. 그런 다음 `Phases` 배열에 `InitialNumberOfUsers`(시작할 동시 사용자 수, 최소 1명\$1최소 3명), `SpawnRate`(부하 테스트 특정 단계에서 분당 생성되는 사용자 수, 최소 0명\$1최대 3명), `DurationInSeconds`(트래픽 단계 지속 시간, 최단 120초\$1최장 3,600초) 을(를) 지정합니다.
    + `TrafficType`에서 `STAIRS`를 지정합니다. 그런 다음 `Stairs` 배열에 `DurationInSeconds`(트래픽 단계 지속 시간, 최단 120초\$1최장 3,600초), `NumberOfSteps`(단계 중에 사용되는 간격 수), `UsersPerStep`(개별 간격 중에 추가되는 사용자 수)을(를) 지정합니다. 참고로 개별 단계의 길이는 `DurationInSeconds / NumberOfSteps`의 값입니다. 예를 들어, `DurationInSeconds`이(가) `600`이고 `5` 단계를 지정한 경우, 각 단계는 120초입니다.
**참고**  
사용자는 루프에서 실행되고 Inference Recommender의 일부로 엔드포인트에 대한 요청을 호출하는 시스템 생성 액터로 정의됩니다. `ml.c5.large` 인스턴스에서 실행되는 일반적인 XGBoost 컨테이너의 경우, 엔드포인트는 15\$120명의 사용자만으로 분당 30,000회 호출(500tps)에 도달할 수 있습니다.
  + `ResourceLimit`에 `MaxNumberOfTests`(Inference Recommender 작업에 대한 최대 벤치마킹 부하 테스트 수, 최소 1회\$1최대 10회) 및 `MaxParallelOfTests`(Inference Recommender에 대한 최대 병렬 벤치마킹 부하 테스트 수, 최소 1회\$1최대 10회)을(를) 지정합니다.
  + `EndpointConfigurations`에는 다음 중 한 가지를 지정할 수 있습니다.
    + `InstanceType` 필드에서는 부하 테스트를 실행하고자 하는 인스턴스 유형을 지정합니다.
    + `ServerlessConfig`에서는 서버리스 엔드포인트에 대한 `MaxConcurrency` 및 `MemorySizeInMB`의 이상적인 값을 지정합니다. 자세한 정보는 [서버리스 추론 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html)에서 확인하세요.
+ 중단 조건 사전(`StoppingConditions`)에서 맞는 조건이 있을 경우 Inference Recommender 작업이 중단됩니다. 이 예제에서는 다음 필드를 사전에서 지정합니다.
  + `MaxInvocations`에 엔드포인트에 대해 예상되는 분당 최대 요청 수를 최소 1에서 최대 30,000으로 지정합니다.
  + `ModelLatencyThresholds`에 `Percentile`(모델 지연 시간 백분위수 임계값) 및 `ValueInMilliseconds`(모델 지연 시간 백분위수 값(밀리초))을(를) 지정합니다.
  + (선택 사항) `FlatInvocations`에 TPS(분당 간접 호출 수) 속도가 일정해질 때 부하 테스트를 계속할지 여부를 지정할 수 있습니다. TPS 속도가 일정해지면 일반적으로 엔드포인트가 용량에 도달했음을 의미합니다. 단, 최대 용량 조건에서는 엔드포인트를 계속 모니터링하는 것이 좋습니다. 이 경우 부하 테스트를 계속하려면 이 값을 `Continue`로 지정합니다. 그렇지 않은 경우 기본값은 `Stop`입니다.

```
# Create a low-level SageMaker service client.
import boto3
aws_region=<INSERT>
sagemaker_client=boto3.client('sagemaker', region=aws_region) 
                
# Provide a name to your recommendation based on load testing
load_test_job_name="<INSERT>"

# Provide the name of the sagemaker instance type
instance_type="<INSERT>"

# Provide the IAM Role that gives SageMaker permission to access AWS services 
role_arn='arn:aws:iam::<account>:role/*'

# Provide your model package ARN that was created when you registered your 
# model with Model Registry
model_package_arn='arn:aws:sagemaker:<region>:<account>:role/*'

sagemaker_client.create_inference_recommendations_job(
                        JobName=load_test_job_name,
                        JobType="Advanced",
                        RoleArn=role_arn,
                        InputConfig={
                            'ModelPackageVersionArn': model_package_arn,
                            "JobDurationInSeconds": 7200,
                            'TrafficPattern' : {
                                # Replace PHASES with STAIRS to use the stairs traffic pattern
                                'TrafficType': 'PHASES',
                                'Phases': [
                                    {
                                        'InitialNumberOfUsers': 1,
                                        'SpawnRate': 1,
                                        'DurationInSeconds': 120
                                    },
                                    {
                                        'InitialNumberOfUsers': 1,
                                        'SpawnRate': 1,
                                        'DurationInSeconds': 120
                                    }
                                ]
                                # Uncomment this section and comment out the Phases object above to use the stairs traffic pattern
                                # 'Stairs' : {
                                #   'DurationInSeconds': 240,
                                #   'NumberOfSteps': 2,
                                #   'UsersPerStep': 2
                                # }
                            },
                            'ResourceLimit': {
                                        'MaxNumberOfTests': 10,
                                        'MaxParallelOfTests': 3
                                },
                            "EndpointConfigurations" : [{
                                        'InstanceType': 'ml.c5.xlarge'
                                    },
                                    {
                                        'InstanceType': 'ml.m5.xlarge'
                                    },
                                    {
                                        'InstanceType': 'ml.r5.xlarge'
                                    }]
                                    # Uncomment the ServerlessConfig and comment out the InstanceType field if you want recommendations for a serverless endpoint
                                    # "ServerlessConfig": {
                                    #     "MaxConcurrency": value, 
                                    #     "MemorySizeInMB": value 
                                    # }
                        },
                        StoppingConditions={
                            'MaxInvocations': 1000,
                            'ModelLatencyThresholds':[{
                                'Percentile': 'P95', 
                                'ValueInMilliseconds': 100
                            }],
                            # Change 'Stop' to 'Continue' to let the load test continue if invocations flatten 
                            'FlatInvocations': 'Stop'
                        }
                )
```

[Amazon SageMaker API 참조 안내서](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html)에서 `CreateInferenceRecommendationsJob`에 전달할 수 있는 선택 및 필수 인수 전체 목록을 확인하세요.

------
#### [ AWS CLI ]

`create-inference-recommendations-job` API로 Inference Recommender 부하 테스트를 생성합니다. `Advanced`을(를) `JobType` 필드에 지정하고 다음을 입력합니다.
+ 부하 테스트 작업 이름(`job-name`). 작업 이름은 AWS 리전 및 AWS 계정 내에서 고유해야 합니다.
+ Inference Recommender가 사용자를 대신하여 작업을 수행할 수 있게 지원하는 IAM 역할의 Amazon 리소스 이름(ARN). `role-arn` 필드에 정의합니다.
+ 엔드포인트 구성 사전(`input-config`)에서 다음을 지정합니다.
  + `TrafficPattern`에 단계별 또는 계단식 트래픽 패턴을 지정합니다. 단계별 트래픽 패턴으로 지정하면 지정한 속도로 1분마다 새 사용자가 생성됩니다. 계단식 트래픽 패턴으로 지정하면 지정한 속도로 일정한 시간 간격(또는 *단계*)마다 새 사용자가 생성됩니다. 다음 중 하나를 선택합니다.
    + `TrafficType`에서 `PHASES`를 지정합니다. 그런 다음 `Phases` 배열에 `InitialNumberOfUsers`(시작할 동시 사용자 수, 최소 1명\$1최소 3명), `SpawnRate`(부하 테스트 특정 단계에서 분당 생성되는 사용자 수, 최소 0명\$1최대 3명), `DurationInSeconds`(트래픽 단계 지속 시간, 최단 120초\$1최장 3,600초) 을(를) 지정합니다.
    + `TrafficType`에서 `STAIRS`를 지정합니다. 그런 다음 `Stairs` 배열에 `DurationInSeconds`(트래픽 단계 지속 시간, 최단 120초\$1최장 3,600초), `NumberOfSteps`(단계 중에 사용되는 간격 수), `UsersPerStep`(개별 간격 중에 추가되는 사용자 수)을(를) 지정합니다. 참고로 개별 단계의 길이는 `DurationInSeconds / NumberOfSteps`의 값입니다. 예를 들어, `DurationInSeconds`이(가) `600`이고 `5` 단계를 지정한 경우, 각 단계는 120초입니다.
**참고**  
사용자는 루프에서 실행되고 Inference Recommender의 일부로 엔드포인트에 대한 요청을 호출하는 시스템 생성 액터로 정의됩니다. `ml.c5.large` 인스턴스에서 실행되는 일반적인 XGBoost 컨테이너의 경우, 엔드포인트는 15\$120명의 사용자만으로 분당 30,000회 호출(500tps)에 도달할 수 있습니다.
  + `ResourceLimit`에 `MaxNumberOfTests`(Inference Recommender 작업에 대한 최대 벤치마킹 부하 테스트 수, 최소 1회\$1최대 10회) 및 `MaxParallelOfTests`(Inference Recommender에 대한 최대 병렬 벤치마킹 부하 테스트 수, 최소 1회\$1최대 10회)을(를) 지정합니다.
  + `EndpointConfigurations`에는 다음 중 한 가지를 지정할 수 있습니다.
    + `InstanceType` 필드에서는 부하 테스트를 실행하고자 하는 인스턴스 유형을 지정합니다.
    + `ServerlessConfig`에서는 서버리스 엔드포인트에 대한 `MaxConcurrency` 및 `MemorySizeInMB`의 이상적인 값을 지정합니다.
+ 중단 조건 사전(`stopping-conditions`)에서 맞는 조건이 있을 경우 Inference Recommender 작업이 중단됩니다. 이 예제에서는 다음 필드를 사전에서 지정합니다.
  + `MaxInvocations`에 엔드포인트에 대해 예상되는 분당 최대 요청 수를 최소 1에서 최대 30,000으로 지정합니다.
  + `ModelLatencyThresholds`에 `Percentile`(모델 지연 시간 백분위수 임계값) 및 `ValueInMilliseconds`(모델 지연 시간 백분위수 값(밀리초))을(를) 지정합니다.
  + (선택 사항) `FlatInvocations`에 TPS(분당 간접 호출 수) 속도가 일정해질 때 부하 테스트를 계속할지 여부를 지정할 수 있습니다. TPS 속도가 일정해지면 일반적으로 엔드포인트가 용량에 도달했음을 의미합니다. 단, 최대 용량 조건에서는 엔드포인트를 계속 모니터링하는 것이 좋습니다. 이 경우 부하 테스트를 계속하려면 이 값을 `Continue`로 지정합니다. 그렇지 않은 경우 기본값은 `Stop`입니다.

```
aws sagemaker create-inference-recommendations-job\
    --region <region>\
    --job-name <job-name>\
    --job-type ADVANCED\
    --role-arn arn:aws:iam::<account>:role/*\
    --input-config \"{
        \"ModelPackageVersionArn\": \"arn:aws:sagemaker:<region>:<account>:role/*\",
        \"JobDurationInSeconds\": 7200,                                
        \"TrafficPattern\" : {
                # Replace PHASES with STAIRS to use the stairs traffic pattern
                \"TrafficType\": \"PHASES\",
                \"Phases\": [
                    {
                        \"InitialNumberOfUsers\": 1,
                        \"SpawnRate\": 60,
                        \"DurationInSeconds\": 300
                    }
                ]
                # Uncomment this section and comment out the Phases object above to use the stairs traffic pattern
                # 'Stairs' : {
                #   'DurationInSeconds': 240,
                #   'NumberOfSteps': 2,
                #   'UsersPerStep': 2
                # }
            },
            \"ResourceLimit\": {
                \"MaxNumberOfTests\": 10,
                \"MaxParallelOfTests\": 3
            },
            \"EndpointConfigurations\" : [
                {
                    \"InstanceType\": \"ml.c5.xlarge\"
                },
                {
                    \"InstanceType\": \"ml.m5.xlarge\"
                },
                {
                    \"InstanceType\": \"ml.r5.xlarge\"
                }
                # Use the ServerlessConfig and leave out the InstanceType fields if you want recommendations for a serverless endpoint
                # \"ServerlessConfig\": {
                #     \"MaxConcurrency\": value, 
                #     \"MemorySizeInMB\": value 
                # }
            ]
        }\"
    --stopping-conditions \"{
        \"MaxInvocations\": 1000,
        \"ModelLatencyThresholds\":[
                {
                    \"Percentile\": \"P95\", 
                    \"ValueInMilliseconds\": 100
                }
        ],
        # Change 'Stop' to 'Continue' to let the load test continue if invocations flatten 
        \"FlatInvocations\": \"Stop\"
    }\"
```

------
#### [ Amazon SageMaker Studio Classic ]

Studio Classic으로 부하 테스트를 생성합니다.

1. Studio Classic 애플리케이션에서 홈 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. Studio Classic 왼쪽 사이드바에서 **배포(Deployments)**를 선택합니다.

1. 드롭다운 목록에서 **Inference recommender**를 선택합니다.

1. **Inference Recommender 작업 생성(Create inference recommender job)**을 선택합니다. **Inference Recommender 작업 생성(Create inference recommender job)** 탭이 열립니다.

1. 드롭다운 **모델 그룹(Model group)** 필드에서 모델 그룹 이름을 선택합니다. 목록에는 Studio Classic 외부에서 등록된 모델을 포함하여 계정의 모델 레지스트리에 등록된 모든 모델 그룹이 포함됩니다.

1. 드롭다운 **모델 버전(Model version)** 필드에서 모델 버전을 선택합니다.

1. **계속**을 선택합니다.

1. 작업 이름을 **이름(Name)** 필드에 입력합니다.

1. (선택 사항) 작업 설명을 **설명(Description)** 필드에 입력합니다.

1. Inference Recommender에 AWS 서비스에 액세스할 수 있는 권한을 부여하는 IAM 역할을 선택합니다. 역할을 생성하고 `AmazonSageMakerFullAccess` IAM 관리형 정책을 연결하여 수행하거나, Studio Classic으로 역할을 생성할 수 있습니다.

1. **중단 조건(Stopping Conditions)**을 선택하여 사용 가능한 입력 필드를 확장합니다. 배포 권장 사항 중단 조건을 입력합니다.

   1. 엔드포인트에 대해 예상되는 분당 최대 요청 수를 **분당 최대 간접 호출 수(Max Invocations Per Minute)** 필드에 지정합니다.

   1. 모델 지연 시간 임계값을 마이크로초 단위로 **모델 지연 시간 임계값(Model Latency Threshold)** 필드에 지정합니다. **모델 지연 임계값**은 Inference Recommender에서 본 모델 응답 시간 간격을 나타냅니다. 이 간격에는 요청을 전송하고 모델 컨테이너에서 응답을 가져오는 데 걸리는 로컬 통신 시간과 컨테이너에서 추론을 완료하는 데 걸리는 시간도 포함됩니다.

1. **트래픽 패턴(Traffic Pattern)**을 선택하여 사용 가능한 입력 필드를 확장합니다.

   1. **초기 사용자 수(Initial Number of Users)** 필드에 정수를 지정하여 초기 가상 사용자 수를 설정합니다.

   1. **생성 속도(Spawn Rate)** 필드에 정수를 입력합니다. 생성 속도는 초당 생성되는 사용자 수를 설정합니다.

   1. **지속 시간(Duration)** 필드에 정수를 지정하여 단계 지속 시간을 초 단위로 설정합니다.

   1. (선택 사항) 부가 트래픽 패턴을 추가합니다. **추가(Add)**를 선택합니다.

1. **부가(Additional)** 설정을 선택하여 **최장 테스트 지속 시간(Max test duration)** 필드를 표시합니다. 작업 중 테스트에 소요될 수 있는 최대 시간을 초 단위로 지정합니다. 정해진 지속 시간이 지난 후에는 새 작업이 예약되지 않습니다. 이렇게 하면 진행 중인 작업이 중단되지 않고 완료된 작업만 볼 수 있습니다.

1. **계속**을 선택합니다.

1. **인스턴스 선택(Select Instances)**을 선택합니다.

1. **벤치마킹용 인스턴스(Instances for benchmarking)** 필드에서 **테스트할 인스턴스 추가(Add instances to test)**를 선택합니다. Inference Recommender가 부하 테스트에 사용할 인스턴스를 최대 10개까지 선택합니다.

1. **부가 설정(Additional settings)**을 선택합니다.

   1. 하나의 작업에서 실시할 수 있는 테스트 수의 상한을 **최대 테스트 수(Max number of tests)** 필드에 정수로 입력합니다. 참고로 개별 엔드포인트 구성은 새 부하 테스트로 귀결됩니다.

   1. **최대 병렬 테스트(Max parallel test)** 필드에 정수를 입력합니다. 이 설정은 병렬 실행 가능한 부하 테스트 수의 상한을 정의합니다.

1. **제출**을 선택합니다.

   부하 테스트는 최장 2시간이 걸릴 수 있습니다.
**주의**  
이 탭을 닫지 마세요. 이 탭을 닫으면 Inference Recommender 부하 테스트 작업이 취소됩니다.

------
#### [ SageMaker AI console ]

SageMaker AI 콘솔을 통해 사용자 지정 부하 테스트를 생성하는 방법은 다음과 같습니다.

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔로 이동합니다.

1. 왼쪽 탐색 창에서 **추론(Inference)**을 선택한 다음 **Inference Recommender**를 선택합니다.

1. **Inference Recommender 작업(Inference recommender jobs)** 페이지에서 **작업 생성(Create job)**을 선택합니다.

1. **1단계: 모델 구성**에서 다음을 수행합니다.

   1. **작업 유형(Job type)**으로 **고급 Recommender 작업(Advanced recommender job)**을 선택합니다.

   1. SageMaker AI 모델 레지스트리에 등록된 모델을 사용하는 경우, **모델 레지스트리에서 모델 선택** 전환을 켜고 다음을 수행합니다.

      1. **모델 그룹** 드롭다운 목록에서 모델이 있는 SageMaker AI 모델 레지스트리의 모델 그룹을 선택합니다.

      1. **모델 버전(Model version)** 드롭다운 목록에서 원하는 모델 버전을 선택합니다.

   1. SageMaker AI에서 생성한 모델을 사용하는 경우, **모델 레지스트리에서 모델 선택** 전환을 끄고 다음을 수행합니다.

      1. **모델 이름** 필드에 SageMaker AI 모델의 이름을 입력합니다.

   1. **IAM 역할**의 경우 인스턴스 권장 작업을 생성하는 데 필요한 권한이 있는 기존 AWS IAM 역할을 선택할 수 있습니다. 기존 역할이 없는 경우에는 **새 역할 생성**을 선택하여 역할 생성 팝업을 열 수 있습니다. 그러면 SageMaker AI가 생성한 새 역할에 필요한 권한을 추가합니다.

   1. **페이로드 벤치마킹용 S3 버킷(S3 bucket for benchmarking payload)**에 샘플 페이로드 아카이브의 Amazon S3 경로를 입력합니다. 이 경로에는 Inference Recommender가 다양한 인스턴스 유형에서 모델을 벤치마크할 때 사용하는 샘플 페이로드 파일이 포함되어야 합니다.

   1. **페이로드 콘텐츠 유형(Payload content type)**에 샘플 페이로드 데이터의 MIME 유형을 입력합니다.

   1. **트래픽 패턴(Traffic pattern)**에서 부하 테스트 단계를 구성하는 방법은 다음과 같습니다.

      1. **초기 사용자 수(Initial number of users)**에서 시작할 동시 사용자 수(최소 1명\$1최대 3명)를 지정합니다.

      1. **생성 속도(Spawn rate)**에서 단계별로 1분 간 생성할 사용자 수(최소 0명\$1최대 3명)를 지정합니다.

      1. **지속 시간(초)(Duration (seconds))**에서 트래픽 단계 지속 시간을 초 단위로 지정합니다(최단 120초\$1최장 3,600초).

   1. (선택 사항) **모델 레지스트리에서 모델 선택** 전환을 끄고 SageMaker AI 모델을 지정한 경우, **컨테이너 구성**에서 다음을 수행합니다.

      1. **도메인(Domain)** 드롭다운 목록에서 컴퓨터 비전, 자연어 처리, 기계 학습 등 모델의 기계 학습 도메인을 선택합니다.

      1. **프레임워크(Framework)** 드롭다운 목록에서 TensorFlow, XGBoost 등 컨테이너의 프레임워크를 선택합니다.

      1. **프레임워크 버전(Framework version)**에 컨테이너 이미지의 프레임워크 버전을 입력합니다.

      1. **가장 가까운 모델 이름(Nearest model name)** 드롭다운 목록에서 사용자 모델과 가장 가깝게 일치하는 사전 훈련된 모델을 선택합니다.

      1. **태스크(Task)** 드롭다운 목록에서 모델이 수행하는 기계 학습 태스크(예: 이미지 분류, 회귀)를 선택합니다.

   1. (선택 사항) **SageMaker Neo를 사용한 모델 컴파일(Model compilation using SageMaker Neo)**에서 SageMaker Neo로 컴파일한 모델에 대한 권장 작업을 구성할 수 있습니다. **데이터 입력 구성(Data input configuration)**에 `{'input':[1,1024,1024,3]}`와(과) 비슷한 형식으로 모델에 맞는 정확한 입력 데이터 형상을 입력합니다.

   1. **다음**을 선택합니다.

1. **2단계: 인스턴스 및 환경 파라미터**에서 다음을 수행합니다.

   1. **벤치마킹할 인스턴스 선택(Select instances for benchmarking)**에서 벤치마킹할 인스턴스 유형을 최대 8개까지 선택합니다.

   1. (선택 사항) **환경 파라미터 범위(Environment parameter ranges)**에서 모델 최적화에 도움이 되는 환경 파라미터를 지정할 수 있습니다. 파라미터를 **키(Key)**와 **값(Value)**의 쌍으로 지정합니다.

   1. **다음**을 선택합니다.

1. **3단계: 작업 파라미터**에서 다음을 수행합니다.

   1. (선택 사항) **작업 이름(Job name)** 필드에 인스턴스 권장 작업의 이름을 입력합니다. 작업 생성 시 SageMaker AI는 이 이름 끝에 타임스탬프를 추가합니다.

   1. (선택 사항) **작업 설명(Job description)** 필드에 작업에 대한 설명을 입력합니다.

   1. (선택 사항) **암호화 키** 드롭다운 목록에서 이름으로 AWS KMS 키를 선택하거나 ARN을 입력하여 데이터를 암호화합니다.

   1. (선택 사항) **최대 테스트 수(Max number of tests)**에 권장 작업 중에 실행할 테스트 수를 입력합니다.

   1. (선택 사항) **최대 병렬 테스트(Max parallel of tests)**에 권장 작업 중에 실행할 최대 병렬 테스트 수를 입력합니다.

   1. **최장 테스트 지속 시간(Max test duration (s))**에 개별 테스트를 실행할 최장 시간(초)을 입력합니다.

   1. **분당 최대 간접 호출(Max invocations per minute)**에 엔드포인트가 권장 작업을 중단하기 전에 도달할 수 있는 분당 최대 요청 수를 입력합니다. 이 한도에 도달하면 SageMaker AI는 작업을 종료합니다.

   1. **P99 모델 지연 시간 임계값(ms)(P99 Model latency threshold (ms))**에 모델 지연 시간 백분위수를 밀리초 단위로 입력합니다.

   1. **다음**을 선택합니다.

1. **4단계: 작업 검토**에서 구성 검토 후 **제출(Submit)**을 선택합니다.

------

## 부하 테스트 결과 가져오기
<a name="load-test-describe"></a>

 AWS SDK for Python (Boto3), AWS CLI Studio Classic 또는 SageMaker AI 콘솔을 사용하여 로드 테스트가 완료되면 모든 로드 테스트에서 프로그래밍 방식으로 지표를 수집할 수 있습니다.

------
#### [ AWS SDK for Python (Boto3) ]

`DescribeInferenceRecommendationsJob` API로 지표를 수집할 수 있습니다. `JobName` 필드에 대한 부하 테스트 작업 이름을 지정합니다.

```
load_test_response = sagemaker_client.describe_inference_recommendations_job(
                                                        JobName=load_test_job_name
                                                        )
```

응답 객체를 출력합니다.

```
load_test_response['Status']
```

이는 다음 예제와 유사한 JSON 응답을 반환합니다. 참고로 이 예제에서는 실시간 추론을 위한 권장 인스턴스 유형을 볼 수 있습니다(서버리스 추론 권장 사항을 보여주는 예는 다음 예제 참조).

```
{
    'JobName': 'job-name', 
    'JobDescription': 'job-description', 
    'JobType': 'Advanced', 
    'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 19, 38, 30, 957000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 19, 46, 31, 399000, tzinfo=tzlocal()), 
    'InputConfig': {
        'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 
        'JobDurationInSeconds': 7200, 
        'TrafficPattern': {
            'TrafficType': 'PHASES'
            }, 
        'ResourceLimit': {
            'MaxNumberOfTests': 100, 
            'MaxParallelOfTests': 100
            }, 
        'EndpointConfigurations': [{
            'InstanceType': 'ml.c5d.xlarge'
            }]
        }, 
    'StoppingConditions': {
        'MaxInvocations': 1000, 
        'ModelLatencyThresholds': [{
            'Percentile': 'P95', 
            'ValueInMilliseconds': 100}
            ]}, 
    'InferenceRecommendations': [{
        'Metrics': {
            'CostPerHour': 0.6899999976158142, 
            'CostPerInference': 1.0332434612791985e-05, 
            'MaximumInvocations': 1113, 
            'ModelLatency': 100000
            }, 
    'EndpointConfiguration': {
        'EndpointName': 'endpoint-name', 
        'VariantName': 'variant-name', 
        'InstanceType': 'ml.c5d.xlarge', 
        'InitialInstanceCount': 3
        }, 
    'ModelConfiguration': {
        'Compiled': False, 
        'EnvironmentParameters': []
        }
    }], 
    'ResponseMetadata': {
        'RequestId': 'request-id', 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': 'x-amzn-requestid', 
            'content-type': 'content-type', 
            'content-length': '1199', 
            'date': 'Tue, 26 Oct 2021 19:57:42 GMT'
            }, 
        'RetryAttempts': 0}
    }
```

처음 몇 줄에는 추론 부하 테스트 작업 자체에 대한 정보가 있습니다. 여기에는 작업 이름, 역할 ARN, 생성 및 삭제 시간이 포함됩니다.

`InferenceRecommendations` 사전에는 Inference Recommender 추론 권장 사항 목록이 포함됩니다.

`EndpointConfiguration` 중첩 사전에는 권장 작업 중에 사용되는 엔드포인트 및 변형 이름(배포된 AWS 기계 학습 모델`InstanceType`)과 함께 인스턴스 유형() 권장 사항이 포함되어 있습니다. 이 엔드포인트와 변형 이름은 Amazon CloudWatch Events에서 모니터링 시 사용할 수 있습니다. 자세한 정보는 [Amazon CloudWatch의 Amazon SageMaker AI 지표](monitoring-cloudwatch.md)을 참조하세요.

`EndpointConfiguration` 중첩 사전에는 인스턴스 개수(`InitialInstanceCount`) 권장 사항도 포함되어 있습니다. `MaxInvocations`(`StoppingConditions`에 지정) 충족을 위해 엔드포인트에서 프로비저닝해야 하는 인스턴스 수입니다. 예를 들어, `InstanceType`은(는) `ml.m5.large`이고 `InitialInstanceCount`은(는) `2`인 경우, 엔드포인트에서 2개의 `ml.m5.large` 인스턴스를 프로비저닝해야 `MaxInvocations` 중단 조건에 지정된 TPS를 처리할 수 있습니다.

`Metrics` 중첩 사전에는 실시간 엔드포인트의 미화 기준 시간당 예상 비용(`CostPerHour`), 실시간 엔드포인트의 추론당 예상 비용(`CostPerInference`), 엔드포인트로 전송되는 분당 예상 최대 `InvokeEndpoint` 요청 수, 모델이 SageMaker AI에 응답하는 데 걸린 시간 간격(마이크로초)인 모델 지연 시간(`ModelLatency`)에 대한 정보가 포함됩니다. 모델 지연 시간에는 요청을 전송하고 모델 컨테이너에서 응답을 가져오는 데 걸리는 로컬 통신 시간과 컨테이너에서 추론을 완료하는 데 걸리는 시간도 포함됩니다.

다음 예제에서는 서버리스 추론 권장 사항을 반환하도록 구성된 부하 테스트 작업에 대한 응답의 `InferenceRecommendations` 일부를 볼 수 있습니다.

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "value",
            "InitialInstanceCount": value,
            "InstanceType": "value",
            "VariantName": "value",
            "ServerlessConfig": {
                "MaxConcurrency": value,
                "MemorySizeInMb": value
            }
         },
         "InvocationEndTime": value,
         "InvocationStartTime": value,
         "Metrics": { 
            "CostPerHour": value,
            "CostPerInference": value,
            "CpuUtilization": value,
            "MaxInvocations": value,
            "MemoryUtilization": value,
            "ModelLatency": value,
            "ModelSetupTime": value
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "value"
         },
         "RecommendationId": "value"
      }
   ]
```

서버리스 추론에 대한 권장 사항을 실시간 추론 결과와 비슷하게 해석할 수 있습니다. 단, `ServerlessConfig`의 경우에는 부하 테스트를 설정할 때 지정한 `MaxConcurrency` 및 `MemorySizeInMB` 값을 알려줍니다. 서버리스 권장 사항은 서버리스 엔드포인트에서 컴퓨터 리소스를 실행하는 데 걸리는 시간(마이크로초)을 측정하는 지표 `ModelSetupTime`도 측정합니다. 서버리스 엔드포인트 설정에 대한 자세한 정보는 [서버리스 추론 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html)에서 확인하세요.

------
#### [ AWS CLI ]

`describe-inference-recommendations-job` API로 지표를 수집할 수 있습니다. `job-name` 플래그에 대한 부하 테스트 작업 이름을 지정합니다.

```
aws sagemaker describe-inference-recommendations-job --job-name <job-name>
```

이는 다음 예제와 유사한 응답을 반환합니다. 참고로 이 예제에서는 실시간 추론을 위한 권장 인스턴스 유형을 볼 수 있습니다(서버리스 추론 권장 사항을 보여주는 예는 다음 예제 참조).

```
{
    'JobName': 'job-name', 
    'JobDescription': 'job-description', 
    'JobType': 'Advanced', 
    'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 19, 38, 30, 957000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 19, 46, 31, 399000, tzinfo=tzlocal()), 
    'InputConfig': {
        'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 
        'JobDurationInSeconds': 7200, 
        'TrafficPattern': {
            'TrafficType': 'PHASES'
            }, 
        'ResourceLimit': {
            'MaxNumberOfTests': 100, 
            'MaxParallelOfTests': 100
            }, 
        'EndpointConfigurations': [{
            'InstanceType': 'ml.c5d.xlarge'
            }]
        }, 
    'StoppingConditions': {
        'MaxInvocations': 1000, 
        'ModelLatencyThresholds': [{
            'Percentile': 'P95', 
            'ValueInMilliseconds': 100
            }]
        }, 
    'InferenceRecommendations': [{
        'Metrics': {
        'CostPerHour': 0.6899999976158142, 
        'CostPerInference': 1.0332434612791985e-05, 
        'MaximumInvocations': 1113, 
        'ModelLatency': 100000
        }, 
        'EndpointConfiguration': {
            'EndpointName': 'endpoint-name', 
            'VariantName': 'variant-name', 
            'InstanceType': 'ml.c5d.xlarge', 
            'InitialInstanceCount': 3
            }, 
        'ModelConfiguration': {
            'Compiled': False, 
            'EnvironmentParameters': []
            }
        }], 
    'ResponseMetadata': {
        'RequestId': 'request-id', 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': 'x-amzn-requestid', 
            'content-type': 'content-type', 
            'content-length': '1199', 
            'date': 'Tue, 26 Oct 2021 19:57:42 GMT'
            }, 
        'RetryAttempts': 0
        }
    }
```

처음 몇 줄에는 추론 부하 테스트 작업 자체에 대한 정보가 있습니다. 여기에는 작업 이름, 역할 ARN, 생성 및 삭제 시간이 포함됩니다.

`InferenceRecommendations` 사전에는 Inference Recommender 추론 권장 사항 목록이 포함됩니다.

`EndpointConfiguration` 중첩 사전에는 권장 작업 중에 사용되는 엔드포인트 및 변형 이름(배포된 AWS 기계 학습 모델`InstanceType`)과 함께 인스턴스 유형() 권장 사항이 포함되어 있습니다. 이 엔드포인트와 변형 이름은 Amazon CloudWatch Events에서 모니터링 시 사용할 수 있습니다. 자세한 정보는 [Amazon CloudWatch의 Amazon SageMaker AI 지표](monitoring-cloudwatch.md)을 참조하세요.

`Metrics` 중첩 사전에는 실시간 엔드포인트의 미화 기준 시간당 예상 비용(`CostPerHour`), 실시간 엔드포인트의 추론당 예상 비용(`CostPerInference`), 엔드포인트로 전송되는 분당 예상 최대 `InvokeEndpoint` 요청 수, 모델이 SageMaker AI에 응답하는 데 걸린 시간 간격(마이크로초)인 모델 지연 시간(`ModelLatency`)에 대한 정보가 포함됩니다. 모델 지연 시간에는 요청을 전송하고 모델 컨테이너에서 응답을 가져오는 데 걸리는 로컬 통신 시간과 컨테이너에서 추론을 완료하는 데 걸리는 시간도 포함됩니다.

다음 예제에서는 서버리스 추론 권장 사항을 반환하도록 구성된 부하 테스트 작업에 대한 응답의 `InferenceRecommendations` 일부를 볼 수 있습니다.

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "value",
            "InitialInstanceCount": value,
            "InstanceType": "value",
            "VariantName": "value",
            "ServerlessConfig": {
                "MaxConcurrency": value,
                "MemorySizeInMb": value
            }
         },
         "InvocationEndTime": value,
         "InvocationStartTime": value,
         "Metrics": { 
            "CostPerHour": value,
            "CostPerInference": value,
            "CpuUtilization": value,
            "MaxInvocations": value,
            "MemoryUtilization": value,
            "ModelLatency": value,
            "ModelSetupTime": value
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "value"
         },
         "RecommendationId": "value"
      }
   ]
```

서버리스 추론에 대한 권장 사항을 실시간 추론 결과와 비슷하게 해석할 수 있습니다. 단, `ServerlessConfig`의 경우에는 부하 테스트를 설정할 때 지정한 `MaxConcurrency` 및 `MemorySizeInMB` 값을 알려줍니다. 서버리스 권장 사항은 서버리스 엔드포인트에서 컴퓨터 리소스를 실행하는 데 걸리는 시간(마이크로초)을 측정하는 지표 `ModelSetupTime`도 측정합니다. 서버리스 엔드포인트 설정에 대한 자세한 정보는 [서버리스 추론 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html)에서 확인하세요.

------
#### [ Amazon SageMaker Studio Classic ]

권장 사항은 Studio Classic의 새 **추론 권장 사항(Inference recommendations)** 탭에 채워집니다. 결과가 표시되려면 최대 2시간이 걸릴 수 있습니다. 이 탭에는 **결과(Results)**와 **세부정보(Details)** 열이 포함됩니다.

**세부정보(Details)** 열에는 부하 테스트 작업에 지정된 이름, 작업이 생성된 시간(**생성 시간(Creation time)**) 등과 같은 부하 테스트 작업에 대한 정보가 있습니다. 또한 분당 발생한 최대 간접 호출 수 및 사용된 Amazon 리소스 이름에 대한 정보와 같은 **설정(Settings)** 정보도 포함되어 있습니다.

**결과** 열에는 배포 중요도에 따라 결과가 표시되는 순서를 조정할 수 있는 **배포 목표** 및 **SageMaker AI 권장 사항** 창이 있습니다. 세 가지 드롭다운 메뉴를 사용하여 **비용(Cost)**, **지연 시간(Latency)**, **처리량(Throughput)**의 중요도를 사용 사례에 맞게 설정할 수 있습니다. 개별 목표(비용, 지연 시간, 처리량)의 중요도를 **최저(Lowest Importance)**, **낮음(Low Importance)**, **보통(Moderate importance)**, **높음(High importance)**, **최고(Highest importance)**로 설정할 수 있습니다.

사용자가 선택한 개별 목표의 중요도에 따라 Inference Recommender는 패널 오른쪽 **SageMaker 권장 사항(SageMaker recommendation)** 필드에 시간당 예상 비용 및 추론 요청과 함께 상위 권장 사항을 표시합니다. 또한 예상 모델 지연 시간, 최대 간접 호출 수, 인스턴스 수에 대한 정보도 표시합니다.

표시된 상위 권장 사항 외에 Inference Recommender가 **전체 실행(All runs)** 섹션에서 테스트한 모든 인스턴스에 대한 동일한 정보를 볼 수 있습니다.

------
#### [ SageMaker AI console ]

SageMaker AI 콘솔에서 사용자 지정 부하 테스트 작업 결과를 확인하는 방법은 다음과 같습니다.

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔로 이동합니다.

1. 왼쪽 탐색 창에서 **추론(Inference)**을 선택한 다음 **Inference Recommender**를 선택합니다.

1. **Inference Recommender 작업(Inference recommender jobs)** 페이지에서 추론 권장 작업 이름을 선택합니다.

작업 세부정보 페이지에서 다음 스크린샷과 같이 SageMaker AI가 모델에 권장하는 인스턴스 유형인 **추론 권장 사항**을 볼 수 있습니다.

![\[SageMaker AI 콘솔의 작업 세부정보 페이지에 있는 추론 권장 사항 목록의 스크린샷.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/inf-rec-instant-recs.png)


이 섹션에서는 **모델 지연 시간(Model latency)**, **시간당 비용(Cost per hour)**, **추론당 비용(Cost per inference)**, **분당 간접 호출 수(Invocations per minute)**와 같은 다양한 요인을 기준으로 인스턴스 유형을 비교할 수 있습니다.

이 페이지에서 작업에 지정한 구성을 볼 수도 있습니다. **모니터(Monitor)** 섹션에서 인스턴스 유형별로 기록된 Amazon CloudWatch 지표를 볼 수 있습니다. 이러한 지표 해석에 대한 자세한 내용은 [결과 해석](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-interpret-results.html)에서 확인하세요.

------

# 부하 테스트 중단하기
<a name="load-test-stop"></a>

실수로 작업을 시작했거나 더 이상 작업을 실행할 필요가 없는 경우 현재 실행 중인 작업을 중지할 수 있습니다. 부하 테스트 작업은 `StopInferenceRecommendationsJob` API로 프로그래밍 방식으로 중단하거나, Studio Classic 또는 SageMaker AI 콘솔을 통해 중단할 수 있습니다.

------
#### [ AWS SDK for Python (Boto3) ]

`JobName` 필드에 대한 부하 테스트 작업 이름을 지정합니다.

```
sagemaker_client.stop_inference_recommendations_job(
                                    JobName='<INSERT>'
                                    )
```

------
#### [ AWS CLI ]

`job-name` 플래그에 대한 부하 테스트 작업 이름을 지정합니다.

```
aws sagemaker stop-inference-recommendations-job --job-name <job-name>
```

------
#### [ Amazon SageMaker Studio Classic ]

사용자 지정 부하 작업을 개시한 탭을 닫아 Inference Recommender 부하 테스트를 중단합니다.

------
#### [ SageMaker AI console ]

SageMaker AI 콘솔을 통해 부하 테스트 작업을 중단하는 방법은 다음과 같습니다.

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔로 이동합니다.

1. 왼쪽 탐색 창에서 **추론(Inference)**을 선택한 다음 **Inference Recommender**를 선택합니다.

1. **Inference Recommender 작업(Inference recommender jobs)** 페이지에서 부하 테스트 작업을 선택합니다.

1. **작업 중단(Stop job)**을 선택합니다.

1. 대화 상자가 열리면 **확인(Confirm)**을 선택합니다.

작업 중단 후 작업 **상태(Status)** **중단 중(Stopping)**으로 변경되어야 합니다.

------

# Inference Recommender 오류 문제 해결
<a name="inference-recommender-troubleshooting"></a>

이 섹션에는 일반적인 오류를 파악해 방지하는 방법, 오류로 인해 생성되는 오류 메시지와 오류 해결 방법에 대한 지침이 나와 있습니다.

## 문제 해결 방법
<a name="inference-recommender-troubleshooting-how-to"></a>

다음 단계를 통해 오류 해결을 시도할 수 있습니다.
+ Inference Recommender 사용 필수 조건을 모두 충족했는지 확인합니다. [Inference Recommender 필수 조건](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-prerequisites.html)을 확인하세요.
+ 모델 레지스트리에서 엔드포인트로 모델을 배포할 수 있고 오류 없이 페이로드를 처리할 수 있는지 확인합니다. [레지스트리에서 모델 배포](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-deploy.html)를 확인하세요.
+ Inference Recommender 작업을 시작하면 콘솔에서 엔드포인트가 생성되는 것을 확인하고 CloudWatch 로그를 검토할 수 있습니다.

## 일반적인 오류
<a name="inference-recommender-troubleshooting-common"></a>

다음 표에서 일반적인 Inference Recommender 오류와 해결 방법을 확인하세요.


| 오류 | Solution | 
| --- | --- | 
|  모델 패키지 버전 1에서는 `Domain`을(를) 지정합니다. `Domain`은(는) 작업의 필수 파라미터입니다.  |  ML 도메인을 입력하거나 알 수 없는 경우 `OTHER`을(를) 입력합니다.  | 
|  입력한 역할 ARN을 수임할 수 없어 `AWSSecurityTokenServiceException` 오류가 발생했습니다.  |  입력한 실행 역할에 필수 조건에 지정된 필수 권한이 있는지 확인합니다.  | 
|  모델 패키지 버전 1에서는 `Framework`을(를) 지정합니다. `Framework`은(는) 작업의 필수 파라미터입니다.  |  ML 프레임워크를 입력하거나 알 수 없는 경우 `OTHER`을(를) 입력합니다.  | 
|  이전 단계의 최종 사용자는 0이고 현재 단계의 초기 사용자는 1입니다.  |  여기서 사용자는 요청 전송 시 사용되는 가상 사용자 또는 스레드를 말합니다. 각 단계는 A 사용자로 시작하여 B 사용자로 끝나므로 B > A입니다. 순차적인 단계 x\$11과 x\$12 사이 필수 조건은 abs(x\$12.a - x\$11.b) <= 3 및 >= 0입니다.  | 
|  총 트래픽 지속 시간(전체)은 작업 지속 시간을 초과할 수 없습니다.  |  전체 단계의 총 지속 시간은 작업 지속 시간을 초과할 수 없습니다.  | 
|  용량 확장 가능 인스턴스 유형 ml.t2.medium은 허용되지 않습니다.  |  Inference Recommender는 t2 인스턴스 패밀리에 대한 부하 테스트를 지원하지 않습니다. 용량 확장 가능 인스턴스는 일관된 성능을 제공하지 않기 때문입니다.  | 
|  CreateEndpoint 작업 호출 시 ResourceLimitExceeded  |  SageMaker AI 리소스 제한을 초과했습니다. 예를 들어, 계정이 엔드포인트 할당량에 도달한 경우 Inference Recommender는 벤치마킹용 엔드포인트를 프로비저닝하지 못할 수 있습니다. SageMaker AI 제한 및 할당량에 대한 자세한 정보는 [Amazon SageMaker AI 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html)에서 확인하세요.  | 
|  InvokeEndpoint 작업 호출 시 ModelError  |  모델 오류는 다음과 같은 이유로 발생할 수 있습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/inference-recommender-troubleshooting.html)  | 
|  InvokeEndpoint 작업 호출 시 PayloadError  |  페이로드 오류는 다음과 같은 이유로 발생할 수 있습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/inference-recommender-troubleshooting.html)  | 

## CloudWatch 확인하기
<a name="inference-recommender-troubleshooting-check-cw"></a>

Inference Recommender 작업을 시작하면 콘솔에서 엔드포인트가 생성되는 것을 확인할 수 있습니다. 엔드포인트 중 하나를 선택하고 CloudWatch 로그를 확인하여 4xx/5xx 오류를 모니터링합니다. Inference Recommender 작업이 정상적으로 진행되면 결과의 일부로 엔드포인트 이름을 볼 수 있습니다. Inference Recommender 작업이 정상적으로 진행되지 않더라도 아래 단계에 따라 CloudWatch 로그에서 삭제된 엔드포인트를 확인할 수 있습니다.

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 Amazon CloudWatch 콘솔을 엽니다.

1. Inference Recommender 작업을 생성한 리전을 오른쪽 상단 **리전(Region)** 드롭다운 목록에서 선택합니다.

1. CloudWatch 탐색 창에서 **로그(Logs)**를 선택한 다음, **로그 그룹(Log groups)**을 선택합니다.

1. `/aws/sagemaker/Endpoints/sm-epc-*` 로그 그룹을 검색합니다. 가장 최근의 Inference Recommender 작업을 기반으로 로그 그룹을 선택합니다.

Inference Recommender CloudWatch 로그를 확인하여 작업 문제를 해결할 수도 있습니다. `/aws/sagemaker/InferenceRecommendationsJobs` CloudWatch 로그 그룹에 게시되는 Inference Recommender 로그에서 `<jobName>/execution` 로그 스트림의 작업 진행 상황을 개괄적으로 볼 수 있습니다. `<jobName>/Endpoint/<endpointName>` 로그 스트림에서 테스트 중인 각 엔드포인트 구성에 대한 자세한 정보를 찾을 수 있습니다.

**Inference Recommender 로그 스트림 개요**
+ `<jobName>/execution`에는 벤치마킹이 예정된 엔드포인트 구성, 컴파일 작업 건너뛰기 사유, 검증 실패 사유 등 전반적인 작업 정보가 들어 있습니다.
+ `<jobName>/Endpoint/<endpointName>`에는 리소스 생성 진행률, 테스트 구성, 부하 테스트 중지 사유, 리소스 정리 상태 등의 정보가 들어 있습니다.
+ `<jobName>/CompilationJob/<compilationJobName>`에는 컴파일 작업 구성, 컴파일 작업 상태 등 Inference Recommender에서 만든 컴파일 작업에 대한 정보가 들어 있습니다.

**Inference Recommender 오류 메시지에 대한 경보 생성하기**

Inference Recommender는 문제 해결 중에 유용할 수 있는 오류에 대한 로그 설명을 출력합니다. CloudWatch 로그 그룹과 지표 필터를 사용하면 데이터가 CloudWatch로 전송될 때 로그 데이터에서 용어와 패턴을 찾을 수 있습니다. 그런 다음 로그 그룹 지표 필터에 따라 CloudWatch 경보를 생성할 수 있습니다. 자세한 정보는 [로그 그룹-지표 필터를 기반으로 CloudWatch 경보 생성하기](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create_alarm_log_group_metric_filter.html)를 확인하세요

## 벤치마크 확인하기
<a name="inference-recommender-troubleshooting-check-benchmarks"></a>

Inference Recommender 작업을 시작하면 Inference Recommender는 여러 가지 벤치마크를 생성하여 다양한 인스턴스 유형에서 모델 성능을 평가합니다. [ListInferenceRecommendationsJobSteps](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListInferenceRecommendationsJobSteps.html) API로 전체 벤치마크의 세부정보를 볼 수 있습니다. 실패한 벤치마크가 있는 경우, 결과의 일부로 실패 사유를 확인할 수 있습니다.

[ListInferenceRecommendationsJobSteps](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListInferenceRecommendationsJobSteps.html) API를 사용하려면 다음 값을 입력합니다.
+ `JobName`에 Inference Recommender 작업 이름을 입력합니다.
+ `StepType`에서 `BENCHMARK`로 작업 벤치마크에 대한 세부정보를 반환합니다.
+ `Status`에서 `FAILED`로 실패한 벤치마크에 대한 세부정보를 반환합니다. 기타 상태 유형 목록은 `Status` 필드([ListInferenceRecommendationsJobSteps](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListInferenceRecommendationsJobSteps.html) API 내)에서 확인하세요.

```
# Create a low-level SageMaker service client.
import boto3
aws_region = '<region>'
sagemaker_client = boto3.client('sagemaker', region_name=aws_region) 

# Provide the job name for the SageMaker Inference Recommender job
job_name = '<job-name>'

# Filter for benchmarks
step_type = 'BENCHMARK' 

# Filter for benchmarks that have a FAILED status
status = 'FAILED'

response = sagemaker_client.list_inference_recommendations_job_steps(
    JobName = job_name,
    StepType = step_type,
    Status = status
)
```

응답 객체를 출력하여 결과를 볼 수 있습니다. 이전 코드 예제는 응답을 `response` 변수에 저장했습니다.

```
print(response)
```