TensorFlow-Neuron 사용 및 AWS 뉴런 컴파일러 - AWS Deep Learning AMIs

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

TensorFlow-Neuron 사용 및 AWS 뉴런 컴파일러

이 튜토리얼에서는 사용 방법을 보여줍니다. AWS Neuron 컴파일러는 Keras ResNet -50 모델을 컴파일하고 저장된 모델 형식으로 내보내는 데 사용됩니다. SavedModel 이 형식은 모델 호환이 가능한 일반적인 형식입니다. TensorFlow 또한 예제 입력을 사용하여 Inf1 인스턴스에서 추론을 실행하는 방법을 알아봅니다. 

뉴런에 대한 자세한 내용은 다음을 참조하십시오. SDK AWS 뉴런 문서. SDK

사전 조건

이 자습서를 사용하기 전에 를 사용하여 DLAMI 인스턴스 시작 AWS Neuron의 설정 단계를 완료해야 합니다. 또한 딥 러닝과 사용에 대해서도 잘 알고 있어야 합니다. DLAMI

Conda 환경 활성화

다음 명령을 사용하여 TensorFlow -Neuron conda 환경을 활성화합니다.

source activate aws_neuron_tensorflow_p36

현재 conda 환경을 종료하려면 다음 명령을 실행합니다.

source deactivate

Resnet50 컴파일

다음 콘텐츠를 가진 tensorflow_compile_resnet50.py라는 Python 스크립트를 생성합니다. 이 Python 스크립트는 Keras ResNet 50 모델을 컴파일하고 저장된 모델로 내보냅니다.

import os import time import shutil import tensorflow as tf import tensorflow.neuron as tfn import tensorflow.compat.v1.keras as keras from tensorflow.keras.applications.resnet50 import ResNet50 from tensorflow.keras.applications.resnet50 import preprocess_input # Create a workspace WORKSPACE = './ws_resnet50' os.makedirs(WORKSPACE, exist_ok=True) # Prepare export directory (old one removed) model_dir = os.path.join(WORKSPACE, 'resnet50') compiled_model_dir = os.path.join(WORKSPACE, 'resnet50_neuron') shutil.rmtree(model_dir, ignore_errors=True) shutil.rmtree(compiled_model_dir, ignore_errors=True) # Instantiate Keras ResNet50 model keras.backend.set_learning_phase(0) model = ResNet50(weights='imagenet') # Export SavedModel tf.saved_model.simple_save(  session            = keras.backend.get_session(),  export_dir         = model_dir,  inputs             = {'input': model.inputs[0]},  outputs            = {'output': model.outputs[0]}) # Compile using Neuron tfn.saved_model.compile(model_dir, compiled_model_dir) # Prepare SavedModel for uploading to Inf1 instance shutil.make_archive(compiled_model_dir, 'zip', WORKSPACE, 'resnet50_neuron')

다음 명령을 사용하여 모델을 컴파일합니다.

python tensorflow_compile_resnet50.py

컴파일 프로세스는 몇 분 정도 걸립니다. 완료되면 출력은 다음과 같아야 합니다.

... INFO:tensorflow:fusing subgraph neuron_op_d6f098c01c780733 with neuron-cc INFO:tensorflow:Number of operations in TensorFlow session: 4638 INFO:tensorflow:Number of operations after tf.neuron optimizations: 556 INFO:tensorflow:Number of operations placed on Neuron runtime: 554 INFO:tensorflow:Successfully converted ./ws_resnet50/resnet50 to ./ws_resnet50/resnet50_neuron ...

컴파일 후 저장된 모델은 ws_resnet50/resnet50_neuron.zip에서 압축됩니다. 다음 명령을 사용하여 모델의 압축을 풀고 추론을 위해 샘플 이미지를 다운로드합니다.

unzip ws_resnet50/resnet50_neuron.zip -d . curl -O https://raw.githubusercontent.com/awslabs/mxnet-model-server/master/docs/images/kitten_small.jpg

ResNet5.0 추론

다음 콘텐츠를 가진 tensorflow_infer_resnet50.py라는 Python 스크립트를 생성합니다. 이 스크립트는 이전에 컴파일된 추론 모델을 사용하여 다운로드한 모델에 대한 추론을 실행합니다.

import os import numpy as np import tensorflow as tf from tensorflow.keras.preprocessing import image from tensorflow.keras.applications import resnet50 # Create input from image img_sgl = image.load_img('kitten_small.jpg', target_size=(224, 224)) img_arr = image.img_to_array(img_sgl) img_arr2 = np.expand_dims(img_arr, axis=0) img_arr3 = resnet50.preprocess_input(img_arr2) # Load model COMPILED_MODEL_DIR = './ws_resnet50/resnet50_neuron/' predictor_inferentia = tf.contrib.predictor.from_saved_model(COMPILED_MODEL_DIR) # Run inference model_feed_dict={'input': img_arr3} infa_rslts = predictor_inferentia(model_feed_dict); # Display results print(resnet50.decode_predictions(infa_rslts["output"], top=5)[0])

다음 명령을 사용하여 모델에 대한 추론을 실행합니다.

python tensorflow_infer_resnet50.py

출력은 다음과 같아야 합니다.

... [('n02123045', 'tabby', 0.6918919), ('n02127052', 'lynx', 0.12770271), ('n02123159', 'tiger_cat', 0.08277027), ('n02124075', 'Egyptian_cat', 0.06418919), ('n02128757', 'snow_leopard', 0.009290541)]
다음 단계

사용 AWS 뉴런 TensorFlow 서빙