

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

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 AWS Inferentia. 

 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](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/neuron-frameworks/mxnet-neuron/index.html). 

**Topics**
+ [Conditions préalables](#tutorial-inferentia-mxnet-neuron-prerequisites)
+ [Activation de l'environnement Conda](#tutorial-inferentia-mxnet-neuron-activate)
+ [Compilation Resnet50](#tutorial-inferentia-mxnet-neuron-compilation)
+ [ResNet50 Inférence](#tutorial-inferentia-mxnet-neuron-inference)

## Conditions préalables
<a name="tutorial-inferentia-mxnet-neuron-prerequisites"></a>

 Avant d'utiliser ce didacticiel, vous devez avoir terminé les étapes de configuration figurant dans [Lancement d'une instance DLAMI avec Neuron AWS](tutorial-inferentia-launching.md). Vous devez également être familiarisé avec le deep learning et l'utilisation du DLAMI. 

## Activation de l'environnement Conda
<a name="tutorial-inferentia-mxnet-neuron-activate"></a>

 Activez l'environnement MXNet -Neuron conda à l'aide de la commande suivante : 

```
source activate aws_neuron_mxnet_p36
```

Pour quitter l'environnement Conda actuel, exécutez : 

```
source deactivate
```

## Compilation Resnet50
<a name="tutorial-inferentia-mxnet-neuron-compilation"></a>

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 un modèle ResNet -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
<a name="tutorial-inferentia-mxnet-neuron-inference"></a>

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 de MXNet -Neuron Model Serving](tutorial-inferentia-mxnet-neuron-serving.md)