기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon SageMaker Inference Recommender를 사용하기 위한 사전 조건
Amazon SageMaker Inference Recommender를 사용하려면 먼저 사전 조건 단계를 완료해야 합니다. 예를 들어 두 유형의 Amazon SageMaker Inference Recommender 추천 작업에 대해 PyTorch (v1.7.1)- ResNet18 사전 훈련된 모델을 사용하는 방법을 보여줍니다. 표시된 예제에서는 를 사용합니다 AWS SDK for Python (Boto3).
참고
-
다음 코드 예제에서는 Python을 적용합니다. 터미널이나 AWS CLI에서 다음 코드 샘플을 실행하는 경우
!
접두사 문자를 제거합니다. -
Amazon SageMaker Studio 노트북에서 Python 3(TensorFlow 2.6 Python 3.8 CPU Optimized) 커널을 사용하여 다음 예제를 실행할 수 있습니다. Studio에 대한 자세한 내용은 섹션을 참조하세요Amazon SageMaker Studio.
-
Amazon 에 대한 IAM 역할을 생성합니다 SageMaker.
AmazonSageMakerFullAccess
IAM 관리형 정책 SageMaker 이 연결된 Amazon의 IAM 역할을 생성합니다. -
환경을 설정합니다.
종속성을 가져오고 AWS 리전, SageMaker IAM 역할(1단계부터) 및 SageMaker 클라이언트에 대한 변수를 생성합니다.
!pip install --upgrade pip awscli botocore boto3 --quiet from sagemaker import get_execution_role, Session, image_uris import boto3 region = boto3.Session().region_name role = get_execution_role() sagemaker_client = boto3.client("sagemaker", region_name=region) sagemaker_session = Session()
-
(선택 사항) Inference Recommender가 벤치마킹한 기존 모델을 확인합니다.
Inference Recommender는 인기 모델주에 있는 모델을 벤치마킹합니다. Inference Recommender는 아직 벤치마킹되지 않은 모델도 지원합니다.
ListModelMetaData
을(를) 활용하여 일반적인 모델주에서 발견되는 기계 학습 모델의 도메인, 프레임워크, 태스크, 모델 이름을 나열하는 응답 객체를 가져옵니다.나중에 도메인, 프레임워크, 프레임워크 버전, 작업 및 모델 이름을 사용하여 추론 도커 이미지를 선택하고 모델을 SageMaker 모델 레지스트리에 등록합니다. 다음은 Python(Boto3)SDK용 를 사용하여 모델 메타데이터를 나열하는 방법을 보여줍니다.
list_model_metadata_response=sagemaker_client.list_model_metadata()
출력에는 다음 예제와 유사한 모델 요약(
ModelMetadataSummaries
) 및 응답 메타데이터(ResponseMetadata
)가 포함됩니다.{ 'ModelMetadataSummaries': [{ 'Domain': 'NATURAL_LANGUAGE_PROCESSING', 'Framework': 'PYTORCH:1.6.0', 'Model': 'bert-base-cased', 'Task': 'FILL_MASK' }, { 'Domain': 'NATURAL_LANGUAGE_PROCESSING', 'Framework': 'PYTORCH:1.6.0', 'Model': 'bert-base-uncased', 'Task': 'FILL_MASK' }, { 'Domain': 'COMPUTER_VISION', 'Framework': 'MXNET:1.8.0', 'Model': 'resnet18v2-gluon', 'Task': 'IMAGE_CLASSIFICATION' }, { 'Domain': 'COMPUTER_VISION', 'Framework': 'PYTORCH:1.6.0', 'Model': 'resnet152', 'Task': 'IMAGE_CLASSIFICATION' }], 'ResponseMetadata': { 'HTTPHeaders': { 'content-length': '2345', 'content-type': 'application/x-amz-json-1.1', 'date': 'Tue, 19 Oct 2021 20:52:03 GMT', 'x-amzn-requestid': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }, 'HTTPStatusCode': 200, 'RequestId': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'RetryAttempts': 0 } }
이 데모에서는 PyTorch (v1.7.1) ResNet-18 모델을 사용하여 이미지 분류를 수행합니다. 다음 Python 코드 샘플은 프레임워크, 프레임워크 버전, 도메인, 태스크를 나중에 사용할 수 있도록 변수에 저장합니다.
# ML framework details framework = 'pytorch' framework_version = '1.7.1' # ML model details ml_domain = 'COMPUTER_VISION' ml_task = 'IMAGE_CLASSIFICATION'
-
기계 학습 모델을 Amazon S3에 업로드합니다.
사전 훈련된 기계 학습 모델이 없는 경우 이 PyTorch (v1.7.1)- ResNet18 모델을 사용합니다.
# Optional: Download a sample PyTorch model import torch from torchvision import models, transforms, datasets # Create an example input for tracing image = torch.zeros([1, 3, 256, 256], dtype=torch.float32) # Load a pretrained resnet18 model from TorchHub model = models.resnet18(pretrained=True) # Tell the model we are using it for evaluation (not training). Note this is required for Inferentia compilation. model.eval() model_trace = torch.jit.trace(model, image) # Save your traced model model_trace.save('model.pth')
샘플 추론 스크립트
inference.py
을(를) 다운로드합니다.code
디렉터리를 만들고 추론 스크립트를code
디렉터리로 옮깁니다.# Download the inference script !wget https://aws-ml-blog-artifacts.s3.us-east-2.amazonaws.com/inference.py # move it into a code/ directory !mkdir code !mv inference.py code/
Amazon SageMaker 은 사전 훈련된 기계 학습 모델을 압축 TAR 파일()로 패키징해야 합니다
*.tar.gz
. 모델 및 추론 스크립트를 압축하여 이 요구 사항을 충족합니다.!tar -czf test.tar.gz model.pth code/inference.py
엔드포인트가 프로비저닝되면 아카이브 내 파일이 엔드포인트에 있는
/opt/ml/model/
(으)로 추출됩니다.모델 및 모델 아티팩트를
.tar.gz
파일로 압축한 후 Amazon S3 버킷에 업로드합니다. 다음 예제에서는 를 사용하여 모델을 Amazon S3에 업로드하는 방법을 보여줍니다 AWS CLI.!aws s3 cp test.tar.gz s3://
{your-bucket}
/models/ -
사전 빌드된 도커 추론 이미지를 선택하거나 자체 추론 도커 이미지를 생성합니다.
SageMaker 는 Apache ,MXNet TensorFlow PyTorch, 및 Chainer와 같은 가장 일반적인 기계 학습 프레임워크에 기본 제공 알고리즘 및 사전 구축된 Docker 이미지를 위한 컨테이너를 제공합니다. 사용 가능한 SageMaker 이미지의 전체 목록은 사용 가능한 딥 러닝 컨테이너 이미지 섹션을 참조하세요
. 기존 SageMaker 컨테이너 중 요구 사항을 충족하는 컨테이너가 없고 자체 컨테이너가 없는 경우 새 Docker 이미지를 생성합니다. 도커 이미지 생성 방법에 대한 정보는 사용자 지정 추론 코드가 있는 컨테이너에서 확인하세요.
다음은 SageMaker Python 을 사용하여 PyTorch 버전 1.7.1 추론 이미지를 검색하는 방법을 보여줍니다SDK.
from sagemaker import image_uris ## Uncomment and replace with your own values if you did not define ## these variables a previous step. #framework = 'pytorch' #framework_version = '1.7.1' # Note: you can use any CPU-based instance here, # this is just to set the arch as CPU for the Docker image instance_type = 'ml.m5.2xlarge' image_uri = image_uris.retrieve(framework, region, version=framework_version, py_version='py3', instance_type=instance_type, image_scope='inference')
사용 가능한 SageMaker 인스턴스 목록은 Amazon SageMaker 요금 섹션을
참조하세요. -
샘플 페이로드 아카이브를 생성합니다.
로드 테스트 도구가 SageMaker 엔드포인트에 전송할 수 있는 개별 파일이 포함된 아카이브를 생성합니다. 추론 코드는 샘플 페이로드에서 파일 형식을 읽을 수 있어야 합니다.
다음은 이 예제가 ResNet-18 모델의 이후 단계에서 사용하는 .jpg 이미지를 다운로드합니다.
!wget https://cdn.pixabay.com/photo/2020/12/18/05/56/flowers-5841251_1280.jpg
샘플 페이로드를 tarball로 압축합니다.
!tar -cvzf payload.tar.gz flowers-5841251_1280.jpg
샘플 페이로드를 Amazon S3에 업로드하고 Amazon S3 를 기록해 둡니다URI.
!aws s3 cp payload.tar.gz s3://{bucket}/models/
이후 단계에서 Amazon S3URI가 필요하므로 변수에 저장합니다.
bucket_prefix='models' bucket =
'<your-bucket-name>'
# Provide the name of your S3 bucket payload_s3_key = f"{bucket_prefix}/payload.tar.gz" sample_payload_url= f"s3://{bucket}/{payload_s3_key}" -
권장 작업용 모델 입력 준비
마지막 필수 조건으로, 모델 입력을 준비하는 방법은 두 가지가 있습니다. 모델을 SageMaker 모델 레지스트리에 등록하여 프로덕션용 모델을 카탈로그화하거나 추천 작업을 생성할 때 SageMaker 모델을 생성하고
ContainerConfig
필드에 지정할 수 있습니다. 모델 버전 관리, 모델 배포 자동화 등 모델 레지스트리 기능을 활용하려면 첫 번째 방법을 선택하는 것이 좋습니다. 두 번째 방법은 빠르게 시작하고자 할 때 적합합니다. 첫 번째 방법을 선택하려면 7단계로 이동합니다. 두 번째 방법을 선택하려면 7단계를 건너뛰고 8단계로 이동합니다. -
옵션 1: 모델 레지스트리에 모델 등록
SageMaker 모델 레지스트리를 사용하면 프로덕션용 모델을 카탈로그화하고, 모델 버전을 관리하고, 메타데이터(예: 훈련 지표)를 모델과 연결하고, 모델의 승인 상태를 관리하고, 모델을 프로덕션에 배포하고, CI/CD를 사용하여 모델 배포를 자동화할 수 있습니다.
SageMaker 모델 레지스트리를 사용하여 모델을 추적하고 관리하면 모델 패키지 그룹 내에서 모델 패키지가 버전화된 모델 패키지로 표시됩니다. 버전 미지정 모델 패키지는 모델 그룹의 일부가 아닙니다. 모델 패키지 그룹에는 모델의 여러 버전 또는 이터레이션이 포함됩니다. 레지스트리 내 모든 모델의 버전을 생성할 필요는 없지만, 버전은 용도가 모두 같은 다양한 모델을 구성하고 자동 버전 관리 기능을 제공하는 데 도움이 됩니다.
Amazon SageMaker Inference Recommender를 사용하려면 버전이 지정된 모델 패키지가 있어야 합니다. AWS SDK for Python (Boto3) 또는 Amazon SageMaker Studio Classic을 사용하여 프로그래밍 방식으로 버전 모델 패키지를 생성할 수 있습니다. 프로그래밍 방식으로 버전화된 모델 패키지를 생성하려면 먼저
CreateModelPackageGroup
를 사용하여 모델 패키지 그룹을 생성합니다API. 그런 다음CreateModelPackage
를 사용하여 모델 패키지를 생성합니다API. 이 메서드를 호출하면 버전 지정 모델 패키지가 만들어집니다.모델 그룹 생성 및 Amazon SageMaker Studio Classic을 사용하여 각각 프로그래밍 방식 및 대화형으로 모델 패키지 그룹을 생성하는 방법과 버전 모델 패키지를 생성하는 방법에 모델 버전 등록 대한 자세한 지침은 AWS SDK for Python (Boto3) 및 섹션을 참조하세요.
다음 코드 샘플에서 AWS SDK for Python (Boto3)을(를) 사용하여 버전 지정 모델 패키지를 생성하는 방법을 볼 수 있습니다.
참고
Inference Recommender 작업을 생성할 때는 모델 패키지를 승인할 필요가 없습니다.
-
모델 패키지 그룹 생성
를 사용하여 모델 패키지 그룹을 생성합니다
CreateModelPackageGroup
API.ModelPackageGroupName
에 대한 모델 패키지 그룹 이름을 입력하고 선택적으로ModelPackageGroupDescription
필드에 모델 패키지 설명을 입력합니다.model_package_group_name =
'<INSERT>'
model_package_group_description ='<INSERT>'
model_package_group_input_dict = { "ModelPackageGroupName" : model_package_group_name, "ModelPackageGroupDescription" : model_package_group_description, } model_package_group_response = sagemaker_client.create_model_package_group(**model_package_group_input_dict)에 전달할 수 있는 선택적 및 필수 인수의 전체 목록은 Amazon SageMaker API 참조 가이드를 참조하세요
CreateModelPackageGroup
.추론 코드와 모델 아티팩트의 Amazon S3 위치를 실행하는 Docker 이미지를 지정하고 에 값을 제공하여 모델 패키지를 생성합니다
InferenceSpecification
. 에는 다음을 포함하여 이 모델 패키지를 기반으로 모델로 실행할 수 있는 추론 작업에 대한 정보가 포함되어InferenceSpecification
있습니다.-
추론 코드를 실행하는 이미지의 Amazon ECR 경로입니다.
-
(선택 사항) 모델 패키지가 추론에 사용되는 변환 작업 및 실시간 엔드포인트에 대해 지원하는 인스턴스 유형입니다.
-
모델 패키지가 추론에 대해 지원하는 입력 및 출력 콘텐츠 형식입니다.
또한 모델 패키지를 생성할 때 다음 파라미터도 지정해야 합니다.
-
도메인: 모델 패키지 및 해당 구성 요소의 기계 학습 도메인. 일반적인 기계 학습 영역에는 컴퓨터 비전과 자연어 처리가 포함됩니다.
-
태스크: 모델 패키지가 수행하는 기계 학습 태스크. 일반적인 기계 학습 태스크에는 객체 감지 및 이미지 분류가 포함됩니다. API 참조 가이드에 나열된 태스크 중 사용 사례를 충족하는 태스크가 없는 경우 “OTHER”를 지정합니다. 지원되는 기계 학습 작업 목록은 작업 API 필드 설명을 참조하세요.
-
SamplePayloadUrl: 샘플 페이로드가 저장되는 Amazon Simple Storage Service(Amazon S3) 경로입니다. 이 경로는 단일 GZIP 압축 TAR 아카이브(.tar.gz 접미사)를 가리켜야 합니다.
-
프레임워크: 모델 패키지 컨테이너 이미지의 기계 학습 프레임워크.
-
FrameworkVersion: 모델 패키지 컨테이너 이미지의 프레임워크 버전입니다.
에 대한 추론을 실시간으로 생성하는 데 사용할 인스턴스 유형의 허용 목록을 제공하는 경우 SupportedRealtimeInferenceInstanceTypesInference Recommender는
Default
작업 중에 인스턴스 유형에 대한 검색 공간을 제한합니다. 예산 제약이 있거나 모델 및 컨테이너 이미지를 지원할 수 있는 특정 인스턴스 유형 세트가 있음을 것을 알고 있는 경우, 이 파라미터를 사용합니다.이전 단계에서는 사전 훈련된 ResNet18 모델을 다운로드하여 라는 디렉터리의 Amazon S3 버킷에 저장했습니다
models
. PyTorch (v1.7.1) 딥 러닝 컨테이너 추론 이미지를 검색하고 라는 변수URI에 를 저장했습니다image_uri
. 다음 코드 샘플에서 이러한 변수를 사용하여CreateModelPackage
에 대한 입력으로 사용되는 사전을 정의합니다API.# Provide the Amazon S3 URI of your compressed tarfile # so that Model Registry knows where to find your model artifacts bucket_prefix='models' bucket =
'<your-bucket-name>'
# Provide the name of your S3 bucket model_s3_key = f"{bucket_prefix}/test.tar.gz" model_url= f"s3://{bucket}/{model_s3_key}" # Similar open source model to the packaged model # The name of the ML model as standardized by common model zoos nearest_model_name = 'resnet18' # The supported MIME types for input and output data. In this example, # we are using images as input. input_content_type='image/jpeg' # Optional - provide a description of your model. model_package_description ='<INSERT>'
## Uncomment if you did not store the domain and task in an earlier ## step #ml_domain = 'COMPUTER_VISION' #ml_task = 'IMAGE_CLASSIFICATION' ## Uncomment if you did not store the framework and framework version ## in a previous step. #framework = 'PYTORCH' #framework_version = '1.7.1' # Optional: Used for optimizing your model using SageMaker Neo # PyTorch uses NCHW format for images data_input_configuration = "[[1,3,256,256]]" # Create a dictionary to use as input for creating a model pacakge group model_package_input_dict = { "ModelPackageGroupName" : model_package_group_name, "ModelPackageDescription" : model_package_description, "Domain": ml_domain, "Task": ml_task, "SamplePayloadUrl": sample_payload_url, "InferenceSpecification": { "Containers": [ { "Image": image_uri, "ModelDataUrl": model_url, "Framework": framework.upper(), "FrameworkVersion": framework_version, "NearestModelName": nearest_model_name, "ModelInput": {"DataInputConfig": data_input_configuration} } ], "SupportedContentTypes": [input_content_type] } } -
-
모델 패키지 생성
CreateModelPackage
API 를 사용하여 모델 패키지를 생성합니다. 이전 단계에서 정의한 입력 사전을 전달합니다.model_package_response = sagemaker_client.create_model_package(**model_package_input_dict)
Amazon SageMaker Inference Recommender를 사용하려면 모델 패키지ARN가 필요합니다. 모델 패키지ARN의 를 참고하거나 변수에 저장합니다.
model_package_arn = model_package_response["ModelPackageArn"] print('ModelPackage Version ARN : {}'.format(model_package_arn))
-
-
옵션 2: 모델 생성 및
ContainerConfig
필드 구성추론 권장 작업을 시작하고 모델 레지스트리에 모델을 등록할 필요가 없는 경우, 이 옵션을 사용합니다. 다음 단계에서는 에서 모델을 생성하고
ContainerConfig
필드를 추천 작업에 대한 입력으로 SageMaker 구성합니다.-
모델 생성
를 사용하여 모델을 생성합니다
CreateModel
API. SageMaker 모델을 호스팅에 배포할 때 이 방법을 호출하는 예제는 모델 생성(AWS SDK for Python (Boto3))을 참조하세요.이전 단계에서는 사전 훈련된 ResNet18 모델을 다운로드하여 라는 디렉터리의 Amazon S3 버킷에 저장했습니다
models
. PyTorch (v1.7.1) 딥 러닝 컨테이너 추론 이미지를 검색하고 라는 변수URI에 를 저장했습니다image_uri
. 다음 코드 예제에서는 이러한 변수를 사용하여CreateModel
에 대한 입력으로 사용되는 사전을 정의합니다API.model_name = '
<name_of_the_model>
' # Role to give SageMaker permission to access AWS services. sagemaker_role= "arn:aws:iam::<region>
:<account>
:role/*" # Provide the Amazon S3 URI of your compressed tarfile # so that Model Registry knows where to find your model artifacts bucket_prefix='models' bucket = '<your-bucket-name>
' # Provide the name of your S3 bucket model_s3_key = f"{bucket_prefix}/test.tar.gz" model_url= f"s3://{bucket}/{model_s3_key}" #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': image_uri, 'ModelDataUrl': model_url, }) -
ContainerConfig
필드 구성다음으로 방금 생성한 모델로 ContainerConfig 필드를 구성하고 다음 파라미터를 지정해야 합니다.
-
Domain
: 모델 및 해당 구성 요소의 기계 학습 도메인(예: 컴퓨터 비전, 자연어 처리). -
Task
: 모델이 수행하는 기계 학습 태스크(예: 이미지 분류, 객체 감지). -
PayloadConfig
: 권장 작업을 위한 페이로드 구성. 하위 필드에 대한 자세한 정보는RecommendationJobPayloadConfig
에서 확인하세요. -
Framework
: 와 같은 컨테이너 이미지의 기계 학습 프레임워크입니다 PyTorch. -
FrameworkVersion
: 컨테이너 이미지의 프레임워크 버전. -
(선택 사항)
SupportedInstanceTypes
: 실시간으로 추론을 생성하는 데 사용되는 인스턴스 유형의 목록.
SupportedInstanceTypes
파라미터 사용 시, Inference Recommender는Default
작업 중 인스턴스 유형에 대한 검색 공간을 제한합니다. 예산 제약이 있거나 모델 및 컨테이너 이미지를 지원할 수 있는 특정 인스턴스 유형 세트가 있음을 것을 알고 있는 경우, 이 파라미터를 사용합니다.다음 코드 예제에서는 이전에 정의된 파라미터를 와 함께 사용하여
CreateInferenceRecommendationsJob
에 대한 입력으로 사용되는 사전을NearestModelName
정의합니다API.## Uncomment if you did not store the domain and task in a previous step #ml_domain = 'COMPUTER_VISION' #ml_task = 'IMAGE_CLASSIFICATION' ## Uncomment if you did not store the framework and framework version in a previous step #framework = 'PYTORCH' #framework_version = '1.7.1' # The name of the ML model as standardized by common model zoos nearest_model_name = 'resnet18' # The supported MIME types for input and output data. In this example, # we are using images as input input_content_type='image/jpeg' # Optional: Used for optimizing your model using SageMaker Neo # PyTorch uses NCHW format for images data_input_configuration = "[[1,3,256,256]]" # Create a dictionary to use as input for creating an inference recommendation job container_config = { "Domain": ml_domain, "Framework": framework.upper(), "FrameworkVersion": framework_version, "NearestModelName": nearest_model_name, "PayloadConfig": { "SamplePayloadUrl": sample_payload_url, "SupportedContentTypes": [ input_content_type ] }, "DataInputConfig": data_input_configuration "Task": ml_task, }
-
-