

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.

# Dispositivos periféricos
<a name="neo-edge-devices"></a>

Amazon SageMaker Neo admite marcos de machine learning de uso generalizado. Puede implementar sus dispositivos periféricos compilados en NEO, como Raspberry Pi 3, Sitara de Texas Instruments o Jetson TX1, entre otros. Para obtener una lista completa de los marcos y dispositivos periféricos compatibles, consulte [Marcos, dispositivos, sistemas y arquitecturas compatibles](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html). 

Debe configurar el dispositivo periférico para que pueda utilizar servicios AWS. Una forma de hacerlo consiste en instalar DLR y Boto3 en su dispositivo. Para ello, debe configurar las credenciales de autenticación. Consulte [Configuración de Boto3 AWS](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration) para obtener más información. Una vez compilado el modelo y configurado el dispositivo periférico, puede descargar el modelo de Amazon S3 a su dispositivo periférico. Desde allí, puede usar [Tiempo de ejecución de aprendizaje profundo (DLR)](https://neo-ai-dlr.readthedocs.io/en/latest/index.html) para leer el modelo compilado y hacer inferencias. 

Para los usuarios primerizos, le recomendamos que consulte la guía de [Introducción](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html). Esta guía explica cómo configurar las credenciales, compilar un modelo, implementar el modelo en Raspberry Pi 3 y hacer inferencias en imágenes. 

**Topics**
+ [Marcos, dispositivos, sistemas y arquitecturas compatibles](neo-supported-devices-edge.md)
+ [Implementación de modelos](neo-deployment-edge.md)
+ [Configuración de Neo en dispositivos periféricos](neo-getting-started-edge.md)

# Marcos, dispositivos, sistemas y arquitecturas compatibles
<a name="neo-supported-devices-edge"></a>

Amazon SageMaker Neo es compatible con los marcos de machine learning, dispositivos periféricos, sistemas operativos y arquitecturas de chips más comunes. Descubra si Neo es compatible con su estructura, dispositivo periférico, sistema operativo y arquitectura de chip seleccionando uno de los temas siguientes.

Encontrará una lista de los modelos que el equipo de Amazon SageMaker Neo ha probado en la sección [Modelos probados](neo-supported-edge-tested-models.md).

**nota**  
Los dispositivos Ambarella requieren que se incluyan archivos adicionales en el archivo TAR comprimido antes de enviarlo para su compilación. Para obtener más información, consulte [Solución de errores de Ambarella](neo-troubleshooting-target-devices-ambarella.md).
Se requiere TIM-VX (libtim-vx.so) para i.MX 8M Plus. Para obtener información sobre cómo compilar TIM-VX, consulte el [repositorio de TIM-VX en GitHub](https://github.com/VeriSilicon/TIM-VX).

**Topics**
+ [Marcos admitidos](neo-supported-devices-edge-frameworks.md)
+ [Marcos, dispositivos, sistemas y arquitecturas compatibles](neo-supported-devices-edge-devices.md)
+ [Modelos probados](neo-supported-edge-tested-models.md)

# Marcos admitidos
<a name="neo-supported-devices-edge-frameworks"></a>

Amazon SageMaker Neo es compatible con los siguientes marcos. 


| Marcos | Versión de marco | Versión del modelo | Modelos | Formatos de modelo (empaquetados en \$1.tar.gz) | Kits de herramientas | 
| --- | --- | --- | --- | --- | --- | 
| MXNet | 1.8 | Compatible con 1.8 o versiones anteriores | Clasificación de imágenes, detección de objetos, segmentación semántica, estimación de poses, reconocimiento de actividades | Un archivo de símbolos (.json) y un archivo de parámetros (.params) | GluonCV v0.8.0 | 
| ONNX | 1.7 | Compatible con 1.7 o versiones anteriores | Clasificación de imágenes, SVM | Un archivo de modelos (.onnx) |  | 
| Keras | 2.2 | Compatible con 2.2 o versiones anteriores | Clasificación de imágenes | Un archivo de definición de modelo (.h5) |  | 
| PyTorch | 1.7, 1.8 | Compatible con 1.7, 1.8 o versiones anteriores | Clasificación de imágenes, detección de objetos | Un archivo de definición de modelo (.pth) |  | 
| TensorFlow | 1.15, 2.4, 2.5 (solo para instancias ml.inf1.\$1) | Compatible con 1.15, 2.4, 2.5 (solo para instancias ml.inf1.\$1) o versiones anteriores | Clasificación de imágenes, detección de objetos | \$1En el caso de los modelos guardados, un archivo .pb o .pbtxt y un directorio de variables que contiene variables. \$1En el caso de modelos congelados, solo un archivo .pb o .pbtxt |  | 
| TensorFlow-LITE | 1.15 | Compatible con 1.15 o versiones anteriores | Clasificación de imágenes, detección de objetos | Un archivo de búfer plano de definición de modelo (.tflite) |  | 
| XGBoost | 1.3 | Compatible con 1.3 o versiones anteriores | Árboles de decisión | Un archivo de modelo de XGBoost (.model) en el que el número de nodos de un árbol es inferior a 2^31 |  | 
| DARKNET |  |  | Clasificación de imágenes, detección de objetos (el modelo Yolo no es compatible) | Un archivo de configuración (.cfg) y un archivo de pesos (.weights) |  | 

# Marcos, dispositivos, sistemas y arquitecturas compatibles
<a name="neo-supported-devices-edge-devices"></a>

Amazon SageMaker Neo es compatible con los siguientes dispositivos, arquitecturas de chips y sistemas operativos.

## Dispositivos
<a name="neo-supported-edge-devices"></a>

Puede seleccionar un dispositivo mediante la lista desplegable de la [consola de Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker) o especificando el `TargetDevice` en la configuración de salida de la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html).

Puede elegir uno de los siguientes dispositivos periféricos: 


| Lista de dispositivos | Sistema en un chip (SoC) | Sistema operativo | Arquitectura | Acelerador | Opciones de compilación de ejemplo | 
| --- | --- | --- | --- | --- | --- | 
| aisage | Ninguna | Linux | ARM64 | Mali | Ninguna | 
| amba\$1cv2 | CV2 | Arch Linux | ARM64 | cvflow | Ninguna | 
| amba\$1cv22 | CV22 | Arch Linux | ARM64 | cvflow | Ninguna | 
| amba\$1cv25 | CV25 | Arch Linux | ARM64 | cvflow | Ninguna | 
| coreml | Ninguna | iOS, macOS | Ninguna | Ninguna | \$1"class\$1labels": "imagenet\$1labels\$11000.txt"\$1 | 
| imx8qm | Mx8 de NXP | Linux | ARM64 | Ninguna | Ninguna | 
| imx8mplus | i.MX 8M Plus | Linux | ARM64 | NPU | Ninguna | 
| jacinto\$1tda4vm | TDA4VM | Linux | ARM | TDA4VM | Ninguna | 
| jetson\$1nano | Ninguna | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$153', 'trt-ver': '5.0.6', 'cuda-ver': '10.0'\$1Para `TensorFlow2`, `{'JETPACK_VERSION': '4.6', 'gpu_code': 'sm_72'}` | 
| jetson\$1tx1 | Ninguna | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$153', 'trt-ver': '6.0.1', 'cuda-ver': '10.0'\$1 | 
| jetson\$1tx2 | Ninguna | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$162', 'trt-ver': '6.0.1', 'cuda-ver': '10.0'\$1 | 
| jetson\$1xavier | Ninguna | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$172', 'trt-ver': '5.1.6', 'cuda-ver': '10.0'\$1 | 
| qcs605 | Ninguna | Android | ARM64 | Mali | \$1'ANDROID\$1PLATFORM': 27\$1 | 
| qcs603 | Ninguna | Android | ARM64 | Mali | \$1'ANDROID\$1PLATFORM': 27\$1 | 
| rasp3b | ARM A56 | Linux | ARM\$1EABIHF | Ninguna | \$1'mattr': ['\$1neon']\$1 | 
| rasp4b | ARM A72 | Ninguna | Ninguna | Ninguna | Ninguna | 
| rk3288 | Ninguna | Linux | ARM\$1EABIHF | Mali | Ninguna | 
| rk3399 | Ninguna | Linux | ARM64 | Mali | Ninguna | 
| sbe\$1c | Ninguna | Linux | x86\$164 | Ninguna | \$1'mcpu': 'core-avx2'\$1 | 
| sitara\$1am57x | AM57X | Linux | ARM64 | EVE y/o C66x DSP | Ninguna | 
| x86\$1win32 | Ninguna | Windows 10 | X86\$132 | Ninguna | Ninguna | 
| x86\$1win64 | Ninguna | Windows 10 | X86\$132 | Ninguna | Ninguna | 

Para obtener más información sobre las opciones del compilador clave-valor JSON para cada dispositivo de destino, consulte el campo `CompilerOptions` del tipo de datos de la [ API `OutputConfig`](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html).

## Arquitecturas de sistemas y chips
<a name="neo-supported-edge-granular"></a>

Las siguientes tablas de consulta proporcionan información sobre los sistemas operativos y las arquitecturas disponibles para los trabajos de compilación de modelos Neo. 

------
#### [ Linux ]


| Acelerador | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Sin acelerador (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | 
| GPU Nvidia | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | 
| Intel\$1Graphics | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | 
| ARM Mali | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | 

------
#### [ Android ]


| Acelerador | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Sin acelerador (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | 
| GPU Nvidia | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | 
| Intel\$1Graphics | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | 
| ARM Mali | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | 

------
#### [ Windows ]


| Acelerador | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Sin acelerador (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/success_icon.svg) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/negative_icon.svg) No | 

------

# Modelos probados
<a name="neo-supported-edge-tested-models"></a>

Las siguientes secciones plegables proporcionan información sobre los modelos de machine learning que probó el equipo de Amazon SageMaker Neo. Amplíe la sección plegable en función de su estructura para comprobar si se ha probado un modelo.

**nota**  
Esta no es una lista exhaustiva de los modelos que se pueden compilar con Neo.

Consulte [Marcos admitidos](neo-supported-devices-edge-frameworks.md) y [Operadores compatibles con SageMaker AI Neo](https://aws.amazon.com/releasenotes/sagemaker-neo-supported-frameworks-and-operators/) para averiguar si puede compilar el modelo con SageMaker Neo.

## DarkNet
<a name="collapsible-section-01"></a>


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AlexNet |  |  |  |  |  |  |  |  |  | 
| Resnet 50 | X | X |  | X | X | X |  | X | X | 
| YoLoV2 |  |  |  | X | X | X |  | X | X | 
| YoloV2\$1Tiny | X | X |  | X | X | X |  | X | X | 
| Yolov3\$1416 |  |  |  | X | X | X |  | X | X | 
| Yolov3\$1Tiny | X | X |  | X | X | X |  | X | X | 

## MXNet
<a name="collapsible-section-02"></a>


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AlexNet |  |  | X |  |  |  |  |  |  | 
| Densenet 121 |  |  | X |  |  |  |  |  |  | 
| Densenet 201 | X | X | X | X | X | X |  | X | X | 
| Google Net | X | X |  | X | X | X |  | X | X | 
| Inception v3 |  |  |  | X | X | X |  | X | X | 
| MobileNet 0.75 | X | X |  | X | X | X |  |  | X | 
| MobileNet 1.0 | X | X | X | X | X | X |  |  | X | 
| MobileNet V2\$10.5 | X | X |  | X | X | X |  |  | X | 
| MobileNet V2\$11.0 | X | X | X | X | X | X | X | X | X | 
| MobileNet V3\$1Large | X | X | X | X | X | X | X | X | X | 
| MobileNetV3\$1Small | X | X | X | X | X | X | X | X | X | 
| Resest 50 |  |  |  | X | X |  |  | X | X | 
| ResNet18\$1v1 | X | X | X | X | X | X |  |  | X | 
| ResNet18\$1v2 | X | X |  | X | X | X |  |  | X | 
| ResNet50\$1v1 | X | X | X | X | X | X |  | X | X | 
| ResNet50\$1v2 | X | X | X | X | X | X |  | X | X | 
| Resnext 101\$132x4D |  |  |  |  |  |  |  |  |  | 
| Resnext50\$132x4D | X |  | X | X | X |  |  | X | X | 
| Senet\$1154 |  |  |  | X | X | X |  | X | X | 
| SE\$1Resnext50\$132x4D | X | X |  | X | X | X |  | X | X | 
| SqueezeNet 1.0 | X | X | X | X | X | X |  |  | X | 
| SqueezeNet 1.1 | X | X | X | X | X | X |  | X | X | 
| VGG11 | X | X | X | X | X |  |  | X | X | 
| Xception | X | X | X | X | X | X |  | X | X | 
| darknet53 | X | X |  | X | X | X |  | X | X | 
| resnet18\$1v1b\$10.89 | X | X |  | X | X | X |  |  | X | 
| resnet50\$1v1d\$10.11 | X | X |  | X | X | X |  |  | X | 
| resnet50\$1v1d\$10.86 | X | X | X | X | X | X |  | X | X | 
| ssd\$1512\$1mobilenet1.0\$1coco | X |  | X | X | X | X |  | X | X | 
| ssd\$1512\$1mobilenet1.0\$1voc | X |  | X | X | X | X |  | X | X | 
| ssd\$1resnet50\$1v1 | X |  | X | X | X |  |  | X | X | 
| yolo3\$1darknet53\$1coco | X |  |  | X | X |  |  | X | X | 
| yolo3\$1mobilenet1.0\$1coco | X | X |  | X | X | X |  | X | X | 
| deeplab\$1resnet50 |  |  | X |  |  |  |  |  |  | 

## Keras
<a name="collapsible-section-03"></a>


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet 121 | X | X | X | X | X | X |  | X | X | 
| densenet 201 | X | X | X | X | X | X |  |  | X | 
| inception\$1v3 | X | X |  | X | X | X |  | X | X | 
| mobilenet\$1v1 | X | X | X | X | X | X |  | X | X | 
| mobilenet\$1v2 | X | X | X | X | X | X |  | X | X | 
| resnet152\$1v1 |  |  |  | X | X |  |  |  | X | 
| resnet152\$1v2 |  |  |  | X | X |  |  |  | X | 
| resnet50\$1v1 | X | X | X | X | X |  |  | X | X | 
| resnet50\$1v2 | X | X | X | X | X | X |  | X | X | 
| vgg16 |  |  | X | X | X |  |  | X | X | 

## ONNX
<a name="collapsible-section-04"></a>


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AlexNet |  |  | X |  |  |  |  |  |  | 
| mobilenetv2-1.0 | X | X | X | X | X | X |  | X | X | 
| resnet 18 contra 1 | X |  |  | X | X |  |  |  | X | 
| resnet18 v2 | X |  |  | X | X |  |  |  | X | 
| resnet50 v1 | X |  | X | X | X |  |  | X | X | 
| resnet50 v2 | X |  | X | X | X |  |  | X | X | 
| resnet 152 v1 |  |  |  | X | X | X |  |  | X | 
| resnet 152 v2 |  |  |  | X | X | X |  |  | X | 
| squeezenet 1.1 | X |  | X | X | X | X |  | X | X | 
| vgg19 |  |  | X |  |  |  |  |  | X | 

## PyTorch (FP32)
<a name="collapsible-section-05"></a>


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Ambarella CV25 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet 121 | X | X | X | X | X | X | X |  | X | X | 
| inception\$1v3 |  | X |  |  | X | X | X |  | X | X | 
| resnet152 |  |  |  |  | X | X | X |  |  | X | 
| resnet18 | X | X |  |  | X | X | X |  |  | X | 
| resnet50 | X | X | X | X | X | X |  |  | X | X | 
| squeezenet 1.0 | X | X |  |  | X | X | X |  |  | X | 
| squeezenet 1.1 | X | X | X | X | X | X | X |  | X | X | 
| yolov4 |  |  |  |  | X | X |  |  |  |  | 
| yolov5 |  |  |  | X | X | X |  |  |  |  | 
| fasterrcnn\$1resnet50\$1fpn |  |  |  |  | X | X |  |  |  |  | 
| maskrcnn\$1resnet50\$1fpn |  |  |  |  | X | X |  |  |  |  | 

## TensorFlow
<a name="collapsible-section-06"></a>

------
#### [ TensorFlow ]


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Ambarella CV25 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet 201 | X | X | X | X | X | X | X |  | X | X | 
| inception\$1v3 | X | X | X |  | X | X | X |  | X | X | 
| mobilenet100\$1v1 | X | X | X |  | X | X | X |  |  | X | 
| mobilenet100\$1v2.0 | X | X | X |  | X | X | X |  | X | X | 
| mobilenet 130\$1v2 | X | X |  |  | X | X | X |  |  | X | 
| mobilenet 140\$1v2 | X | X | X |  | X | X | X |  | X | X | 
| resnet50\$1v1.5 | X | X |  |  | X | X | X |  | X | X | 
| resnet50\$1v2 | X | X | X | X | X | X | X |  | X | X | 
| SqueezeNet | X | X | X | X | X | X | X |  | X | X | 
| mask\$1rcnn\$1inception\$1resnet\$1v2 |  |  |  |  | X |  |  |  |  |  | 
| ssd\$1mobilenet\$1v2 |  |  |  |  | X | X |  |  |  |  | 
| faster\$1rcnn\$1resnet50\$1lowproposals |  |  |  |  | X |  |  |  |  |  | 
| rfcn\$1resnet101 |  |  |  |  | X |  |  |  |  |  | 

------
#### [ TensorFlow.Keras ]


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| DenseNet 121  | X | X |  | X | X | X |  | X | X | 
| Densenet 201 | X | X |  | X | X | X |  |  | X | 
| Inception v3 | X | X |  | X | X | X |  | X | X | 
| MobileNet | X | X |  | X | X | X |  | X | X | 
| MobileNet V2 | X | X |  | X | X | X |  | X | X | 
| NASNetLarge |  |  |  | X | X |  |  | X | X | 
| NASNetMobile | X | X |  | X | X | X |  | X | X | 
| ResNet101 |  |  |  | X | X | X |  |  | X | 
| ResNet 101 v2 |  |  |  | X | X | X |  |  | X | 
| ResNet 152 |  |  |  | X | X |  |  |  | X | 
| Resnet 152 v2 |  |  |  | X | X |  |  |  | X | 
| ResNet50 | X | X |  | X | X |  |  | X | X | 
| ResNet 50 v2 | X | X |  | X | X | X |  | X | X | 
| VGG16 |  |  |  | X | X |  |  | X | X | 
| Xception | X | X |  | X | X | X |  | X | X | 

------

## TensorFlow-LITE
<a name="collapsible-section-07"></a>

------
#### [ TensorFlow-Lite (FP32) ]


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | i.MX 8M Plus | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet\$12018\$104\$127 | X |  |  | X | X | X |  |  | X |  | 
| inception\$1resnet\$1v2\$12018\$104\$127 |  |  |  | X | X | X |  |  | X |  | 
| inception\$1v3\$12018\$104\$127 |  |  |  | X | X | X |  |  | X | X | 
| inception\$1v4\$12018\$104\$127 |  |  |  | X | X | X |  |  | X | X | 
| mnasnet\$10.5\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mnasnet\$11.0\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mnasnet\$11.3\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mobilenet\$1v1\$10.25\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.25\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1192 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v2\$11.0\$1224 | X |  |  | X | X | X |  |  | X | X | 
| resnet\$1v2\$1101 |  |  |  | X | X | X |  |  | X |  | 
| squeezenet\$12018\$104\$127 | X |  |  | X | X | X |  |  | X |  | 

------
#### [ TensorFlow-Lite (INT8) ]


| Modelos | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | A TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | i.MX 8M Plus | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| inception\$1v1 |  |  |  |  |  |  | X |  |  | X | 
| inception\$1v2 |  |  |  |  |  |  | X |  |  | X | 
| inception\$1v3 | X |  |  |  |  | X | X |  | X | X | 
| inception\$1v4\$1299 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v1\$10.25\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.25\$1224 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1224 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1224 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v1\$11.0\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1224 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v2\$11.0\$1224 | X |  |  |  |  | X | X |  | X | X | 
| deeplab-v3\$1513 |  |  |  |  |  |  | X |  |  |  | 

------

# Implementación de modelos
<a name="neo-deployment-edge"></a>

Puede implementar el módulo de cálculo en dispositivos periféricos con recursos limitados: descargando el modelo compilado de Amazon S3 a su dispositivo y utilizando [DLR](https://github.com/neo-ai/neo-ai-dlr), o puede usar [IoT Greengrass AWS](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html).

Antes de continuar, asegúrate de que tu dispositivo edge sea compatible con SageMaker Neo. Consulte [Marcos, dispositivos, sistemas y arquitecturas compatibles](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html) para averiguar qué dispositivos periféricos lo son. Asegúrese de haber especificado el dispositivo periférico de destino al enviar el trabajo de compilación, consulte [Uso de Neo para compilar un modelo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html).

## Implementación de un modelo compilado (DLR)
<a name="neo-deployment-dlr"></a>

[DLR](https://github.com/neo-ai/neo-ai-dlr) es un tiempo de ejecución compacto y común para modelos de aprendizaje profundo y modelos de árboles de decisiones. El DLR utiliza el tiempo de ejecución [TVM](https://github.com/neo-ai/tvm), el tiempo de ejecución [Treelite](https://treelite.readthedocs.io/en/latest/install.html) y NVIDIA TensorRT™ y puede incluir otros tiempos de ejecución específicos del hardware. DLR proporciona Python/C\$1\$1 unificado APIs para cargar y ejecutar modelos compilados en varios dispositivos.

Puede instalar la última versión del paquete DLR mediante el siguiente comando pip:

```
pip install dlr
```

Para instalar DLR en destinos de GPU o dispositivos periféricos que no sean x86, consulte [Versiones](https://github.com/neo-ai/neo-ai-dlr/releases) para ver los binarios prediseñados o [Instalación de DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html) para compilar DLR desde el origen. Por ejemplo, para instalar DLR para Raspberry Pi 3, puede usar: 

```
pip install https://neo-ai-dlr-release.s3-us-west-2.amazonaws.com/v1.3.0/pi-armv7l-raspbian4.14.71-glibc2_24-libstdcpp3_4/dlr-1.3.0-py3-none-any.whl
```

## Implemente un modelo (AWS IoT Greengrass)
<a name="neo-deployment-greengrass"></a>

[AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html) extiende las capacidades de la nube a los dispositivos locales. Permite que los dispositivos recopilen y analicen datos más cerca del origen de la información, reaccionen de forma autónoma a eventos locales y se comuniquen de forma segura entre sí en las redes locales. Con AWS IoT Greengrass, puede realizar inferencias de aprendizaje automático en el borde de los datos generados localmente mediante modelos entrenados en la nube. Actualmente, puede implementar modelos en todos los dispositivos AWS IoT Greengrass basados en los procesadores de las series ARM Cortex-A, Intel Atom y Nvidia Jetson. Para obtener más información sobre la implementación de una aplicación de inferencia Lambda para realizar inferencias de aprendizaje automático con AWS IoT Greengrass, [consulte Cómo configurar la inferencia de aprendizaje automático optimizada](https://docs.aws.amazon.com/greengrass/latest/developerguide/ml-dlc-console.html) mediante la consola de administración. AWS 

# Configuración de Neo en dispositivos periféricos
<a name="neo-getting-started-edge"></a>

En esta guía para empezar a utilizar Amazon SageMaker Neo, se muestra cómo compilar un modelo, configurar el dispositivo y hacer inferencias en el dispositivo. La mayoría de los ejemplos de código utilizan Boto3. Proporcionamos los comandos que AWS CLI se utilizan cuando corresponde, así como instrucciones sobre cómo cumplir los requisitos previos de Neo. 

**nota**  
Puede ejecutar los siguientes fragmentos de código en su máquina local, en un SageMaker bloc de notas, en Amazon SageMaker Studio o (según el dispositivo perimetral) en su dispositivo perimetral. La configuración es similar; sin embargo, hay dos excepciones principales si ejecutas esta guía en una instancia de SageMaker notebook o en una sesión de SageMaker Studio:   
No es necesario instalar Boto3.
No es necesario añadir la política de IAM `‘AmazonSageMakerFullAccess’`

 En esta guía se supone que está ejecutando las siguientes instrucciones en su dispositivo periférico. 

# Requisitos previos
<a name="neo-getting-started-edge-step0"></a>

SageMaker Neo es una función que te permite entrenar modelos de aprendizaje automático una vez y ejecutarlos en cualquier lugar de la nube y en la periferia. Antes de compilar y optimizar los modelos con Neo, debe configurar algunos requisitos previos. Debe instalar las bibliotecas de Python necesarias, configurar sus AWS credenciales, crear un rol de IAM con los permisos necesarios y configurar un bucket de S3 para almacenar los artefactos del modelo. También debe tener preparado un modelo de machine learning entrenado. Los pasos siguientes le guiarán a través de la configuración:

1. **Instalación de Boto3**

   Si ejecuta estos comandos en su dispositivo periférico, debe instalar AWS SDK para Python (Boto3). En un entorno Python (preferiblemente un entorno virtual), ejecute lo siguiente localmente en el terminal de su dispositivo periférico o en una instancia de cuaderno de Jupyter: 

------
#### [ Terminal ]

   ```
   pip install boto3
   ```

------
#### [ Jupyter Notebook ]

   ```
   !pip install boto3
   ```

------

1.  **Configure las credenciales AWS ** 

   Debe configurar las credenciales de Amazon Web Services en su dispositivo para ejecutar SDK for Python (Boto3). De forma predeterminada, las AWS credenciales deben almacenarse en el archivo `~/.aws/credentials` del dispositivo perimetral. En el archivo de credenciales, debe ver dos variables de entorno: `aws_access_key_id` y `aws_secret_access_key`. 

   En su terminal, ejecute: 

   ```
   $ more ~/.aws/credentials
   
   [default]
   aws_access_key_id = YOUR_ACCESS_KEY
   aws_secret_access_key = YOUR_SECRET_KEY
   ```

   La [ Guía de referencia general AWS](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys) contiene instrucciones sobre cómo obtener las `aws_access_key_id` y `aws_secret_access_key` necesarias. Para obtener más información sobre cómo configurar las credenciales en su dispositivo, consulte la documentación de [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration). 

1.  **Configure un rol de IAM y asocie políticas.** 

   Neo necesita acceder al URI del bucket de S3. Cree un rol de IAM que pueda ejecutar SageMaker IA y que tenga permiso para acceder al URI de S3. Puede crear un rol de IAM mediante el SDK para Python (Boto3), la consola o AWS CLI. El siguiente ejemplo ilustra cómo crear un rol de IAM mediante SDK for Python (Boto3): 

   ```
   import boto3
   
   AWS_REGION = 'aws-region'
   
   # Create an IAM client to interact with IAM
   iam_client = boto3.client('iam', region_name=AWS_REGION)
   role_name = 'role-name'
   ```

   Para obtener más información sobre cómo crear un rol de IAM con la consola o mediante la AWS API AWS CLI, consulte [Crear un usuario de IAM en](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_api) su cuenta. AWS 

    Cree un diccionario que describa la política de IAM que va a asociar. Esta política se utiliza para crear un nuevo rol de IAM. 

   ```
   policy = {
       'Statement': [
           {
               'Action': 'sts:AssumeRole',
               'Effect': 'Allow',
               'Principal': {'Service': 'sagemaker.amazonaws.com'},
           }],  
        'Version': '2012-10-17		 	 	 '
   }
   ```

   Cree un nuevo rol de IAM con la política que definió anteriormente:

   ```
   import json 
   
   new_role = iam_client.create_role(
       AssumeRolePolicyDocument=json.dumps(policy),
       Path='/',
       RoleName=role_name
   )
   ```

   Necesitará saber cuál es su nombre de recurso de Amazon (ARN) cuando cree un trabajo de compilación en un paso posterior, así que guárdelo también en una variable. 

   ```
   role_arn = new_role['Role']['Arn']
   ```

    Ahora que ha creado un nuevo rol, adjunte los permisos que necesita para interactuar con Amazon SageMaker AI y Amazon S3: 

   ```
   iam_client.attach_role_policy(
       RoleName=role_name,
       PolicyArn='arn:aws:iam::aws:policy/AmazonSageMakerFullAccess'
   )
   
   iam_client.attach_role_policy(
       RoleName=role_name,
       PolicyArn='arn:aws:iam::aws:policy/AmazonS3FullAccess'
   );
   ```

1. **Cree un bucket de Amazon S3 para almacenar los artefactos de sus modelos**

   SageMaker Neo accederá a los artefactos de sus modelos desde Amazon S3

------
#### [ Boto3 ]

   ```
   # Create an S3 client
   s3_client = boto3.client('s3', region_name=AWS_REGION)
   
   # Name buckets
   bucket='name-of-your-bucket'
   
   # Check if bucket exists
   if boto3.resource('s3').Bucket(bucket) not in boto3.resource('s3').buckets.all():
       s3_client.create_bucket(
           Bucket=bucket,
           CreateBucketConfiguration={
               'LocationConstraint': AWS_REGION
           }
       )
   else:
       print(f'Bucket {bucket} already exists. No action needed.')
   ```

------
#### [ CLI ]

   ```
   aws s3 mb s3://'name-of-your-bucket' --region specify-your-region 
   
   # Check your bucket exists
   aws s3 ls s3://'name-of-your-bucket'/
   ```

------

1. **Formación de un modelo de machine learning**

   Consulte [Entrenar un modelo con Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html) para obtener más información sobre cómo entrenar un modelo de aprendizaje automático con Amazon SageMaker AI. Si lo desea, puede cargar su modelo formado a nivel local directamente en un bucket de URI de Amazon S3. 
**nota**  
 Asegúrese de que el modelo tenga el formato correcto en función del marco que haya utilizado. Consulte [¿Qué formas de datos de entrada espera SageMaker Neo?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs) 

   Si aún no tiene un modelo, utilice el `curl` comando para obtener una copia local TensorFlow del `coco_ssd_mobilenet` modelo en el sitio web. El modelo que acaba de copiar es un modelo de detección de objetos formado a partir del [conjunto de datos COCO](https://cocodataset.org/#home). Escribe lo siguiente en su cuaderno de Jupyter:

   ```
   model_zip_filename = './coco_ssd_mobilenet_v1_1.0.zip'
   !curl http://storage.googleapis.com/download.tensorflow.org/models/tflite/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip \
       --output {model_zip_filename}
   ```

   Tenga en cuenta que este ejemplo en particular se empaquetó en un archivo .zip. Descomprima este archivo y vuelva a empaquetarlo como un archivo tar comprimido (`.tar.gz`) antes de usarlo en pasos posteriores. Escribe lo siguiente en su cuaderno de Jupyter: 

   ```
   # Extract model from zip file
   !unzip -u {model_zip_filename}
   
   model_filename = 'detect.tflite'
   model_name = model_filename.split('.')[0]
   
   # Compress model into .tar.gz so SageMaker Neo can use it
   model_tar = model_name + '.tar.gz'
   !tar -czf {model_tar} {model_filename}
   ```

1. **Cargue el modelo formado en un bucket de S3**

   Una vez que tenga un modelo de machine learning, guárdelo en un bucket de Amazon S3. 

------
#### [ Boto3 ]

   ```
   # Upload model        
   s3_client.upload_file(Filename=model_filename, Bucket=bucket, Key=model_filename)
   ```

------
#### [ CLI ]

   Reemplace `your-model-filename` y `amzn-s3-demo-bucket` con el nombre de su bucket de S3. 

   ```
   aws s3 cp your-model-filename s3://amzn-s3-demo-bucket
   ```

------

# Compile el modelo.
<a name="neo-getting-started-edge-step1"></a>

Una vez que haya satisfecho los [requisitos previos](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html#neo-getting-started-edge-step0), podrá compilar el modelo con Amazon SageMaker AI Neo. Puede compilar su modelo mediante la AWS CLI consola o el [SDK de Amazon Web Services para Python (Boto3) (consulte [Use](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html) Neo to Compile a Model)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html). En este ejemplo, compilará su modelo con Boto3.

Para compilar un modelo, SageMaker Neo necesita la siguiente información:

1.  **El URI del bucket de Amazon S3 en el que guardó el modelo formado.** 

   Si ha seguido los requisitos previos, el nombre de su bucket se almacena en una variable denominada `bucket`. En el siguiente fragmento de código, se muestra cómo enumerar todos sus buckets mediante AWS CLI: 

   ```
   aws s3 ls
   ```

   Por ejemplo: 

   ```
   $ aws s3 ls
   2020-11-02 17:08:50 bucket
   ```

1.  **El URI del bucket de Amazon S3 en el que desea guardar el modelo compilado.** 

   El siguiente fragmento de código concatena el URI del bucket de Amazon S3 con el nombre de un directorio de salida denominado `output`: 

   ```
   s3_output_location = f's3://{bucket}/output'
   ```

1.  **El marco de machine learning que haya utilizado para formar a su modelo.** 

   Defina el marco que haya utilizado para formar a su modelo.

   ```
   framework = 'framework-name'
   ```

   Por ejemplo, si desea compilar un modelo que se haya entrenado con TensorFlow, puede usar `tflite` o`tensorflow`. `tflite`Úselo si desea utilizar una versión más ligera TensorFlow que utilice menos memoria de almacenamiento. 

   ```
   framework = 'tflite'
   ```

   Para obtener una lista completa de los marcos compatibles con Neo, consulte [Marcos, dispositivos, sistemas y arquitecturas compatibles](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html). 

1.  **La forma de la entrada de su modelo.** 

    Neo requiere el nombre y la forma del tensor de entrada. El nombre y la forma se pasan como pares de clave-valor. `value` es una lista de las dimensiones enteras de un tensor de entrada y `key` es el nombre exacto de un tensor de entrada en el modelo. 

   ```
   data_shape = '{"name": [tensor-shape]}'
   ```

   Por ejemplo:

   ```
   data_shape = '{"normalized_input_image_tensor":[1, 300, 300, 3]}'
   ```
**nota**  
Asegúrese de que el modelo tenga el formato correcto en función del marco que haya utilizado. Consulta [¿Qué formas de datos de entrada espera SageMaker Neo?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs) La clave de este diccionario debe cambiarse por el nombre del nuevo tensor de entrada.

1.  **El nombre del dispositivo de destino para el que se va a compilar o los datos generales de la plataforma de hardware** 

   ```
   target_device = 'target-device-name'
   ```

   Por ejemplo, si desea realizar la implementación en una Raspberry Pi 3, utilice: 

   ```
   target_device = 'rasp3b'
   ```

   Puede encontrar la lista completa de dispositivos periféricos compatibles en [Marcos, dispositivos, sistemas y arquitecturas compatibles](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html).

 Ahora que ha completado los pasos anteriores, puede enviar un trabajo de compilación a Neo. 

```
# Create a SageMaker client so you can submit a compilation job
sagemaker_client = boto3.client('sagemaker', region_name=AWS_REGION)

# Give your compilation job a name
compilation_job_name = 'getting-started-demo'
print(f'Compilation job for {compilation_job_name} started')

response = sagemaker_client.create_compilation_job(
    CompilationJobName=compilation_job_name,
    RoleArn=role_arn,
    InputConfig={
        'S3Uri': s3_input_location,
        'DataInputConfig': data_shape,
        'Framework': framework.upper()
    },
    OutputConfig={
        'S3OutputLocation': s3_output_location,
        'TargetDevice': target_device 
    },
    StoppingCondition={
        'MaxRuntimeInSeconds': 900
    }
)

# Optional - Poll every 30 sec to check completion status
import time

while True:
    response = sagemaker_client.describe_compilation_job(CompilationJobName=compilation_job_name)
    if response['CompilationJobStatus'] == 'COMPLETED':
        break
    elif response['CompilationJobStatus'] == 'FAILED':
        raise RuntimeError('Compilation failed')
    print('Compiling ...')
    time.sleep(30)
print('Done!')
```

Si desea información adicional para la depuración, incluya la siguiente declaración de impresión:

```
print(response)
```

Si el trabajo de compilación se realiza correctamente, el modelo compilado se almacena en el bucket de Amazon S3 de salida que haya especificado anteriormente (`s3_output_location`). Descargue su modelo compilado localmente: 

```
object_path = f'output/{model}-{target_device}.tar.gz'
neo_compiled_model = f'compiled-{model}.tar.gz'
s3_client.download_file(bucket, object_path, neo_compiled_model)
```

# Configure el dispositivo
<a name="neo-getting-started-edge-step2"></a>

Deberá instalar los paquetes en su dispositivo periférico para que su dispositivo pueda hacer inferencias. También debe instalar el núcleo de [IoT AWS Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html) o [Tiempo de ejecución de aprendizaje profundo (DLR)](https://github.com/neo-ai/neo-ai-dlr). En este ejemplo, instalará los paquetes necesarios para hacer inferencias para el algoritmo de detección de objetos `coco_ssd_mobilenet` y utilizará el DLR.

1. **Instale paquetes adicionales**

   Además de Boto3, debe instalar determinadas bibliotecas en su dispositivo periférico. Las bibliotecas que vaya a instalar dependen de su caso de uso. 

   Por ejemplo, para el algoritmo de detección de `coco_ssd_mobilenet` objetos que descargó anteriormente, debe instalarlo [NumPy](https://numpy.org/)para la manipulación de datos y las estadísticas, [PIL](https://pillow.readthedocs.io/en/stable/) para cargar imágenes y [Matplotlib](https://matplotlib.org/) para generar gráficos. También necesitará una copia TensorFlow si quiere medir el impacto de compilar con Neo en comparación con una línea base. 

   ```
   !pip3 install numpy pillow tensorflow matplotlib 
   ```

1. **Instalar un motor de inferencia en su dispositivo**

   Para ejecutar su modelo compilado en NEO, instale [Tiempo de ejecución de aprendizaje profundo (DLR)](https://github.com/neo-ai/neo-ai-dlr) en su dispositivo. DLR es un tiempo de ejecución compacto y común para modelos de aprendizaje profundo y modelos de árboles de decisiones. En los destinos de CPU x86\$164 que ejecutan Linux, puede instalar la última versión del paquete DLR mediante el siguiente comando `pip`:

   ```
   !pip install dlr
   ```

   Para instalar DLR en destinos de GPU o dispositivos periféricos que no sean x86, consulte [Versiones](https://github.com/neo-ai/neo-ai-dlr/releases) para ver los binarios prediseñados o [Instalación de DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html) para compilar DLR desde el origen. Por ejemplo, para instalar DLR para Raspberry Pi 3, puede usar: 

   ```
   !pip install https://neo-ai-dlr-release.s3-us-west-2.amazonaws.com/v1.3.0/pi-armv7l-raspbian4.14.71-glibc2_24-libstdcpp3_4/dlr-1.3.0-py3-none-any.whl
   ```

# Cómo hacer inferencias en el dispositivo
<a name="neo-getting-started-edge-step3"></a>

En este ejemplo, utilizará Boto3 para descargar el resultado de su trabajo de compilación en su dispositivo periférico. A continuación, importará el DLR, descargará un ejemplo de imágenes del conjunto de datos, cambiará el tamaño de esta imagen para que coincida con la entrada original del modelo y, a continuación, realizará una predicción.

1. **Descargue el modelo compilado de Amazon S3 a su dispositivo y extráigalo del archivo tar comprimido.** 

   ```
   # Download compiled model locally to edge device
   object_path = f'output/{model_name}-{target_device}.tar.gz'
   neo_compiled_model = f'compiled-{model_name}.tar.gz'
   s3_client.download_file(bucket_name, object_path, neo_compiled_model)
   
   # Extract model from .tar.gz so DLR can use it
   !mkdir ./dlr_model # make a directory to store your model (optional)
   !tar -xzvf ./compiled-detect.tar.gz --directory ./dlr_model
   ```

1. **Importe el DLR y un objeto `DLRModel` inicializado.**

   ```
   import dlr
   
   device = 'cpu'
   model = dlr.DLRModel('./dlr_model', device)
   ```

1. **Descargue una imagen para inferirla y formatéela en función de cómo se formó su modelo**.

   En el caso del ejemplo `coco_ssd_mobilenet`, puede descargar una imagen del [conjunto de datos COCO](https://cocodataset.org/#home) y, a continuación, reformarla a `300x300`: 

   ```
   from PIL import Image
   
   # Download an image for model to make a prediction
   input_image_filename = './input_image.jpg'
   !curl https://farm9.staticflickr.com/8325/8077197378_79efb4805e_z.jpg --output {input_image_filename}
   
   # Format image so model can make predictions
   resized_image = image.resize((300, 300))
   
   # Model is quantized, so convert the image to uint8
   x = np.array(resized_image).astype('uint8')
   ```

1. **Use el DLR para hacer inferencias**.

   Por último, puede usar el DLR para hacer una predicción sobre la imagen que acaba de descargar: 

   ```
   out = model.run(x)
   ```

[Para ver más ejemplos del uso del DLR para hacer inferencias a partir de un modelo compilado por NEO en un dispositivo perimetral, consulta el repositorio de Github. neo-ai-dlr ](https://github.com/neo-ai/neo-ai-dlr) 