

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verwendung von TensorFlow -Neuron und dem Neuron Compiler AWS
<a name="tutorial-inferentia-tf-neuron"></a>

 Dieses Tutorial zeigt, wie Sie mit dem AWS Neuron-Compiler das Keras ResNet -50-Modell kompilieren und als gespeichertes Modell im Format exportieren. SavedModel Dieses Format ist ein typisches TensorFlow austauschbares Modellformat. Sie lernen außerdem, wie die Inferenz für eine Inf1-Instance mit Beispieldaten ausgeführt wird.  

 Weitere Informationen zum Neuron SDK finden Sie in der [AWS Neuron](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/neuron-frameworks/tensorflow-neuron/index.html) SDK-Dokumentation. 

**Topics**
+ [Voraussetzungen](#tutorial-inferentia-tf-neuron-prerequisites)
+ [Aktivieren der Conda-Umgebung](#tutorial-inferentia-tf-neuron-activate)
+ [Resnet50-Kompilierung](#tutorial-inferentia-tf-neuron-compilation)
+ [ResNet50 Inferenz](#tutorial-inferentia-tf-neuron-inference)

## Voraussetzungen
<a name="tutorial-inferentia-tf-neuron-prerequisites"></a>

 Bevor Sie dieses Tutorial verwenden, müssen Sie die Einrichtungsschritte in [Starten einer DLAMI-Instanz mit Neuron AWS](tutorial-inferentia-launching.md) abgeschlossen haben. Sie sollten auch mit Deep Learning und der Verwendung des DLAMI vertraut sein. 

## Aktivieren der Conda-Umgebung
<a name="tutorial-inferentia-tf-neuron-activate"></a>

 Aktivieren Sie die TensorFlow -Neuron Conda-Umgebung mit dem folgenden Befehl: 

```
source activate aws_neuron_tensorflow_p36
```

 Führen Sie den folgenden Befehl aus, um die aktuelle Conda-Umgebung zu verlassen: 

```
source deactivate
```

## Resnet50-Kompilierung
<a name="tutorial-inferentia-tf-neuron-compilation"></a>

Erstellen Sie das Python-Skript **tensorflow\$1compile\$1resnet50.py** mit folgendem Inhalt. Dieses Python-Skript kompiliert das Keras ResNet 50-Modell und exportiert es als gespeichertes Modell. 

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

 Kompilieren Sie das Modell mit dem folgenden Befehl: 

```
python tensorflow_compile_resnet50.py
```

Der Kompilierungsprozess dauert einige Minuten. Nach Abschluss sollte die Ausgabe so aussehen: 

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

 ​ 

 Nach der Kompilierung wird das gespeicherte Modell gezippt: **ws\$1resnet50/resnet50\$1neuron.zip**. Entzippen Sie das Modell und laden Sie das Beispielbild mit den folgenden Befehlen herunter: 

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

## ResNet50 Inferenz
<a name="tutorial-inferentia-tf-neuron-inference"></a>

Erstellen Sie das Python-Skript **tensorflow\$1infer\$1resnet50.py** mit dem folgenden Inhalt. Dieses Skript führt die Inferenz für das heruntergeladene Modell unter Verwendung eines zuvor kompilierten Inferenzmodells aus. 

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

 Führen Sie die Inferenz für das Modell mit dem folgenden Befehl aus: 

```
python tensorflow_infer_resnet50.py
```

 Die Ausgabe sollte folgendermaßen aussehen: 

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

**Nächster Schritt**  
[Verwenden von AWS Neuron Serving TensorFlow](tutorial-inferentia-tf-neuron-serving.md)