기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
모델 컴파일
사전 조건 을 충족한 후에는 Amazon SageMaker Neo로 모델을 컴파일할 수 있습니다. AWS CLI, 콘솔 또는 Amazon Web Services SDK for Python(Boto3)
모델을 컴파일하려면 SageMaker Neo에 다음 정보가 필요합니다.
-
훈련된 모델을 저장URI한 Amazon S3 버킷입니다.
사전 요구 사항을 따랐다면 버킷이
bucket
라는 변수에 저장됩니다. 다음 코드 스니펫은 AWS CLI를 사용하여 모든 버킷을 나열하는 방법을 보여줍니다.aws s3 ls
예:
$ aws s3 ls 2020-11-02 17:08:50 bucket
-
컴파일된 모델을 저장URI하려는 Amazon S3 버킷입니다.
아래 코드 조각은 Amazon S3 버킷URI을 라는 출력 디렉터리의 이름과 연결합니다
output
.s3_output_location = f's3://{bucket}/output'
-
모델 훈련에 사용한 기계 훈련 프레임워크.
모델 훈련에 사용한 프레임워크를 정의하세요.
framework = 'framework-name'
예를 들어 를 사용하여 훈련된 모델을 컴파일하려는 경우
tflite
또는 를 사용할 TensorFlow수 있습니다tensorflow
. 스토리지 메모리를 덜 사용하는 더 가벼운 버전의 TensorFlowtflite
를 사용하려면 를 사용합니다.framework = 'tflite'
NEO 지원 프레임워크의 전체 목록은 지원되는 프레임워크, 디바이스, 시스템, 아키텍처를 참조하세요.
-
모델 입력의 셰이프.
Neo에는 입력 텐서의 이름과 모양이 필요합니다. 이름과 모양은 키-값 페어로 전달됩니다.
value
는 입력 텐서의 정수 크기 목록이며key
는 모델에 있는 입력 텐서의 정확한 이름입니다.data_shape = '{"name": [tensor-shape]}'
예:
data_shape = '{"normalized_input_image_tensor":[1, 300, 300, 3]}'
참고
사용한 프레임워크에 따라 모델 형식이 올바른지 확인하세요. SageMaker Neo는 어떤 입력 데이터 형태를 예상합니까?를 참조하세요. 이 사전의 키를 새 입력 텐서 이름으로 변경해야 합니다.
-
컴파일할 대상 디바이스의 이름 또는 하드웨어 플랫폼의 일반 세부 정보
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)