Amazon SageMaker 추론 추천자를 사용하기 위한 사전 조건 - Amazon SageMaker AI

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

Amazon SageMaker 추론 추천자를 사용하기 위한 사전 조건

Amazon SageMaker Inference Recommender 사용할 수 있기 전에 충족해야 하는 필수 조건을 설명합니다. 예를 들어, PyTorch(v1.7.1) ResNet-18 사전 훈련된 모델을 두 가지 유형의 Amazon SageMaker Inference Recommender 권장 작업에 모두 적용하는 방법을 살펴봅시다. 여기에 표시된 예제에서는 AWS SDK for Python (Boto3)을 사용합니다.

참고
  • 다음 코드 예제에서는 Python을 적용합니다. 터미널이나 AWS CLI에서 다음 코드 샘플을 실행하는 경우 ! 접두사 문자를 제거합니다.

  • Amazon SageMaker Studio 노트북에서 Python 3(TensorFlow 2.6 Python 3.8 CPU 최적화) 커널을 사용하여 다음 예제를 실행할 수 있습니다. 신뢰에 대한 자세한 내용은 Amazon SageMaker Studio 섹션을 참조하세요.

  1. Amazon SageMaker AI에 대한 IAM 역할을 생성합니다.

    IAM 관리형 정책이 연결된 Amazon SageMaker AI에 대한 AmazonSageMakerFullAccess IAM 역할을 생성합니다.

  2. 환경을 설정합니다.

    종속성을 가져오고 AWS 리전, SageMaker AI IAM 역할(1단계에서) 및 SageMaker AI 클라이언트에 대한 변수를 생성합니다.

    !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()
  3. (선택 사항) Inference Recommender가 벤치마킹한 기존 모델을 확인합니다.

    Inference Recommender는 인기 모델주에 있는 모델을 벤치마킹합니다. Inference Recommender는 아직 벤치마킹되지 않은 모델도 지원합니다.

    ListModelMetaData을(를) 활용하여 일반적인 모델주에서 발견되는 기계 학습 모델의 도메인, 프레임워크, 태스크, 모델 이름을 나열하는 응답 객체를 가져옵니다.

    이 도메인, 프레임워크, 프레임워크 버전, 태스크, 모델 이름을 다음 단계에서 사용하여 추론 도커 이미지를 선택하고 SageMaker 모델 레지스트리에 모델을 등록합니다. 다음은 Python용 SDK(Boto3)를 사용하여 모델 메타데이터를 나열하는 방법입니다.

    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'
  4. 기계 학습 모델을 Amazon S3에 업로드합니다.

    사전 훈련된 기계 학습 모델이 없는 경우 이 PyTorch(v1.7.1) ResNet-18 모델을 사용합니다.

    # 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 AI를 사용하려면 사전 훈련된 기계 학습 모델을 압축된 TAR 파일()로 패키징해야 합니다*.tar.gz. 이 요구 사항에 맞게 모델 및 추론 스크립트를 압축합니다.

    !tar -czf test.tar.gz model.pth code/inference.py

    엔드포인트가 프로비저닝되면 아카이브 내 파일이 엔드포인트에 있는 /opt/ml/model/(으)로 추출됩니다.

    모델 및 모델 아티팩트를 .tar.gz 파일로 압축한 후 Amazon S3 버킷에 업로드합니다. 다음 예는 AWS CLI을(를) 사용하여 Amazon S3에 모델을 업로드하는 방법입니다.

    !aws s3 cp test.tar.gz s3://{your-bucket}/models/
  5. 사전 빌드된 도커 추론 이미지를 선택하거나 자체 추론 도커 이미지를 생성합니다.

    SageMaker AI는 Apache MXNet, TensorFlow, PyTorch, Chainer와 같은 가장 일반적인 기계 학습 프레임워크 중 일부를 위한 기본 제공 알고리즘 및 사전 구축된 Docker 이미지를 위한 컨테이너를 제공합니다. 사용 가능한 SageMaker AI 이미지의 전체 목록은 사용 가능한 딥 러닝 컨테이너 이미지를 참조하세요.

    기존 SageMaker AI 컨테이너 중 요구 사항을 충족하는 컨테이너가 없고 자체 컨테이너가 없는 경우 새 Docker 이미지를 생성합니다. 도커 이미지 생성 방법에 대한 정보는 사용자 지정 추론 코드가 있는 컨테이너에서 확인하세요.

    다음은 SageMaker Python SDK를 사용하여 PyTorch 버전 1.7.1 추론 이미지를 검색하는 방법입니다.

    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 AI 인스턴스 목록은 Amazon SageMaker AI 요금을 참조하세요.

  6. 샘플 페이로드 아카이브를 생성합니다.

    로드 테스트 도구가 SageMaker AI 엔드포인트로 전송할 수 있는 개별 파일이 포함된 아카이브를 생성합니다. 추론 코드는 샘플 페이로드에서 파일 형식을 읽을 수 있어야 합니다.

    다음은 이 예제에서 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 S3 URI는 이후 단계에서 필요하므로 변수에 저장합니다.

    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}"
  7. 권장 작업용 모델 입력 준비

    마지막 필수 조건으로, 모델 입력을 준비하는 방법은 두 가지가 있습니다. 모델을 SageMaker 모델 레지스트리에 등록하여 프로덕션용 모델을 카탈로그화하거나, SageMaker AI 모델을 생성하여 추천 작업을 생성할 때 ContainerConfig 필드에 지정할 수 있습니다. 모델 버전 관리, 모델 배포 자동화 등 모델 레지스트리 기능을 활용하려면 첫 번째 방법을 선택하는 것이 좋습니다. 두 번째 방법은 빠르게 시작하고자 할 때 적합합니다. 첫 번째 방법을 선택하려면 7단계로 이동합니다. 두 번째 방법을 선택하려면 7단계를 건너뛰고 8단계로 이동합니다.

  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 작업을 생성할 때는 모델 패키지를 승인할 필요가 없습니다.

    1. 모델 패키지 그룹 생성

      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 위치를 지정하고 InferenceSpecification 값을 입력하여 모델 패키지를 생성합니다. InferenceSpecification에는 이 모델 패키지를 기반으로 하는 모델로 실행할 수 있는 추론 작업에 대한 정보가 포함되어야 합니다(다음 포함).

      • 추론 코드를 실행하는 이미지의 Amazon ECR 경로.

      • (선택 사항) 모델 패키지가 작업 변환과 실시간 추론 엔드포인트를 지원하는 인스턴스 유형.

      • 모델 패키지가 추론을 지원하는 입력 및 출력 콘텐츠 형식.

      또한 모델 패키지를 생성할 때 다음 파라미터도 지정해야 합니다.

      • 도메인: 모델 패키지 및 해당 구성 요소의 기계 학습 도메인. 일반적인 기계 학습 영역에는 컴퓨터 비전과 자연어 처리가 포함됩니다.

      • 태스크: 모델 패키지가 수행하는 기계 학습 태스크. 일반적인 기계 학습 태스크에는 객체 감지 및 이미지 분류가 포함됩니다. API 참조 안내서에 나열된 태스크 중 사용 사례에 맞는 것이 없을 경우 ‘기타(OTHER)’로 지정합니다. 태스크 API 필드 설명에서 지원되는 기계 학습 태스크 목록을 확인하세요.

      • SamplePayloadUrl: 샘플 페이로드가 저장되는 Amazon Simple Storage Service(S3) 경로. 경로는 반드시 단일 gzip으로 압축된 tar 아카이브로 지정해야 합니다(.tar.gz 접미사).

      • 프레임워크: 모델 패키지 컨테이너 이미지의 기계 학습 프레임워크.

      • FrameworkVersion: 모델 패키지 컨테이너 이미지의 프레임워크 버전입니다.

      SupportedRealtimeInferenceInstanceTypes에 대한 실시간 추론 생성 시 사용되는 인스턴스 유형 허용 목록을 입력하면, Inference 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] } }
    2. 모델 패키지 생성

      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))
  9. 옵션 2: 모델 생성 및 ContainerConfig 필드 구성

    추론 권장 작업을 시작하고 모델 레지스트리에 모델을 등록할 필요가 없는 경우, 이 옵션을 사용합니다. 다음 단계에서는 SageMaker AI에서 모델을 생성하고 ContainerConfig 필드를 추천 작업에 대한 입력으로 구성합니다.

    1. 모델 생성

      CreateModel API로 모델을 생성합니다. SageMaker AI 호스팅에 모델을 배포할 때이 메서드를 호출하는 예제는 모델 생성(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, })
    2. ContainerConfig 필드 구성

      그 다음, 방금 생성한 모델로 ContainerConfig 필드를 구성하고 그 안에 다음 파라미터를 지정해야 합니다.

      • Domain: 모델 및 해당 구성 요소의 기계 학습 도메인(예: 컴퓨터 비전, 자연어 처리).

      • Task: 모델이 수행하는 기계 학습 태스크(예: 이미지 분류, 객체 감지).

      • PayloadConfig: 권장 작업을 위한 페이로드 구성. 하위 필드에 대한 자세한 정보는 RecommendationJobPayloadConfig에서 확인하세요.

      • Framework: PyTorch 등 컨테이너 이미지의 기계 학습 프레임워크.

      • FrameworkVersion: 컨테이너 이미지의 프레임워크 버전.

      • (선택 사항) SupportedInstanceTypes: 실시간으로 추론을 생성하는 데 사용되는 인스턴스 유형의 목록.

      SupportedInstanceTypes 파라미터 사용 시, Inference Recommender는 Default 작업 중 인스턴스 유형에 대한 검색 공간을 제한합니다. 예산 제약이 있거나 모델 및 컨테이너 이미지를 지원할 수 있는 특정 인스턴스 유형 세트가 있음을 것을 알고 있는 경우, 이 파라미터를 사용합니다.

      다음 코드 예제에서는 이전에 정의한 파라미터와 NearestModelName을(를) 사용하여 CreateInferenceRecommendationsJob 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, }