Uso de TensorFlow -Neuron y el AWS Compilador de neuronas - AWS Deep Learning AMIs

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de TensorFlow -Neuron y el AWS Compilador de neuronas

En este tutorial se muestra cómo utilizar el AWS Compilador Neuron para compilar el modelo Keras ResNet -50 y exportarlo como un modelo guardado en formato. SavedModel Este formato es un formato típico TensorFlow de modelos intercambiables. También aprenderá a ejecutar la inferencia en una instancia Inf1 con entrada de ejemplo. 

Para obtener más información sobre la neuronaSDK, consulte la AWS La documentación sobre las neuronas. SDK

Requisitos previos

Antes de utilizar este tutorial, debería haber completado los pasos de configuración de Lanzar una instancia con DLAMI AWS Neuron. También debe estar familiarizado con el aprendizaje profundo y el uso del. DLAMI

Activación del entorno Conda

Active el entorno conda TensorFlow -Neuron mediante el siguiente comando:

source activate aws_neuron_tensorflow_p36

Para salir del entorno Conda actual, ejecute el siguiente comando:

source deactivate

Compilación de Resnet50

Cree un script de Python llamada denominado tensorflow_compile_resnet50.py que tenga el siguiente contenido. Este script de Python compila el modelo Keras ResNet 50 y lo exporta como un modelo guardado.

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')

Compile el modelo con el siguiente comando:

python tensorflow_compile_resnet50.py

El proceso de compilación tardará unos minutos. Cuando concluya, la salida debe tener el siguiente aspecto:

... 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 ...

Después de la compilación, el modelo guardado se comprime en ws_resnet50/resnet50_neuron.zip. Descomprima el modelo y descargue la imagen de muestra para la inferencia mediante los siguientes comandos:

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

ResNet50 Inferencia

Cree un script de Python llamada denominado tensorflow_infer_resnet50.py que tenga el siguiente contenido. Este script ejecuta la inferencia en el modelo descargado utilizando un modelo de inferencia compilado previamente.

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])

Ejecute la inferencia en el modelo mediante el siguiente comando:

python tensorflow_infer_resnet50.py

El resultado debería tener el siguiente aspecto:

... [('n02123045', 'tabby', 0.6918919), ('n02127052', 'lynx', 0.12770271), ('n02123159', 'tiger_cat', 0.08277027), ('n02124075', 'Egyptian_cat', 0.06418919), ('n02128757', 'snow_leopard', 0.009290541)]
Paso siguiente

Utilización AWS Servicio de neuronas TensorFlow