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 und MXNet-Neuron AWS Neuron-Compiler
Die MXNet-Neuron Kompilierungs-API bietet eine Methode zum Kompilieren eines Modelldiagramms, das Sie auf einem AWS Inferentia-Gerät ausführen können.
In diesem Beispiel verwenden Sie die API, um ein ResNet-50 Modell zu kompilieren und damit Inferenzen auszuführen.
Weitere Informationen zum Neuron SDK finden Sie in der AWS Neuron
Voraussetzungen
Bevor Sie dieses Tutorial verwenden, müssen Sie die Einrichtungsschritte in Starten einer DLAMI-Instanz mit AWS Neuron abgeschlossen haben. Sie sollten auch mit Deep Learning und der Verwendung des DLAMI vertraut sein.
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
Resnet50-Kompilierung
Erstellen Sie das Python-Skript namens mxnet_compile_resnet50.py mit folgendem Inhalt. Dieses Skript verwendet die MXNet-Neuron Kompilierungs-Python-API, um ein ResNet-50 Modell zu kompilieren.
import mxnet as mx import numpy as np print("downloading...") 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') print("download finished.") sym, args, aux = mx.model.load_checkpoint('resnet-50', 0) print("compile for inferentia using neuron... this will take a few minutes...") inputs = { "data" : mx.nd.ones([1,3,224,224], name='data', dtype='float32') } sym, args, aux = mx.contrib.neuron.compile(sym, args, aux, inputs) print("save compiled model...") mx.model.save_checkpoint("compiled_resnet50", 0, sym, args, aux)
Kompilieren Sie das Modell mit dem folgenden Befehl:
python mxnet_compile_resnet50.py
Die Kompilierung dauert einige Minuten. Wenn die Kompilierung abgeschlossen ist, befinden sich die folgenden Dateien in Ihrem aktuellen Verzeichnis:
resnet-50-0000.params resnet-50-symbol.json compiled_resnet50-0000.params compiled_resnet50-symbol.json
ResNet50 Folgerung
Erstellen Sie das Python-Skript namens mxnet_infer_resnet50.py mit folgendem Inhalt. Mit diesem Skript wird ein Beispiel-Image heruntergeladen, das dazu verwendet wird, um die Inferenz für das kompilierte Modell auszuführen.
import mxnet as mx import numpy as np path='http://data.mxnet.io/models/imagenet/' mx.test_utils.download(path+'synset.txt') fname = mx.test_utils.download('https://raw.githubusercontent.com/awslabs/mxnet-model-server/master/docs/images/kitten_small.jpg') img = mx.image.imread(fname) # convert into format (batch, RGB, width, height) img = mx.image.imresize(img, 224, 224) # resize img = img.transpose((2, 0, 1)) # Channel first img = img.expand_dims(axis=0) # batchify img = img.astype(dtype='float32') sym, args, aux = mx.model.load_checkpoint('compiled_resnet50', 0) softmax = mx.nd.random_normal(shape=(1,)) args['softmax_label'] = softmax args['data'] = img # Inferentia context ctx = mx.neuron() exe = sym.bind(ctx=ctx, args=args, aux_states=aux, grad_req='null') with open('synset.txt', 'r') as f: labels = [l.rstrip() for l in f] exe.forward(data=img) prob = exe.outputs[0].asnumpy() # print the top-5 prob = np.squeeze(prob) a = np.argsort(prob)[::-1] for i in a[0:5]: print('probability=%f, class=%s' %(prob[i], labels[i]))
Führen Sie die Inferenz mit folgendem Befehl mit dem kompilierten Modell aus:
python mxnet_infer_resnet50.py
Die Ausgabe sollte folgendermaßen aussehen:
probability=0.642454, class=n02123045 tabby, tabby cat probability=0.189407, class=n02123159 tiger cat probability=0.100798, class=n02124075 Egyptian cat probability=0.030649, class=n02127052 lynx, catamount probability=0.016278, class=n02129604 tiger, Panthera tigris
Nächster Schritt
Verwenden von MXNet-Neuron Model Serving