Verwenden von MXNet -Neuron Model Serving - AWS Deep Learning AMIs

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

In diesem Tutorial lernen Sie, ein vortrainiertes MXNet Modell zu verwenden, um Bildklassifizierung in Echtzeit mit Multi Model Server () MMS durchzuführen. MMSist 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 UsingMXNet.

Weitere Informationen über das Neuron SDK finden Sie im AWS Neuron-Dokumentation. SDK

Voraussetzungen

Bevor Sie dieses Tutorial verwenden, müssen Sie die Einrichtungsschritte in Starten einer Instanz mit DLAMI AWS Neuron abgeschlossen haben. Sie sollten auch mit Deep Learning und der Verwendung von vertraut sein. DLAMI

Aktivieren der Conda-Umgebung

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

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

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

Starten Sie den Multi Model Server und laden Sie das Modell, das den verwendet, RESTful API 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"   } ]

Führen Sie zur Bereinigung nach dem Test einen Löschbefehl über den aus RESTful API 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