View a markdown version of this page

Usando MXNet-Neuron y el AWS Compilador Neuron - AWS Deep Learning AMIs

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Usando MXNet-Neuron y el AWS Compilador Neuron

La API de MXNet-Neuron compilación proporciona un método para compilar un gráfico modelo que se puede ejecutar en un dispositivo AWS Inferentia.

En este ejemplo, se utiliza la API para compilar un ResNet-50 modelo y utilizarla para ejecutar una inferencia.

Para obtener más información sobre el SDK de Neuron, consulte la documentación del SDK de AWS Neuron.

Requisitos previos

Antes de utilizar este tutorial, debería haber completado los pasos de configuración de Lanzamiento de una instancia DLAMI con AWS Neuron. También debe estar familiarizado con el aprendizaje profundo y con el uso de la DLAMI.

Activación del entorno Conda

Active el entorno MXNet-Neuron conda mediante el siguiente comando:

source activate aws_neuron_mxnet_p36

Para salir del entorno Conda actual, ejecute:

source deactivate

Compilación de Resnet50

Cree un script de Python denominado mxnet_compile_resnet50.py con el siguiente contenido. Este script usa la API de MXNet-Neuron compilación de Python para compilar un ResNet-50 modelo.

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)

Compile el modelo con el siguiente comando:

python mxnet_compile_resnet50.py

La compilación tardará unos minutos. Cuando haya finalizado, los siguientes archivos estarán en su directorio actual:

resnet-50-0000.params resnet-50-symbol.json compiled_resnet50-0000.params compiled_resnet50-symbol.json

ResNet5.0 Inferencia

Cree un script de Python denominado mxnet_infer_resnet50.py con el siguiente contenido. Este script descarga una imagen de muestra y la utiliza para ejecutar la inferencia con el modelo compilado.

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]))

Ejecute la inferencia con el modelo compilado mediante el siguiente comando:

python mxnet_infer_resnet50.py

El resultado debería tener el siguiente aspecto:

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
Paso siguiente

Uso de MXNet-Neuron Model Serving