사전 조건 - 아마존 SageMaker

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

사전 조건

Amazon SageMaker Inference Recommender를 사용하려면 먼저 다음 목록의 사전 요구 사항을 충족해야 합니다. 예를 들어, 두 가지 유형의 Amazon SageMaker 추론 추천자 추천 작업에 대해 PyTorch (v1.7.1) ResNet -18 사전 학습된 모델을 사용하는 방법을 보여줍니다. 표시된 예시에서는 를 사용합니다. AWS SDK for Python (Boto3)

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

  • Amazon SageMaker 스튜디오 노트북에서 Python 3 (TensorFlow 2.6 Python 3.8 CPU 최적화) 커널을 사용하여 다음 예제를 실행할 수 있습니다. 스튜디오에 대한 자세한 내용은 을 참조하십시오. 아마존 SageMaker 스튜디오

  1. Amazon의 IAM 역할을 SageMaker 생성하십시오.

    AmazonSageMakerFullAccessIAM관리형 정책이 연결된 SageMaker Amazon의 IAM 역할을 생성합니다.

  2. 환경을 설정하세요.

    종속성을 가져오고 사용자 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()
  3. (선택 사항) Inference Recommender가 벤치마킹한 기존 모델을 확인합니다.

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

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

    이후 단계에서 도메인, 프레임워크, 프레임워크 버전, 작업 및 모델 이름을 사용하여 추론 Docker 이미지를 선택하고 Model Registry에 모델을 등록합니다. 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'
  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/

    SageMaker Amazon에서는 사전 학습된 기계 학습 모델을 압축 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/
  5. 사전 빌드된 도커 추론 이미지를 선택하거나 자체 추론 도커 이미지를 생성합니다.

    SageMaker 내장 알고리즘을 위한 컨테이너와 ApacheMXNet,,, Chainer와 같은 가장 일반적인 기계 학습 프레임워크용 사전 빌드된 Docker 이미지를 제공합니다. TensorFlow PyTorch 사용 가능한 SageMaker 이미지의 전체 목록은 사용 가능한 Deep Learning Containers 이미지를 참조하십시오.

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

    다음은 Python을 사용하여 PyTorch 버전 1.7.1 추론 이미지를 검색하는 방법을 보여줍니다. SageMaker 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 요금을 참조하십시오.

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

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

    다음은 이 예제에서 -18 모델의 이후 단계에서 사용하는.jpg 이미지를 다운로드합니다 ResNet.

    !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/

    이후 URI 단계에서 Amazon S3가 필요하므로 변수에 저장하십시오.

    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 Model Registry에 모델을 등록하거나, SageMaker 모델을 생성하고 추천 작업을 생성할 때 ContainerConfig 필드에 모델을 지정할 수 있습니다. 모델 버전 관리, 모델 배포 자동화 등 모델 레지스트리 기능을 활용하려면 첫 번째 방법을 선택하는 것이 좋습니다. 두 번째 방법은 빠르게 시작하고자 할 때 적합합니다. 첫 번째 방법을 선택하려면 7단계로 이동합니다. 두 번째 방법을 선택하려면 7단계를 건너뛰고 8단계로 이동합니다.

  8. 옵션 1: 모델 레지스트리에 모델 등록

    SageMaker Model Registry를 사용하면 프로덕션용 모델을 카탈로그화하고, 모델 버전을 관리하고, 메타데이터 (예: 교육 지표) 를 모델에 연결하고, 모델의 승인 상태를 관리하고, 모델을 프로덕션에 배포하고, CI/CD를 사용하여 모델 배포를 자동화할 수 있습니다.

    SageMaker Model Registry를 사용하여 모델을 추적하고 관리하면 모델 패키지 그룹 내에 버전이 지정된 모델 패키지로 표시됩니다. 버전이 지정되지 않은 모델 패키지는 모델 그룹에 속하지 않습니다. 모델 패키지 그룹에는 모델의 여러 버전 또는 이터레이션이 포함됩니다. 레지스트리 내 모든 모델의 버전을 생성할 필요는 없지만, 버전은 용도가 모두 같은 다양한 모델을 구성하고 자동 버전 관리 기능을 제공하는 데 도움이 됩니다.

    Amazon SageMaker 추론 추천자를 사용하려면 버전이 지정된 모델 패키지가 있어야 합니다. Amazon Studio Classic을 사용하거나 Amazon SageMaker Studio Classic을 사용하여 프로그래밍 방식으로 버전이 지정된 모델 패키지를 생성할 수 있습니다. AWS SDK for Python (Boto3) 프로그래밍 방식으로 버전이 지정된 모델 패키지를 생성하려면 먼저 를 사용하여 모델 패키지 그룹을 생성하십시오. CreateModelPackageGroup API 다음으로 를 사용하여 모델 패키지를 생성합니다. CreateModelPackage API 이 메서드를 호출하면 버전 지정 모델 패키지가 만들어집니다.

    AWS SDK for Python (Boto3) Amazon Studio Classic을 사용하여 프로그래밍 방식 및 대화형 방식으로 모델 패키지 그룹을 생성하는 방법과 각각 버전이 지정된 모델 패키지를 생성하는 방법에 모델 버전 등록 대한 자세한 지침은 및 를 참조하십시오모델 그룹 생성. SageMaker

    다음 코드 샘플에서 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.

      추론 코드를 실행하는 Docker 이미지와 모델 아티팩트의 Amazon S3 위치를 지정하고 값을 제공하여 모델 패키지를 생성합니다. InferenceSpecification InferenceSpecification다음을 포함하여 이 모델 패키지를 기반으로 하는 모델로 실행할 수 있는 추론 작업에 대한 정보를 포함해야 합니다.

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

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

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

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

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

      • 태스크: 모델 패키지가 수행하는 기계 학습 태스크. 일반적인 기계 학습 태스크에는 객체 감지 및 이미지 분류가 포함됩니다. API참조 안내서에 나열된 작업 중 사용 사례에 맞는 작업이 없는 경우 OTHER "“를 지정하십시오. 지원되는 기계 학습 작업 목록은 작업 API 필드 설명을 참조하십시오.

      • SamplePayloadUrl: 샘플 페이로드가 저장되는 Amazon Simple Storage 서비스 (Amazon S3) 경로입니다. 이 경로는 단일 GZIP 압축 TAR 아카이브 (.tar.gz 접미사) 를 가리켜야 합니다.

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

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

      에 대한 추론을 실시간으로 생성하는 데 사용할 인스턴스 유형의 허용 목록을 제공하는 경우 Inference Recommender는 작업 중 인스턴스 유형에 대한 검색 공간을 제한합니다. SupportedRealtimeInferenceInstanceTypesDefault 예산 제약이 있거나 모델 및 컨테이너 이미지를 지원할 수 있는 특정 인스턴스 유형 세트가 있음을 것을 알고 있는 경우, 이 파라미터를 사용합니다.

      이전 단계에서는 사전 학습된 ResNet 1.8 모델을 다운로드하여 Amazon S3 버킷의 라는 models 디렉터리에 저장했습니다. PyTorch (v1.7.1) 딥 러닝 컨테이너 추론 이미지를 검색하여 이라는 변수에 저장했습니다. URI image_uri 다음 코드 샘플에서 이러한 변수를 사용하여 에 대한 입력으로 사용되는 사전을 정의합니다. CreateModelPackageAPI

      # 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 추론 ARN 추천기를 사용하려면 모델 패키지가 필요합니다. 모델 패키지를 ARN 기록해 두거나 변수에 저장하십시오.

      model_package_arn = model_package_response["ModelPackageArn"] print('ModelPackage Version ARN : {}'.format(model_package_arn))
  9. 옵션 2: 모델 생성 및 ContainerConfig 필드 구성

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

    1. 모델 생성

      를 사용하여 모델을 생성합니다 CreateModelAPI. SageMaker 호스팅에 모델을 배포할 때 이 메서드를 호출하는 예제는 Create a Model (AWS SDK for Python (Boto3)) 을 참조하십시오.

      이전 단계에서는 사전 학습된 ResNet 1.8 모델을 다운로드하여 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 사용하여 입력으로 사용되는 사전을 정의합니다 CreateInferenceRecommendationsJobAPI.

      ## 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, }