모델 컴파일 - Amazon SageMaker

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

모델 컴파일

사전 조건 을 충족한 후에는 Amazon SageMaker Neo로 모델을 컴파일할 수 있습니다. AWS CLI, 콘솔 또는 Amazon Web Services SDK for Python(Boto3)을 사용하여 모델을 컴파일할 수 있습니다. 모델 컴파일에 Neo 사용을 참조하세요. 이 예제에서는 Boto3를 사용하여 모델을 컴파일합니다.

모델을 컴파일하려면 SageMaker Neo에 다음 정보가 필요합니다.

  1. 훈련된 모델을 저장URI한 Amazon S3 버킷입니다.

    사전 요구 사항을 따랐다면 버킷이 bucket라는 변수에 저장됩니다. 다음 코드 스니펫은 AWS CLI를 사용하여 모든 버킷을 나열하는 방법을 보여줍니다.

    aws s3 ls

    예:

    $ aws s3 ls 2020-11-02 17:08:50 bucket
  2. 컴파일된 모델을 저장URI하려는 Amazon S3 버킷입니다.

    아래 코드 조각은 Amazon S3 버킷URI을 라는 출력 디렉터리의 이름과 연결합니다output.

    s3_output_location = f's3://{bucket}/output'
  3. 모델 훈련에 사용한 기계 훈련 프레임워크.

    모델 훈련에 사용한 프레임워크를 정의하세요.

    framework = 'framework-name'

    예를 들어 를 사용하여 훈련된 모델을 컴파일하려는 경우 tflite 또는 를 사용할 TensorFlow수 있습니다tensorflow. 스토리지 메모리를 덜 사용하는 더 가벼운 버전의 TensorFlow tflite를 사용하려면 를 사용합니다.

    framework = 'tflite'

    NEO 지원 프레임워크의 전체 목록은 지원되는 프레임워크, 디바이스, 시스템, 아키텍처를 참조하세요.

  4. 모델 입력의 셰이프.

    Neo에는 입력 텐서의 이름과 모양이 필요합니다. 이름과 모양은 키-값 페어로 전달됩니다. value는 입력 텐서의 정수 크기 목록이며 key는 모델에 있는 입력 텐서의 정확한 이름입니다.

    data_shape = '{"name": [tensor-shape]}'

    예:

    data_shape = '{"normalized_input_image_tensor":[1, 300, 300, 3]}'
    참고

    사용한 프레임워크에 따라 모델 형식이 올바른지 확인하세요. SageMaker Neo는 어떤 입력 데이터 형태를 예상합니까?를 참조하세요. 이 사전의 키를 새 입력 텐서 이름으로 변경해야 합니다.

  5. 컴파일할 대상 디바이스의 이름 또는 하드웨어 플랫폼의 일반 세부 정보

    target_device = 'target-device-name'

    예를 들어, Raspberry Pi 3에 배포하려면 다음을 사용하세요.

    target_device = 'rasp3b'

    지원되는 엣지 디바이스의 전체 목록은 지원되는 프레임워크, 디바이스, 시스템, 아키텍처에서 찾을 수 있습니다.

이전 단계를 완료했으니 이제 Neo에 컴파일 작업을 제출할 수 있습니다.

# Create a SageMaker client so you can submit a compilation job sagemaker_client = boto3.client('sagemaker', region_name=AWS_REGION) # Give your compilation job a name compilation_job_name = 'getting-started-demo' print(f'Compilation job for {compilation_job_name} started') response = sagemaker_client.create_compilation_job( CompilationJobName=compilation_job_name, RoleArn=role_arn, InputConfig={ 'S3Uri': s3_input_location, 'DataInputConfig': data_shape, 'Framework': framework.upper() }, OutputConfig={ 'S3OutputLocation': s3_output_location, 'TargetDevice': target_device }, StoppingCondition={ 'MaxRuntimeInSeconds': 900 } ) # Optional - Poll every 30 sec to check completion status import time while True: response = sagemaker_client.describe_compilation_job(CompilationJobName=compilation_job_name) if response['CompilationJobStatus'] == 'COMPLETED': break elif response['CompilationJobStatus'] == 'FAILED': raise RuntimeError('Compilation failed') print('Compiling ...') time.sleep(30) print('Done!')

디버깅에 대한 추가 정보가 필요하면 다음 인쇄 문장을 포함하세요.

print(response)

컴파일 작업이 성공하면 컴파일된 모델은 이전에 지정한 출력 Amazon S3 버킷(s3_output_location)에 저장됩니다. 컴파일된 모델을 로컬로 다운로드하세요.

object_path = f'output/{model}-{target_device}.tar.gz' neo_compiled_model = f'compiled-{model}.tar.gz' s3_client.download_file(bucket, object_path, neo_compiled_model)