배포를 위한 모델 준비 - Amazon SageMaker

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

배포를 위한 모델 준비

이 섹션에서는 객체 SageMaker 를 생성하고 AWS IoT 클라이언트를 만들고, 사전 훈련된 기계 학습 모델을 다운로드하고, 모델을 Amazon S3 버킷에 업로드하고, SageMaker Neo를 사용하여 대상 디바이스의 모델을 컴파일하고, Edge Manager 에이전트와 함께 배포할 수 있도록 모델을 패키징합니다.

  1. 라이브러리를 가져오고 클라이언트 객체를 생성합니다.

    이 자습서에서는 AWS SDK for Python (Boto3) 를 사용하여 SageMaker, Amazon S3 및 와 상호 작용할 클라이언트를 생성합니다 AWS IoT.

    Boto3를 가져오고, 리전을 지정하고, 다음 예제와 같이 필요한 클라이언트 객체를 초기화합니다.

    import boto3 import json import time AWS_REGION = 'us-west-2'# Specify your Region bucket = 'bucket-name' sagemaker_client = boto3.client('sagemaker', region_name=AWS_REGION) iot_client = boto3.client('iot', region_name=AWS_REGION)

    변수를 정의하고 SageMaker 및 AWS IoT 에 대해 ARN 생성한 역할을 문자열로 할당합니다.

    # Replace with the role ARN you created for SageMaker sagemaker_role_arn = "arn:aws:iam::<account>:role/*" # Replace with the role ARN you created for AWS IoT. # Note: The name must start with 'SageMaker' iot_role_arn = "arn:aws:iam::<account>:role/SageMaker*"
  2. 기계 학습 모델을 훈련시킵니다.

    를 사용하여 기계 학습 모델을 훈련하는 방법에 대한 자세한 내용은 Amazon을 SageMaker 사용하여 모델 훈련을 참조하세요 SageMaker. 선택적으로 로컬에서 훈련된 모델을 Amazon S3 URI 버킷에 직접 업로드할 수 있습니다.

    아직 모델이 없는 경우, 이 자습서의 다음 단계에서 사전 훈련된 모델을 사용할 수 있습니다. 예를 들어 TensorFlow 프레임워크에서 MobileNet V2 모델을 저장할 수 있습니다. MobileNet V2는 모바일 애플리케이션에 최적화된 이미지 분류 모델입니다. MobileNet V2에 대한 자세한 내용은 섹션을 참조하세요MobileNet GitHub README.

    Jupyter Notebook에 다음을 입력하여 사전 훈련된 MobileNet V2 모델을 저장합니다.

    # Save the MobileNet V2 model to local storage import tensorflow as tf model = tf.keras.applications.MobileNetV2() model.save(“mobilenet_v2.h5”)
    참고
    • 를 TensorFlow 설치하지 않은 경우 를 실행하여 설치할 수 있습니다. pip install tensorflow=2.4

    • 이 자습서에서는 TensorFlow 버전 2.4 이하를 사용합니다.

    모델이 mobilenet_v2.h5 파일에 저장됩니다. 모델을 패키징하기 전에 먼저 SageMaker Neo를 사용하여 모델을 컴파일해야 합니다. 의 버전 TensorFlow (또는 선택한 다른 프레임워크)이 현재 SageMaker Neo에서 지원되는지 지원되는 프레임워크, 디바이스, 시스템, 아키텍처 확인하려면 섹션을 참조하세요.

    SageMaker Neo에서는 모델을 압축 TAR 파일로 저장해야 합니다. 압축된 TAR 파일(*.tar.gz)로 다시 패키징합니다.

    # Package MobileNet V2 model into a TAR file import tarfile tarfile_name='mobilenet-v2.tar.gz' with tarfile.open(tarfile_name, mode='w:gz') as archive: archive.add('mobilenet-v2.h5')
  3. Amazon S3에 모델을 업로드합니다.

    기계 학습 모델을 확보한 후 Amazon S3 버킷에 저장합니다. 다음 예제에서는 AWS CLI 명령을 사용하여 모델 이라는 디렉터리에서 이전에 생성한 Amazon S3 버킷에 모델을 업로드합니다. Jupyter Notebook에 다음을 입력합니다.

    !aws s3 cp mobilenet-v2.tar.gz s3://{bucket}/models/
  4. SageMaker Neo로 모델을 컴파일합니다.

    엣지 디바이스용 SageMaker Neo로 기계 학습 모델을 컴파일합니다. 훈련된 모델을 저장URI한 Amazon S3 버킷, 모델을 훈련하는 데 사용한 기계 학습 프레임워크, 모델 입력의 모양 및 대상 디바이스를 알아야 합니다.

    MobileNet V2 모델의 경우 다음을 사용합니다.

    framework = 'tensorflow' target_device = 'jetson_nano' data_shape = '{"data":[1,3,224,224]}'

    SageMaker Neo에는 사용하는 딥 러닝 프레임워크를 기반으로 하는 특정 모델 입력 모양과 모델 형식이 필요합니다. 모델 저장 방법에 대한 자세한 정보는 SageMaker Neo는 어떤 입력 데이터 형태를 예상합니까?에서 확인하세요. Neo에서 지원되는 디바이스와 프레임워크에 대한 자세한 정보는 지원되는 프레임워크, 디바이스, 시스템, 아키텍처에서 확인하세요.

    CreateCompilationJob API 를 사용하여 SageMaker Neo로 컴파일 작업을 생성합니다. 컴파일 작업, SageMaker 역할 ARN, 모델이 저장URI되는 Amazon S3, 모델의 입력 모양, 프레임워크 이름, 컴파일된 모델을 저장URI SageMaker 하려는 Amazon S3 및 엣지 디바이스 대상에 이름을 입력합니다.

    # Specify the path where your model is stored model_directory = 'models' s3_model_uri = 's3://{}/{}/{}'.format(bucket, model_directory, tarfile_name) # Store compiled model in S3 within the 'compiled-models' directory compilation_output_dir = 'compiled-models' s3_output_location = 's3://{}/{}/'.format(bucket, compilation_output_dir) # Give your compilation job a name compilation_job_name = 'getting-started-demo' sagemaker_client.create_compilation_job(CompilationJobName=compilation_job_name, RoleArn=sagemaker_role_arn, InputConfig={ 'S3Uri': s3_model_uri, 'DataInputConfig': data_shape, 'Framework' : framework.upper()}, OutputConfig={ 'S3OutputLocation': s3_output_location, 'TargetDevice': target_device}, StoppingCondition={'MaxRuntimeInSeconds': 900})
  5. 컴파일된 모델을 패키징합니다.

    패키징 작업은 SageMaker Neo 컴파일 모델을 사용하고 추론 엔진인 Edge Manager 에이전트를 사용하여 모델을 배포하는 데 필요한 모든 변경을 수행합니다. 모델을 패키징하려면 create_edge_packaging API 또는 SageMaker 콘솔을 사용하여 엣지 패키징 작업을 생성합니다.

    Neo 컴파일 작업에 사용한 이름, 패키징 작업의 이름, 역할ARN(설정섹션 참조), 모델 이름, 모델 버전 및 패키징 작업의 출력URI에 대한 Amazon S3 버킷을 제공해야 합니다. Edge Manager 패키징 작업 이름은 대소문자를 구분해야 함에 유의하세요. 다음은 를 사용하여 패키징 작업을 생성하는 방법의 예입니다API.

    edge_packaging_name='edge-packaging-demo' model_name="sample-model" model_version="1.1"

    패키지 모델을 URI 저장할 Amazon S3를 정의합니다.

    # Output directory where you want to store the output of the packaging job packaging_output_dir = 'packaged_models' packaging_s3_output = 's3://{}/{}'.format(bucket, packaging_output_dir)

    CreateEdgePackagingJob(으)로 Neo로 컴파일된 모델을 패키징합니다. 엣지 패키징 작업의 이름과 컴파일 작업 시 입력한 이름을 입력합니다(이 예에서는 변수 compilation_job_name에 저장됨). 또한 모델의 이름, 모델의 버전(사용 중인 모델 버전을 추적하는 데 도움이 됨), 패키지 모델을 저장URI SageMaker 하려는 S3를 제공합니다.

    sagemaker_client.create_edge_packaging_job( EdgePackagingJobName=edge_packaging_name, CompilationJobName=compilation_job_name, RoleArn=sagemaker_role_arn, ModelName=model_name, ModelVersion=model_version, OutputConfig={ "S3OutputLocation": packaging_s3_output } )