Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation de MxNet-Neuron et du compilateur Neuron AWS
L'API de compilation MxNet-Neuron fournit une méthode pour compiler un modèle de graphe que vous pouvez exécuter sur un appareil Inferentia. AWS
Dans cet exemple, vous utilisez l'API pour compiler un modèle ResNet -50 et l'utiliser pour exécuter l'inférence.
Pour plus d'informations sur le SDK Neuron, consultez la documentation du SDK AWS Neuron
Table des matières
Prérequis
Avant d'utiliser ce didacticiel, vous devez avoir terminé les étapes de configuration figurant dans Lancement d'une instance DLAMI avec Neuron AWS. Vous devez également être familiarisé avec le deep learning et l'utilisation du DLAMI.
Activation de l'environnement Conda
Activez l'environnement Conda MXNet-Neuron à l'aide de la commande suivante :
source activate aws_neuron_mxnet_p36
Pour quitter l'environnement Conda actuel, exécutez :
source deactivate
Compilation Resnet50
Créez un script Python appelé mxnet_compile_resnet50.py
avec le contenu suivant. Ce script utilise l'API Python de compilation MxNet-Neuron pour compiler ResNet un modèle -50.
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)
Compilez le modèle à l'aide de la commande suivante :
python mxnet_compile_resnet50.py
La compilation prendra quelques minutes. Une fois la compilation terminée, les fichiers suivants se trouveront dans votre répertoire actuel :
resnet-50-0000.params resnet-50-symbol.json compiled_resnet50-0000.params compiled_resnet50-symbol.json
ResNet50 Inférence
Créez un script Python appelé mxnet_infer_resnet50.py
avec le contenu suivant. Ce script télécharge un exemple d'image qu’il utilise pour exécuter l'inférence avec le modèle compilé.
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]))
Exécutez l'inférence avec le modèle compilé à l'aide de la commande suivante :
python mxnet_infer_resnet50.py
Le résultat doit être similaire à ce qui suit :
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
Étape suivante
Utilisation du service de modèle MXNet-Neuron