

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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

O Amazon SageMaker Neo fornece apoio de compilação para frameworks de machine learning mais conhecidos. Você pode implantar seus dispositivos de borda compilados pela NEO, como o Raspberry Pi 3, o Sitara da Texas Instruments, o Jetson TX1 e muito mais. Para obter uma lista completa de estruturas e dispositivos de borda compatíveis, consulte as [Estruturas, dispositivos, sistemas e arquiteturas compatíveis](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html). 

Você deve configurar seu dispositivo de borda para que ele possa usar os serviços da AWS. Uma maneira de fazer isso é instalar o DLR e o Boto3 no seu dispositivo. Para fazer isso, você deve configurar as credenciais de autenticação. Para obter mais informações sobre a configuração do , consulte [Configuração Boto3 da AWS](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration). Depois que seu modelo for compilado e seu dispositivo de borda estiver configurado, você poderá baixar o modelo do Amazon S3 para seu dispositivo de borda. A partir daí, você pode usar o [Runtime de aprendizado profundo (DLR)](https://neo-ai-dlr.readthedocs.io/en/latest/index.html) para ler o modelo compilado e fazer inferências. 

Para usuários iniciantes, recomendamos que você confira o guia de [Conceitos básicos](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html). Este guia mostra passo a passo como configurar suas credenciais, compilar um modelo, implantar seu modelo em um Raspberry Pi 3 e fazer inferências em imagens. 

**Topics**
+ [Estruturas, dispositivos, sistemas e arquiteturas compatíveis](neo-supported-devices-edge.md)
+ [Implantar modelos](neo-deployment-edge.md)
+ [Configurar o Neo em dispositivos de borda](neo-getting-started-edge.md)

# Estruturas, dispositivos, sistemas e arquiteturas compatíveis
<a name="neo-supported-devices-edge"></a>

O Amazon SageMaker Neo oferece apoio a estruturas comuns de machine learning, dispositivos periféricos, sistemas operacionais e arquiteturas de chip. Descubra se o Neo é compatível com sua estrutura, dispositivo de ponta, sistema operacional e arquitetura de chip selecionando um dos tópicos abaixo.

Você pode encontrar uma lista de modelos que foram testados pela equipe do Amazon SageMaker Neo na seção [Modelos testados](neo-supported-edge-tested-models.md).

**nota**  
Os dispositivos Ambarella exigem que arquivos adicionais sejam incluídos no arquivo TAR compactado antes que ele seja enviado para compilação. Para ter mais informações, consulte [Solucionar erros Ambarella](neo-troubleshooting-target-devices-ambarella.md).
O TIM-VX (libtim-vx.so) é necessário para o i.MX 8M Plus. [Para obter informações sobre como criar o TIM-VX, consulte o repositório TIM-VX no GitHub.](https://github.com/VeriSilicon/TIM-VX)

**Topics**
+ [Estruturas compatíveis](neo-supported-devices-edge-frameworks.md)
+ [Dispositivos, arquiteturas de chip e sistemas compatíveis](neo-supported-devices-edge-devices.md)
+ [Modelos testados](neo-supported-edge-tested-models.md)

# Estruturas compatíveis
<a name="neo-supported-devices-edge-frameworks"></a>

O Amazon SageMaker Neo é compatível com as seguintes estruturas: 


| Framework | Versão do framework | Versão do modelo | Modelos da  | Formatos de modelo (empacotados em \$1.tar.gz) | Kits de ferramentas | 
| --- | --- | --- | --- | --- | --- | 
| MXNet | 1.8 | Compatível com 1.8 ou anterior | Classificação de imagens, detecção de objetos, segmentação semântica, estimativa de pose, reconhecimento de atividades | Um arquivo de símbolos (.json) e um arquivo de parâmetros (.params) | GluonCV v0.8.0 | 
| ONNX | 1,7 | Compatível com 1.7 ou anterior | Classificação de imagens, SVM | Um arquivo de modelo (.onnx) |  | 
| Keras | 2.2 | Compatível com 2.2 ou anterior | Classificação de imagens | Um arquivo de definição de modelo (.h5) |  | 
| PyTorch | 1.7, 1.8 | Compatível com 1.7, 1.8 ou anterior | Classificação de imagens, detecção de objetos | Um arquivo de definição de modelo (.pth) |  | 
| TensorFlow | 1,15, 2,4, 2,5 (somente para instâncias ml.inf1.\$1) | Compatível com instâncias 1.15, 2.4, 2.5 ou anteriores (somente para instâncias ml.inf1.\$1) | Classificação de imagens, detecção de objetos | \$1Para modelos salvos, um arquivo .pb ou um arquivo .pbtxt e um diretório de variáveis que contenha variáveis \$1Para modelos congelados, apenas um arquivo .pb ou .pbtxt |  | 
| TensorFlow-Lite | 1.15 | Compatível com 1.15 ou anterior | Classificação de imagens, detecção de objetos | Um arquivo flatbuffer de definição de modelo (.tflite) |  | 
| XGBoost | 1.3 | Compatível com 1.3 ou anterior | Árvores de decisão | Um arquivo de modelo XGBoost (.model) em que o número de nós em uma árvore é menor que 2^31 |  | 
| DARKNET |  |  | Classificação de imagens, detecção de objetos (o modelo Yolo não é compatível) | Um arquivo de configuração (.cfg) e um arquivo de pesos (.weights) |  | 

# Dispositivos, arquiteturas de chip e sistemas compatíveis
<a name="neo-supported-devices-edge-devices"></a>

O Amazon SageMaker Neo é compatível com os seguintes dispositivos, arquiteturas de chips e sistemas operacionais:

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

Você pode selecionar um dispositivo usando a lista suspensa no [console do Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker) ou especificando o `TargetDevice` na configuração de saída da API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html).

Você pode escolher entre um dos seguintes dispositivos de borda: 


| Lista de dispositivos | Sistema em um chip (SoC) | Sistema operacional | Arquitetura | Acelerador | Exemplo de opções do compilador | 
| --- | --- | --- | --- | --- | --- | 
| aisage | Nenhum | Linux | ARM64 | Mali | Nenhum | 
| amba\$1cv2 | CV2 | Arch Linux | ARM64 | cvflow | Nenhum | 
| amba\$1cv22 | CV22 | Arch Linux | ARM64 | cvflow | Nenhum | 
| amba\$1cv25 | CV25 | Arch Linux | ARM64 | cvflow | Nenhum | 
| coreml | Nenhum | iOS, macOS | Nenhum | Nenhum | \$1"class\$1labels": "imagenet\$1labels\$11000.txt"\$1 | 
| imx8qm | NXP imx8 | Linux | ARM64 | Nenhum | Nenhum | 
| imx8mplus | i.MX 8M Plus | Linux | ARM64 | NPU | Nenhum | 
| jacinto\$1tda4vm | TDA4VM | Linux | Arm | TDA4VM | Nenhum | 
| jetson\$1nano | Nenhum | 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 | Nenhum | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$153', 'trt-ver': '6.0.1', 'cuda-ver': '10.0'\$1 | 
| jetson\$1tx2 | Nenhum | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$162', 'trt-ver': '6.0.1', 'cuda-ver': '10.0'\$1 | 
| jetson\$1xavier | Nenhum | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$172', 'trt-ver': '5.1.6', 'cuda-ver': '10.0'\$1 | 
| qcs605 | Nenhum | Android | ARM64 | Mali | \$1'ANDROID\$1PLATFORM': 27\$1 | 
| qcs603 | Nenhum | Android | ARM64 | Mali | \$1'ANDROID\$1PLATFORM': 27\$1 | 
| rasp3b | ARM A56 | Linux | ARM\$1EABIHF | Nenhum | \$1'mattr': ['\$1neon']\$1 | 
| rasp4b | ARM A72 | Nenhum | Nenhum | Nenhum | Nenhum | 
| rk3288 | Nenhum | Linux | ARM\$1EABIHF | Mali | Nenhum | 
| rk3399 | Nenhum | Linux | ARM64 | Mali | Nenhum | 
| sbe\$1c | Nenhum | Linux | x86\$164 | Nenhum | \$1'mcpu': 'core-avx2'\$1 | 
| sitara\$1am57x | AM57X | Linux | ARM64 | EVE e/ou C66x DSP | Nenhum | 
| x86\$1win32 | Nenhum | Windows 10 | X86\$132 | Nenhum | Nenhum | 
| x86\$1win64 | Nenhum | Windows 10 | X86\$132 | Nenhum | Nenhum | 

Para obter mais informações sobre as opções do compilador de valores-chave JSON para cada dispositivo de destino, consulte o campo `CompilerOptions` no tipo de dados da [API `OutputConfig`](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html).

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

As tabelas de consulta a seguir fornecem informações sobre sistemas operacionais e arquiteturas disponíveis para trabalhos de compilação de modelos Neo. 

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


| Acelerador | X86\$164 | x86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Sem acelerador (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Sim | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Não | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Yes (Sim) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Yes (Sim) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Yes (Sim) | 
| Nvidia GPU | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Sim | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Não | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Sim | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Não | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Nº | 
| Intel\$1Graphics | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Sim | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Não | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Nº | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Nº | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Nº | 
| ARM Mali | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Não | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Não | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Yes (Sim) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Yes (Sim) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Yes (Sim) | 

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


| Acelerador | X86\$164 | x86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Sem acelerador (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Yes (Sim) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Yes (Sim) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Yes (Sim) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Não | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Sim | 
| Nvidia GPU | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Não | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Nº | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Nº | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Nº | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Nº | 
| Intel\$1Graphics | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Yes (Sim) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Yes (Sim) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Não | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Nº | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Nº | 
| ARM Mali | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Não | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Não | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Sim | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Não | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Sim | 

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


| Acelerador | X86\$164 | x86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Sem acelerador (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Yes (Sim) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/success_icon.svg) Yes (Sim) | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Não | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Nº | ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/negative_icon.svg) Nº | 

------

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

As seções dobráveis a seguir fornecem informações sobre modelos de machine learning que foram testados pela equipe do Amazon SageMaker Neo. Expanda a seção dobrável com base em sua estrutura para verificar se um modelo foi testado.

**nota**  
Esta não é uma lista abrangente de modelos que podem ser compilados com o Neo.

Consulte [Estruturas compatíveis](neo-supported-devices-edge-frameworks.md) e os [SageMaker AI Neo Supported Operators](https://aws.amazon.com/releasenotes/sagemaker-neo-supported-frameworks-and-operators/) para descobrir se pode compilar seu modelo com o SageMaker Neo.

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


| Modelos da  | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AlexNet |  |  |  |  |  |  |  |  |  | 
| ResNet50 | 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 da  | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AlexNet |  |  | X |  |  |  |  |  |  | 
| Densenet121 |  |  | X |  |  |  |  |  |  | 
| DenseNet201 | X | X | X | X | X | X |  | X | X | 
| GoogleNet | X | X |  | X | X | X |  | X | X | 
| InceptionV3 |  |  |  | X | X | X |  | X | X | 
| MobileNet0.75 | X | X |  | X | X | X |  |  | X | 
| MobileNet1.0 | X | X | X | X | X | X |  |  | X | 
| MobileNetV2\$10.5 | X | X |  | X | X | X |  |  | X | 
| MobileNetV2\$11.0 | X | X | X | X | X | X | X | X | X | 
| MobileNetV3\$1Large | X | X | X | X | X | X | X | X | X | 
| MobileNetV3\$1Small | X | X | X | X | X | X | X | X | X | 
| ResNest50 |  |  |  | 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 | 
| ResNext101\$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 | 
| SqueezeNet1.0 | X | X | X | X | X | X |  |  | X | 
| SqueezeNet1.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 da  | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet121 | X | X | X | X | X | X |  | X | X | 
| densenet201 | 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 da  | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AlexNet |  |  | X |  |  |  |  |  |  | 
| mobilenetv2-1.0 | X | X | X | X | X | X |  | X | X | 
| resnet18v1 | X |  |  | X | X |  |  |  | X | 
| resnet18v2 | X |  |  | X | X |  |  |  | X | 
| resnet50v1 | X |  | X | X | X |  |  | X | X | 
| resnet50v2 | X |  | X | X | X |  |  | X | X | 
| resnet152v1 |  |  |  | X | X | X |  |  | X | 
| resnet152v2 |  |  |  | X | X | X |  |  | X | 
| squeezenet1.1 | X |  | X | X | X | X |  | X | X | 
| vgg19 |  |  | X |  |  |  |  |  | X | 

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


| Modelos da  | ARM V8 | ARM Mali | Ambarella CV22 | Ambarella CV25 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet121 | 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 | 
| squeezenet1.0 | X | X |  |  | X | X | X |  |  | X | 
| squeezenet1.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 da  | ARM V8 | ARM Mali | Ambarella CV22 | Ambarella CV25 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet201 | 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 | 
| mobilenet130\$1v2 | X | X |  |  | X | X | X |  |  | X | 
| mobilenet140\$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 da  | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| DenseNet121  | X | X |  | X | X | X |  | X | X | 
| DenseNet201 | X | X |  | X | X | X |  |  | X | 
| InceptionV3 | X | X |  | X | X | X |  | X | X | 
| MobileNet | X | X |  | X | X | X |  | X | X | 
| MobileNetv2 | 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 | 
| ResNet101v2 |  |  |  | X | X | X |  |  | X | 
| ResNet152 |  |  |  | X | X |  |  |  | X | 
| ResNet152v2 |  |  |  | X | X |  |  |  | X | 
| ResNet50 | X | X |  | X | X |  |  | X | X | 
| ResNet50V2 | 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 da  | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI 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 da  | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI 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 |  |  |  | 

------

# Implantar modelos
<a name="neo-deployment-edge"></a>

Você pode implantar o módulo computacional em dispositivos de borda com recursos limitados: baixando o modelo compilado do Amazon S3 para o seu dispositivo e usando o [DLR](https://github.com/neo-ai/neo-ai-dlr), ou você pode usar o [IoT Greengrass da AWS](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html).

Antes de prosseguir, verifique se o dispositivo Edge deve ser compatível com SageMaker o Neo. Consulte [Estruturas, dispositivos, sistemas e arquiteturas compatíveis](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html) para descobrir quais dispositivos de borda são compatíveis. Certifique-se de especificar seu dispositivo de borda de destino ao enviar o trabalho de compilação, consulte [Usar o Neo para compilar um modelo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html).

## Implantar um modelo compilado com o Neo (DLR)
<a name="neo-deployment-dlr"></a>

O [DLR](https://github.com/neo-ai/neo-ai-dlr) é um runtime compacto e comum para modelos de aprendizado profundo e modelos de árvore de decisão. O DLR usa o runtime [TVM](https://github.com/neo-ai/tvm), o runtime [Treelite](https://treelite.readthedocs.io/en/latest/install.html), o NVIDIA TensorRT™ e pode incluir outros runtimes específicos de hardware. O DLR fornece Python/C\$1\$1 unificado APIs para carregar e executar modelos compilados em vários dispositivos.

Você pode instalar a versão mais recente do pacote DLR usando o seguinte comando pip:

```
pip install dlr
```

Para instalação do DLR em destinos de GPU ou dispositivos de borda que não sejam x86, consulte [Versões](https://github.com/neo-ai/neo-ai-dlr/releases) para binários pré-criados ou [Instalação do DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html) para criar DLRa partir da fonte. Por exemplo, para instalar o DLR para o Raspberry Pi 3, você pode 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 um modelo (AWS IoT Greengrass)
<a name="neo-deployment-greengrass"></a>

[AWS O IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html) estende os recursos de nuvem para dispositivos locais. Ele permite que os dispositivos coletem e analisem dados mais próximos da fonte de informações, reajam de maneira autônoma a eventos locais e se comuniquem com segurança uns com os outros em redes locais. Com o AWS IoT Greengrass, você pode realizar inferência de aprendizado de máquina na borda em dados gerados localmente usando modelos treinados na nuvem. Atualmente, você pode implantar modelos em todos os dispositivos AWS IoT Greengrass baseados nos processadores das séries ARM Cortex-A, Intel Atom e Nvidia Jetson. Para obter mais informações sobre a implantação de um aplicativo de inferência Lambda para realizar inferências de aprendizado de máquina com o AWS IoT Greengrass, [consulte Como configurar a inferência otimizada de aprendizado de máquina usando o Management Console](https://docs.aws.amazon.com/greengrass/latest/developerguide/ml-dlc-console.html). AWS 

# Configurar o Neo em dispositivos de borda
<a name="neo-getting-started-edge"></a>

Este guia para começar a usar SageMaker o Amazon Neo mostra como compilar um modelo, configurar seu dispositivo e fazer inferências em seu dispositivo. A maioria dos exemplos de código usa o Boto3. Fornecemos comandos usando AWS CLI quando aplicável, bem como instruções sobre como satisfazer os pré-requisitos do Neo. 

**nota**  
Você pode executar os seguintes trechos de código em sua máquina local, em um SageMaker notebook, no Amazon SageMaker Studio ou (dependendo do seu dispositivo de borda) em seu dispositivo de borda. A configuração é semelhante; no entanto, há duas exceções principais se você executar este guia em uma instância de SageMaker notebook ou sessão do SageMaker Studio:   
Não há necessidade de Instalar o Boto3.
Não há necessidade de adicionar a política `‘AmazonSageMakerFullAccess’` do IAM

 Este guia pressupõe que você esteja executando as seguintes instruções em seu dispositivo de borda: 

# Pré-requisitos
<a name="neo-getting-started-edge-step0"></a>

SageMaker O Neo é um recurso que permite treinar modelos de aprendizado de máquina uma vez e executá-los em qualquer lugar na nuvem e na borda. Antes de poder compilar e otimizar os modelos com o Neo, há alguns pré-requisitos que você precisa configurar. Você deve instalar as bibliotecas Python necessárias, configurar suas AWS credenciais, criar uma função do IAM com as permissões necessárias e configurar um bucket do S3 para armazenar artefatos do modelo. Você também deve ter um modelo de machine learning treinado e pronto. As seguintes etapas o guiarão na configuração:

1. **Instale o Boto3**

   Se estiver executando esses comandos em seu dispositivo de borda, você deve instalar o AWS SDK para Python (Boto3). Em um ambiente Python (de preferência um ambiente virtual), execute o seguinte localmente no terminal do seu dispositivo de borda ou em uma instância do caderno Jupyter: 

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

   ```
   pip install boto3
   ```

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

   ```
   !pip install boto3
   ```

------

1.  **Configurar AWS credenciais** 

   É necessário configurar credenciais do Amazon Web Services no seu dispositivo para executar o SDK para Python (Boto3). Por padrão, as AWS credenciais devem ser armazenadas no arquivo `~/.aws/credentials` em seu dispositivo de borda. No arquivo de credenciais, você deve ver duas variáveis de ambiente: `aws_access_key_id` e `aws_secret_access_key`. 

   No seu terminal, execute: 

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

   O [Guia de Referência Geral AWS](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys) tem instruções sobre como obter o necessário `aws_access_key_id` e `aws_secret_access_key`. Para obter mais informações sobre como configurar credenciais no seu dispositivo, consulte a documentação do [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration). 

1.  **Configure um perfil do IAM e anexe políticas.** 

   O Neo precisa acessar o URI do seu bucket do S3. Crie uma função do IAM que possa executar SageMaker IA e tenha permissão para acessar o URI do S3. É possível criar um perfil do IAM usando o SDK para Python (Boto3), o console ou o AWS CLI. O seguinte exemplo ilustra como criar um perfil do IAM usando o SDK para 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 obter mais informações sobre como criar uma função do IAM com o console ou por meio da AWS API, consulte Como [criar um usuário do IAM em sua AWS conta](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_api). AWS CLI

    Crie um dicionário descrevendo a política do IAM que você está anexando. Essa política é usada para criar um novo perfil do IAM. 

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

   Crie uma novo perfil do IAM usando a política que você definiu acima:

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

   Você precisa saber qual é o seu nome de recurso da Amazon (ARN) quando criar um trabalho de compilação em uma etapa posterior, portanto, armazene-o também em uma variável. 

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

    Agora que você criou uma nova função, anexe as permissões necessárias para interagir com o Amazon SageMaker AI e o 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. **Crie um bucket do Amazon S3 para armazenar seus artefatos do modelo**

   SageMaker Neo acessará seus artefatos de modelo a partir do 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. **Treinar um modelo de machine learning**

   Consulte [Treinar um modelo com o Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html) para obter mais informações sobre como treinar um modelo de aprendizado de máquina usando o Amazon SageMaker AI. Se preferir, carregue seu modelo treinado localmente diretamente em um bucket de URI do Amazon S3. 
**nota**  
 Verifique se o modelo está formatado corretamente, dependendo da estrutura usada. Consulte [Quais formatos de dados de entrada o SageMaker Neo espera?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs) 

   Se você ainda não tiver um modelo, use o `curl` comando para obter uma cópia local do `coco_ssd_mobilenet` modelo no site TensorFlow da empresa. O modelo que você acabou de copiar é um modelo de detecção de objetos treinado a partir do [conjunto de dados COCO](https://cocodataset.org/#home). Digite o seguinte em seu caderno 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}
   ```

   Observe que esse exemplo específico foi empacotado em um arquivo .zip. Descompacte esse arquivo e reempacote-o como um arquivo tar comprimido (`.tar.gz`) antes de usá-lo em etapas posteriores. Digite o seguinte em seu caderno 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. **Carregue o modelo treinado em um bucket S3**

   Depois de treinar seu modo de machine learning, armazene-o em um bucket S3. 

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

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

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

   Substitua `your-model-filename` e `amzn-s3-demo-bucket` pelo nome do bucket do S3. 

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

------

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

Depois de satisfazer os [pré-requisitos](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html#neo-getting-started-edge-step0), você pode compilar seu modelo com o Amazon AI Neo. SageMaker [Você pode compilar seu modelo usando o console ou o AWS CLI[SDK da Amazon Web Services para Python (Boto3). Consulte Use o Neo para](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) compilar um modelo.](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html) Neste exemplo, você compilará seu modelo com o Boto3.

Para compilar um modelo, SageMaker o Neo requer as seguintes informações:

1.  **O URI do bucket do Amazon S3 em que você armazenou o modelo treinado.** 

   Se você seguiu os pré-requisitos, o nome do seu bucket é armazenado em uma variável chamada `bucket`. O trecho de código a seguir mostra como listar todos os seus buckets usando o AWS CLI: 

   ```
   aws s3 ls
   ```

   Por exemplo: 

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

1.  **O URI do bucket do Amazon S3 em que você deseja salvar o modelo compilado.** 

   O trecho de código abaixo concatena o URI do bucket do Amazon S3 com o nome de um diretório de saída chamado: `output` 

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

1.  **A estrutura de machine learning que você usou para treinar seu modelo.** 

   Defina o framework que você usou para treinar seu modelo.

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

   Por exemplo, se você quiser compilar um modelo que foi treinado usando TensorFlow, você poderia usar `tflite` ou`tensorflow`. Use `tflite` se quiser usar uma versão mais leve TensorFlow que use menos memória de armazenamento. 

   ```
   framework = 'tflite'
   ```

   Para obter uma lista completa de estruturas e dispositivos de borda compatíveis, consulte [Estruturas, dispositivos, sistemas e arquiteturas compatíveis](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html). 

1.  **A forma da entrada do seu modelo.** 

    Neo requer o nome e a forma do seu tensor de entrada. O nome e a forma são passadas para pares de chave-valor. `value`é uma lista das dimensões inteiras de um tensor de entrada e `key` é o nome exato de um tensor de entrada no modelo. 

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

   Por exemplo:

   ```
   data_shape = '{"normalized_input_image_tensor":[1, 300, 300, 3]}'
   ```
**nota**  
Verifique se o modelo está formatado corretamente, dependendo da estrutura usada. Consulte [Quais formatos de dados de entrada o SageMaker Neo espera?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs) A chave neste dicionário deve ser alterada para o nome do novo tensor de entrada.

1.  **O nome do dispositivo de destino para o qual compilar ou os detalhes gerais da plataforma de hardware** 

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

   Por exemplo, se quiser implantar em um Raspberry Pi 3, use: 

   ```
   target_device = 'rasp3b'
   ```

   Você pode encontrar a lista completa de dispositivos de borda compatíveis em [Estruturas, dispositivos, sistemas e arquiteturas compatíveis](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html).

 Agora que concluiu as etapas anteriores, você pode enviar um trabalho de compilação para o 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!')
```

Se quiser informações adicionais para depuração, inclua a seguinte instrução de impressão:

```
print(response)
```

Se o trabalho de compilação for bem-sucedido, seu modelo compilado será armazenado no bucket de saída do Amazon S3 que você especificou anteriormente (`s3_output_location`). Baixe seu 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)
```

# Configurar o dispositivo
<a name="neo-getting-started-edge-step2"></a>

Você precisará instalar pacotes em seu dispositivo de borda para que ele possa fazer inferências. Você também precisará instalar o [AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html) core ou o [Aprendizado Profundo Runtime (DLR)](https://github.com/neo-ai/neo-ai-dlr). Neste exemplo, você instalará os pacotes necessários para fazer inferências para o algoritmo de detecção de Objetos `coco_ssd_mobilenet` e usará o DLR.

1. **Instale pacotes adicionais**

   Além do Boto3, você deve instalar determinadas bibliotecas em seu dispositivo de borda. As bibliotecas instaladas dependem do seu caso de uso. 

   Por exemplo, para o algoritmo de detecção de `coco_ssd_mobilenet` objetos que você baixou anteriormente, você precisa instalar [NumPy](https://numpy.org/)para manipulação de dados e estatísticas, o [PIL](https://pillow.readthedocs.io/en/stable/) para carregar imagens e o [Matplotlib](https://matplotlib.org/) para gerar gráficos. Você também precisa de uma cópia do TensorFlow se quiser avaliar o impacto da compilação com o Neo versus uma linha de base. 

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

1. **Instale o mecanismo de inferência em seu dispositivo**

   Para executar seu modelo compilado pelo NEO, instale o [Aprendizado Profundo Runtime (DLR)](https://github.com/neo-ai/neo-ai-dlr) em seu dispositivo. O DLR é um runtime compacto e comum para modelos de aprendizado profundo e modelos de árvore de decisão. Em destinos de CPU x86\$164 executando Linux, você pode instalar a versão mais recente do pacote DLR usando o seguinte comando `pip`:

   ```
   !pip install dlr
   ```

   Para instalação do DLR em destinos de GPU ou dispositivos de borda que não sejam x86, consulte [Versões](https://github.com/neo-ai/neo-ai-dlr/releases) para binários pré-criados ou [Instalação do DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html) para criar DLR a partir da fonte. Por exemplo, para instalar o DLR para o Raspberry Pi 3, você pode 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
   ```

# Faça inferências no dispositivo
<a name="neo-getting-started-edge-step3"></a>

Neste exemplo, você usará o Boto3 para baixar a saída do seu trabalho de compilação em seu dispositivo de borda. Em seguida, você importará o DLR, baixará imagens de exemplo do conjunto de dados, redimensionará essa imagem para corresponder à entrada original do modelo e, em seguida, fará uma predição.

1. **Baixe seu modelo compilado do Amazon S3 para o seu dispositivo e extraia-o do arquivo 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 DLR e um objeto inicializado`DLRModel`.**

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

1. **Baixe uma imagem para inferência e formate-a com base em como seu modelo foi treinado**.

   `coco_ssd_mobilenet`Por exemplo, você pode baixar uma imagem do [conjunto de dados COCO](https://cocodataset.org/#home) e depois reformar a imagem para `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 o DLR para fazer inferências**.

   Por fim, você pode usar o DLR para fazer uma predição na imagem que acabou de baixar: 

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

[Para obter mais exemplos de uso do DLR para fazer inferências a partir de um modelo neocompilado em um dispositivo de ponta, consulte o repositório Github. neo-ai-dlr ](https://github.com/neo-ai/neo-ai-dlr) 