

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.

# Verwenden von MXNet -Neuron Model Serving
<a name="tutorial-inferentia-mxnet-neuron-serving"></a>

In diesem Tutorial lernen Sie, ein vortrainiertes MXNet Modell zu verwenden, um Bildklassifizierung in Echtzeit mit Multi Model Server (MMS) durchzuführen. MMS ist ein flexibles easy-to-use Tool zur Bereitstellung von Deep-Learning-Modellen, die mit einem beliebigen Framework für maschinelles Lernen oder Deep Learning trainiert wurden. Dieses Tutorial beinhaltet einen Kompilierungsschritt mit AWS Neuron und eine Implementierung von MMS mit. MXNet

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

**Topics**
+ [Voraussetzungen](#tutorial-inferentia-mxnet-neuron-serving-prerequisites)
+ [Aktivieren der Conda-Umgebung](#tutorial-inferentia-mxnet-neuron-serving-activate)
+ [Herunterladen des Beispielcodes](#tutorial-inferentia-mxnet-neuron-serving-download)
+ [Kompilieren des Modells](#tutorial-inferentia-mxnet-neuron-serving-compile)
+ [Ausführen der Inferenz](#tutorial-inferentia-mxnet-neuron-serving-inference)

## Voraussetzungen
<a name="tutorial-inferentia-mxnet-neuron-serving-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-mxnet-neuron-serving-activate"></a>

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

```
source activate aws_neuron_mxnet_p36
```

 Führen Sie Folgendes aus, um die aktuelle Conda-Umgebung zu verlassen: 

```
source deactivate
```

## Herunterladen des Beispielcodes
<a name="tutorial-inferentia-mxnet-neuron-serving-download"></a>

 Um dieses Beispiel auszuführen, laden Sie den Beispielcode mit den folgenden Befehlen herunter: 

```
git clone https://github.com/awslabs/multi-model-server
cd multi-model-server/examples/mxnet_vision
```

## Kompilieren des Modells
<a name="tutorial-inferentia-mxnet-neuron-serving-compile"></a>

Erstellen Sie das Python-Skript namens `multi-model-server-compile.py` mit folgendem Inhalt. Dieses Skript kompiliert das Modell ResNet 50 für das Inferentia-Geräteziel. 

```
import mxnet as mx
from mxnet.contrib import neuron
import numpy as np

path='http://data.mxnet.io/models/imagenet/'
mx.test_utils.download(path+'resnet/50-layers/resnet-50-0000.params')
mx.test_utils.download(path+'resnet/50-layers/resnet-50-symbol.json')
mx.test_utils.download(path+'synset.txt')

nn_name = "resnet-50"

#Load a model
sym, args, auxs = mx.model.load_checkpoint(nn_name, 0)

#Define compilation parameters#  - input shape and dtype
inputs = {'data' : mx.nd.zeros([1,3,224,224], dtype='float32') }

# compile graph to inferentia target
csym, cargs, cauxs = neuron.compile(sym, args, auxs, inputs)

# save compiled model
mx.model.save_checkpoint(nn_name + "_compiled", 0, csym, cargs, cauxs)
```

 Verwenden Sie den folgenden Befehl, um das Modell zu kompilieren: 

```
python multi-model-server-compile.py
```

 Die Ausgabe sollte folgendermaßen aussehen: 

```
...
[21:18:40] src/nnvm/legacy_json_util.cc:209: Loading symbol saved by previous version v0.8.0. Attempting to upgrade...
[21:18:40] src/nnvm/legacy_json_util.cc:217: Symbol successfully upgraded!
[21:19:00] src/operator/subgraph/build_subgraph.cc:698: start to execute partition graph.
[21:19:00] src/nnvm/legacy_json_util.cc:209: Loading symbol saved by previous version v0.8.0. Attempting to upgrade...
[21:19:00] src/nnvm/legacy_json_util.cc:217: Symbol successfully upgraded!
```

 Erstellen Sie eine Datei namens `signature.json` mit dem folgenden Inhalt, um den Eingabenamen und das Shape zu konfigurieren: 

```
{
  "inputs": [
    {
      "data_name": "data",
      "data_shape": [
        1,
        3,
        224,
        224
      ]
    }
  ]
}
```

Sie können die Datei `synset.txt` mit dem folgenden Befehl herunterladen. Diese Datei ist eine Liste mit Namen für ImageNet Vorhersageklassen. 

```
curl -O https://s3.amazonaws.com/model-server/model_archive_1.0/examples/squeezenet_v1.1/synset.txt
```

Erstellen Sie eine benutzerdefinierte Service-Klasse unter Verwendung der Vorlage im Ordner `model_server_template`. Kopieren Sie die Vorlage mit dem folgenden Befehl in das aktuelle Arbeitsverzeichnis: 

```
cp -r ../model_service_template/* .
```

 Bearbeiten Sie das Modul `mxnet_model_service.py`, indem Sie den Kontext `mx.cpu()` wie folgt durch den Kontext `mx.neuron()` ersetzen. Sie müssen auch die überflüssige Datenkopie für auskommentieren`model_input`, weil MXNet -Neuron das NDArray und Gluon nicht unterstützt. APIs 

```
...
self.mxnet_ctx = mx.neuron() if gpu_id is None else mx.gpu(gpu_id)
...
#model_input = [item.as_in_context(self.mxnet_ctx) for item in model_input]
```

 Erstellen Sie mit den folgenden Befehlen ein Paket des Modells mit model-archiver: 

```
cd ~/multi-model-server/examples
model-archiver --force --model-name resnet-50_compiled --model-path mxnet_vision --handler mxnet_vision_service:handle
```

## Ausführen der Inferenz
<a name="tutorial-inferentia-mxnet-neuron-serving-inference"></a>

Starten Sie den Multi Model Server und laden Sie das Modell, das die RESTful API verwendet, mithilfe der folgenden Befehle. Stellen Sie sicher, dass **neuron-rtd** mit den Standardeinstellungen ausgeführt wird. 

```
cd ~/multi-model-server/
multi-model-server --start --model-store examples > /dev/null # Pipe to log file if you want to keep a log of MMS
curl -v -X POST "http://localhost:8081/models?initial_workers=1&max_workers=4&synchronous=true&url=resnet-50_compiled.mar"
sleep 10 # allow sufficient time to load model
```

 Führen Sie die Inferenz mit den folgenden Befehlen mit einem Beispielbild aus: 

```
curl -O https://raw.githubusercontent.com/awslabs/multi-model-server/master/docs/images/kitten_small.jpg
curl -X POST http://127.0.0.1:8080/predictions/resnet-50_compiled -T kitten_small.jpg
```

 Die Ausgabe sollte folgendermaßen aussehen: 

```
[
  {
    "probability": 0.6388034820556641,
    "class": "n02123045 tabby, tabby cat"
  },
  {
    "probability": 0.16900072991847992,
    "class": "n02123159 tiger cat"
  },
  {
    "probability": 0.12221276015043259,
    "class": "n02124075 Egyptian cat"
  },
  {
    "probability": 0.028706775978207588,
    "class": "n02127052 lynx, catamount"
  },
  {
    "probability": 0.01915954425930977,
    "class": "n02129604 tiger, Panthera tigris"
  }
]
```

 Um nach dem Test zu bereinigen, geben Sie über die RESTful API einen Löschbefehl aus und beenden Sie den Modellserver mit den folgenden Befehlen: 

```
curl -X DELETE http://127.0.0.1:8081/models/resnet-50_compiled

multi-model-server --stop
```

 Die Ausgabe sollte folgendermaßen aussehen: 

```
{
  "status": "Model \"resnet-50_compiled\" unregistered"
}
Model server stopped.
Found 1 models and 1 NCGs.
Unloading 10001 (MODEL_STATUS_STARTED) :: success
Destroying NCG 1 :: success
```