

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á.

# Executar a inferência de machine learning
<a name="perform-machine-learning-inference"></a>

Com AWS IoT Greengrass, você pode realizar inferência de aprendizado de máquina (ML) em seus dispositivos de ponta em dados gerados localmente usando modelos treinados na nuvem. Você se beneficia da baixa latência e da redução de custos na execução da inferência local, e ainda aproveita a capacidade de computação em nuvem para modelos de treinamento e processamento complexo.

AWS IoT Greengrass torna as etapas necessárias para realizar a inferência mais eficientes. É possível treinar seus modelos de inferência em qualquer lugar e implantá-los localmente como *componentes de machine learning*. Por exemplo, você pode criar e treinar modelos de aprendizado profundo na [Amazon SageMaker ](https://console.aws.amazon.com/sagemaker) AI. Em seguida, você pode armazenar esses modelos em um bucket do [Amazon S3](https://console.aws.amazon.com/s3), para poder usá-los como artefatos em seus componentes para realizar inferências em seus dispositivos principais.

**Topics**
+ [Como a inferência de AWS IoT Greengrass ML funciona](#how-ml-inference-works)
+ [O que há de diferente na AWS IoT Greengrass versão 2?](#ml-differences)
+ [Requisitos](#ml-requirements)
+ [Fontes de modelo compatíveis](#ml-model-sources)
+ [Runtimes de machine learning compatíveis](#ml-runtime-libraries)
+ [Componentes de machine learning fornecidos pela AWS](#ml-components)
+ [Use o Amazon SageMaker AI Edge Manager nos dispositivos principais do Greengrass](use-sagemaker-edge-manager.md)
+ [Personalizar seus componentes de machine learning](ml-customization.md)
+ [Solução de problemas de inferência de Machine learning do](ml-troubleshooting.md)

## Como a inferência de AWS IoT Greengrass ML funciona
<a name="how-ml-inference-works"></a>

AWS fornece [componentes de aprendizado de máquina](#ml-components) que você pode usar para criar implantações em uma etapa para realizar inferências de aprendizado de máquina em seu dispositivo. Você também pode usar esses componentes como modelos para criar componentes personalizados para atender às suas necessidades específicas.<a name="ml-component-types"></a>

AWS fornece as seguintes categorias de componentes de aprendizado de máquina:
+ **Componente de modelo**: contém modelos de machine learning como artefatos do Greengrass.
+ **Componente de runtime**: contém o script que instala a estrutura de machine learning e suas dependências no dispositivo principal do Greengrass.
+ **Componente de inferência**: contém o código de inferência e inclui dependências de componentes para instalar a estrutura de machine learning e baixar modelos de machine learning pré-treinados.

Cada implantação que você cria para realizar inferência de machine learning consiste em pelo menos um componente que executa sua aplicação de inferência, instala a estrutura de machine learning e baixa seus modelos de machine learning. Para realizar inferência de amostra com os componentes AWS fornecidos, você implanta um componente de inferência em seu dispositivo principal, que inclui automaticamente o modelo correspondente e os componentes de tempo de execução como dependências. Para personalizar suas implantações, você pode conectar ou trocar os componentes do modelo de amostra por componentes do modelo personalizado ou pode usar as receitas de componentes dos componentes AWS fornecidos como modelos para criar seus próprios componentes personalizados de inferência, modelo e tempo de execução. 

Para realizar inferências de machine learning usando componentes personalizados:

1. Criar um componente modelo. Esse componente contém os modelos de aprendizado de máquina que você deseja usar para realizar inferências. AWS fornece exemplos de modelos DLR e TensorFlow Lite pré-treinados. Para usar um modelo personalizado, crie seu próprio componente de modelo.

1. Crie um componente de runtime. Esse componente contém os scripts necessários para instalar o tempo de execução do aprendizado de máquina para seus modelos. AWS fornece exemplos de componentes de tempo de execução para [Deep Learning Runtime](https://github.com/neo-ai/neo-ai-dlr) (DLR) e [TensorFlow Lite](https://www.tensorflow.org/lite/guide/python). Para usar outros tempos de execução com seus modelos personalizados e código de inferência, crie seus próprios componentes de runtime.

1. Crie um componente de inferência. Esse componente contém seu código de inferência e inclui seus componentes de modelo e tempo de execução como dependências. AWS fornece componentes de inferência de amostra para classificação de imagens e detecção de objetos usando DLR e TensorFlow Lite. Para realizar outros tipos de inferência ou usar modelos e tempos de execução personalizados, crie seu próprio componente de inferência.

1. Implante o componente de inferência. Quando você implanta esse componente, AWS IoT Greengrass também implanta automaticamente as dependências do modelo e do componente de tempo de execução.

Para começar a usar os componentes AWS fornecidos, consulte[Tutorial: Execute inferência de classificação de imagens de amostra usando o Lite TensorFlow](ml-tutorial-image-classification.md).

Para obter informações sobre a criação de componentes personalizados de machine learning, consulte [Personalizar seus componentes de machine learning](ml-customization.md).

## O que há de diferente na AWS IoT Greengrass versão 2?
<a name="ml-differences"></a>

AWS IoT Greengrass consolida unidades funcionais para aprendizado de máquina, como modelos, tempos de execução e código de inferência, em componentes que permitem que você use um processo de uma etapa para instalar o tempo de execução do aprendizado de máquina, baixar seus modelos treinados e realizar inferências em seu dispositivo. 

Ao usar os componentes AWS de aprendizado de máquina fornecidos, você tem a flexibilidade de começar a realizar inferências de aprendizado de máquina com exemplos de código de inferência e modelos pré-treinados. Você pode conectar componentes de modelo personalizados para usar seus próprios modelos personalizados com os componentes de inferência e tempo de execução fornecidos. AWS Para uma solução de machine learning totalmente personalizada, você pode usar os componentes públicos como modelos para criar componentes personalizados e usar qualquer runtime, modelo ou tipo de inferência que desejar.

## Requisitos
<a name="ml-requirements"></a>

Para criar e usar componentes de machine learning, é necessário ter o seguinte:
+ Um dispositivo principal do Greengrass. Se você não tiver uma, consulte [Tutorial: Conceitos básicos do AWS IoT Greengrass V2](getting-started.md).
+ Espaço mínimo de armazenamento local de 500 MB para usar AWS— exemplos de componentes de aprendizado de máquina fornecidos.

## Fontes de modelo compatíveis
<a name="ml-model-sources"></a>

AWS IoT Greengrass suporta o uso de modelos de aprendizado de máquina personalizados que são armazenados no Amazon S3. Você também pode usar trabalhos de empacotamento de borda do Amazon SageMaker AI para criar diretamente componentes de modelo para seus modelos compilados com SageMaker IA Neo. Para obter informações sobre como usar o SageMaker AI Edge Manager com AWS IoT Greengrass, consulte[Use o Amazon SageMaker AI Edge Manager nos dispositivos principais do Greengrass](use-sagemaker-edge-manager.md).

Os buckets do S3 que contêm seus modelos devem atender aos seguintes requisitos:
+ Eles não devem ser criptografados usando SSE-C. Para os buckets que usam criptografia no lado do servidor, a inferência de machine learning do AWS IoT Greengrass atualmente é compatível apenas com as opções de criptografia SSE-S3 ou SSE-KMS. Para obter mais informações sobre as opções criptografia no lado do servidor, consulte [Protegendo dados usando criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html) no *Guia do usuário do Amazon Simple Storage Service*.
+ Seus nomes não devem incluir pontos (`.`). Para obter mais informações, consulte a regra sobre como usar buckets hospedados virtualmente com SSL em [Regras para nomenclatura de buckets](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules) no *Guia do usuário do Amazon Simple Storage Service*.
+ <a name="sr-artifacts-req"></a>Os buckets do S3 que armazenam suas fontes de modelo devem estar nos mesmos componentes de aprendizado de máquina Conta da AWS e que estejam nos mesmos Região da AWS componentes do aprendizado de máquina.
+ AWS IoT Greengrass deve ter `read` permissão para acessar a fonte do modelo. Para permitir o acesso AWS IoT Greengrass aos buckets do S3, a [função do dispositivo Greengrass](device-service-role.md) deve permitir a ação. `s3:GetObject` Para mais informações sobre a função da aplicação, consulte [Autorize os dispositivos principais a interagir com os serviços AWS](device-service-role.md).

## Runtimes de machine learning compatíveis
<a name="ml-runtime-libraries"></a>

AWS IoT Greengrass permite que você crie componentes personalizados para usar qualquer tempo de execução de aprendizado de máquina de sua escolha para realizar inferências de aprendizado de máquina com seus modelos treinados de forma personalizada. Para obter informações sobre a criação de componentes personalizados de machine learning, consulte [Personalizar seus componentes de machine learning](ml-customization.md).

Para tornar o processo de introdução ao aprendizado de máquina mais eficiente, AWS IoT Greengrass fornece exemplos de componentes de inferência, modelo e tempo de execução que usam os seguintes tempos de execução de aprendizado de máquina: 
+  [Runtime de aprendizado profundo](https://github.com/neo-ai/neo-ai-dlr) (DLR) v1.6.0 e v1.3.0
+  [TensorFlow Lite](https://www.tensorflow.org/lite/guide/python) v2.5.0 

## Componentes de machine learning fornecidos pela AWS
<a name="ml-components"></a>

A tabela a seguir lista os componentes AWS fornecidos usados para aprendizado de máquina. 

**nota**  <a name="component-nucleus-dependency-update-note"></a>
Vários componentes AWS fornecidos dependem de versões secundárias específicas do núcleo do Greengrass. Por causa dessa dependência, você precisa atualizar esses componentes ao atualizar o Greengrass nucleus para uma nova versão secundária. Para obter informações sobre as versões específicas do núcleo das quais cada componente depende, consulte o tópico do componente correspondente. Para obter mais informações sobre como atualizar o núcleo, consulte [Atualizar o software de núcleo do AWS IoT Greengrass (OTA)](update-greengrass-core-v2.md).


| Componente | Description | [Tipo de componente](develop-greengrass-components.md#component-types) | SO com suporte | [Código aberto](open-source.md) | 
| --- | --- | --- | --- | --- | 
| [SageMaker Gerenciador AI Edge](sagemaker-edge-manager-component.md) | Implanta o agente Amazon SageMaker AI Edge Manager no dispositivo principal do Greengrass. | Genérico | Linux, Windows | Não | 
| [Classificação de imagens do DLR](dlr-image-classification-component.md) | Componente de inferência que usa o repositório de modelos de classificação de imagem DLR e o componente de runtime do DLR como dependências para instalar o DLR, baixar exemplos de modelos de classificação de imagens e realizar inferência de classificação de imagens em dispositivos compatíveis. | Genérico | Linux, Windows | Não | 
| [Detecção de objetos do DLR](dlr-object-detection-component.md) | Componente de inferência que usa o repositório de modelos de detecção de objetos DLR e o componente de runtime do DLR como dependências para instalar o DLR, baixar modelos de detecção de objetos de amostra e realizar inferência de detecção de objetos em dispositivos compatíveis. | Genérico | Linux, Windows | Não | 
| [Armazenamento de modelos de classificação de imagens do DLR](dlr-image-classification-model-store-component.md) | Componente de modelo que contém amostras de ResNet -50 modelos de classificação de imagens como artefatos do Greengrass. | Genérico | Linux, Windows | Não | 
| [Armazenamento de modelos de detecção de objetos do DLR](dlr-object-detection-model-store-component.md) | Componente de modelo que contém exemplos de modelos de detecção de YOLOv3 objetos como artefatos do Greengrass. | Genérico | Linux, Windows | Não | 
| [Runtime do DLR](dlr-component.md) | Componente de runtime que contém um script de instalação usado para instalar o DLR e suas dependências no dispositivo principal do Greengrass. | Genérico | Linux, Windows | Não | 
| [TensorFlow Classificação de imagens Lite](tensorflow-lite-image-classification-component.md) | Componente de inferência que usa o TensorFlow repositório de modelos de classificação de imagem TensorFlow Lite e o componente de tempo de execução Lite como dependências para instalar o TensorFlow Lite, baixar exemplos de modelos de classificação de imagens e realizar inferência de classificação de imagens em dispositivos compatíveis. | Genérico | Linux, Windows | Não | 
| [TensorFlow Detecção leve de objetos](tensorflow-lite-object-detection-component.md) | Componente de inferência que usa o TensorFlow repositório de modelos de detecção de objetos TensorFlow Lite e o componente de tempo de execução Lite como dependências para instalar o TensorFlow Lite, baixar modelos de detecção de objetos de amostra e realizar inferência de detecção de objetos em dispositivos compatíveis. | Genérico | Linux, Windows | Não | 
| [TensorFlow Loja de modelos de classificação de imagens Lite](tensorflow-lite-image-classification-model-store-component.md) | Componente de modelo que contém um modelo MobileNet v1 de amostra como artefato do Greengrass. | Genérico | Linux, Windows | Não | 
| [TensorFlow Loja de modelos de detecção de objetos Lite](tensorflow-lite-object-detection-model-store-component.md) | Componente de modelo que contém um MobileNet modelo de amostra de detecção de disparo único (SSD) como um artefato do Greengrass. | Genérico | Linux, Windows | Não | 
| [TensorFlow Tempo de execução leve](tensorflow-lite-component.md) | Componente de tempo de execução que contém um script de instalação usado para instalar o TensorFlow Lite e suas dependências no dispositivo principal do Greengrass. | Genérico | Linux, Windows | Não | 

# Use o Amazon SageMaker AI Edge Manager nos dispositivos principais do Greengrass
<a name="use-sagemaker-edge-manager"></a>

**Importante**  
SageMaker O AI Edge Manager foi descontinuado em 26 de abril de 2024. Para obter mais informações sobre como continuar implantando seus modelos em dispositivos de ponta, consulte [Fim da vida útil do SageMaker AI Edge Manager](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-eol.html).

O Amazon SageMaker AI Edge Manager é um agente de software executado em dispositivos periféricos. SageMaker O AI Edge Manager fornece gerenciamento de modelos para dispositivos de borda para que você possa empacotar e usar modelos compilados pelo Amazon SageMaker AI Neo diretamente nos dispositivos principais do Greengrass. Ao usar o SageMaker AI Edge Manager, você também pode amostrar dados de entrada e saída do modelo de seus dispositivos principais e enviar esses dados Nuvem AWS para monitoramento e análise. Como o SageMaker AI Edge Manager usa o SageMaker AI Neo para otimizar seus modelos para o hardware de destino, você não precisa instalar o tempo de execução do DLR diretamente no seu dispositivo. Nos dispositivos Greengrass, o SageMaker AI Edge Manager não carrega AWS IoT certificados locais nem liga diretamente para o endpoint do provedor de AWS IoT credenciais. Em vez disso, o SageMaker AI Edge Manager usa o [serviço de troca de tokens](token-exchange-service-component.md) para buscar credenciais temporárias de um endpoint TES. 

Esta seção descreve como o SageMaker AI Edge Manager funciona nos dispositivos principais do Greengrass.



## Como o SageMaker AI Edge Manager funciona em dispositivos Greengrass
<a name="how-to-use-sdge-manager-with-greengrass"></a>

Para implantar o agente do SageMaker AI Edge Manager em seus dispositivos principais, crie uma implantação que inclua o `aws.greengrass.SageMakerEdgeManager` componente. AWS IoT Greengrass gerencia a instalação e o ciclo de vida do agente Edge Manager em seus dispositivos. Quando uma nova versão do binário do agente estiver disponível, implante a versão atualizada do componente `aws.greengrass.SageMakerEdgeManager` para atualizar a versão do agente que está instalada no dispositivo. 

Quando você usa o SageMaker AI Edge Manager com AWS IoT Greengrass, seu fluxo de trabalho inclui as seguintes etapas de alto nível:

1. Compile modelos com o SageMaker AI Neo.

1. Empacote seus modelos SageMaker AI Neo-compilados usando trabalhos de empacotamento SageMaker AI edge. Ao executar uma tarefa de empacotamento de borda em seu modelo, você pode criar um componente de modelo com o modelo empacotado como um artefato que pode ser implantado no dispositivo principal do Greengrass. 

1. Crie um componente de inferência personalizado. Use esse componente para interagir com o agente do Edge Manager e realizar a inferência no dispositivo principal. Essas operações envolvem carregar os modelos, invocar as solicitações de previsão para realizar a inferência e descarregar os modelos quando o componente é encerrado. 

1. Implante o componente SageMaker AI Edge Manager, o componente de modelo empacotado e o componente de inferência para executar seu modelo no mecanismo de inferência de SageMaker IA (agente do Edge Manager) em seu dispositivo.

Para obter mais informações sobre a criação de trabalhos de empacotamento de borda e componentes de inferência que funcionam com o SageMaker AI Edge Manager, consulte [Deploy Model Package and Edge Manager Agent AWS IoT Greengrass](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-greengrass.html) no *Amazon SageMaker AI Developer Guide*.

O [Tutorial: Comece a usar o SageMaker AI Edge Manager](get-started-with-edge-manager-on-greengrass.md) tutorial mostra como configurar e usar o agente do SageMaker AI Edge Manager em um dispositivo principal existente do Greengrass, usando um código AWS de exemplo fornecido que você pode usar para criar exemplos de inferência e componentes de modelo. 

Ao usar o SageMaker AI Edge Manager nos dispositivos principais do Greengrass, você também pode usar o recurso de captura de dados para carregar dados de amostra para o. Nuvem AWS A captura de dados é um recurso de SageMaker IA que você usa para fazer upload de entradas de inferência, resultados de inferência e dados de inferência adicionais em um bucket do S3 ou em um diretório local para análise futura. Para obter mais informações sobre o uso de dados de captura com o SageMaker AI Edge Manager, consulte [Gerenciar modelo](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-manage-model.html#edge-manage-model-capturedata) no *Amazon SageMaker AI Developer Guide*.

## Requisitos
<a name="greengrass-edge-manager-agent-requirements"></a>

Você deve atender aos seguintes requisitos para usar o agente do SageMaker AI Edge Manager nos dispositivos principais do Greengrass.<a name="sm-edge-manager-component-reqs"></a>
+ <a name="sm-req-core-device"></a>Um dispositivo principal do Greengrass executado no Amazon Linux 2, uma plataforma Linux baseada em Debian (x86\$164 ou Armv8) ou Windows (x86\$164). Se você não tiver uma, consulte [Tutorial: Conceitos básicos do AWS IoT Greengrass V2](getting-started.md).
+ <a name="sm-req-python"></a>[Python](https://www.python.org/downloads/) 3.6 ou posterior, incluindo o `pip` para sua versão do Python, instalada em seu dispositivo principal.
+ O [perfil do dispositivo do Greengrass](device-service-role.md) foi configurado com o seguinte: 
  + <a name="sm-req-iam-trust-relationship"></a>Uma relação de confiança que permite que `credentials.iot.amazonaws.com` e `sagemaker.amazonaws.com` assumam o perfil, conforme mostrado no exemplo de política do IAM a seguir.

    ```
    { 
      "Version": "2012-10-17",		 	 	 
      "Statement": [ 
        { 
          "Effect": "Allow", 
          "Principal": {
            "Service": "credentials.iot.amazonaws.com"
           }, 
          "Action": "sts:AssumeRole" 
        },
        { 
          "Effect": "Allow", 
          "Principal": {
            "Service": "sagemaker.amazonaws.com"
          }, 
          "Action": "sts:AssumeRole" 
        } 
      ] 
    }
    ```
  + <a name="sm-req-iam-sagemanakeredgedevicefleetpolicy"></a>A política gerenciada [AmazonSageMakerEdgeDeviceFleetPolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AmazonSageMakerEdgeDeviceFleetPolicy)do IAM.
  + <a name="sm-req-iam-s3-putobject"></a>A ação `s3:PutObject`, conforme mostrado no exemplo de política do IAM a seguir.

    ```
    {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
        {
          "Action": [
            "s3:PutObject"
          ],
          "Resource": [
            "*"
          ],
          "Effect": "Allow"
        }
      ]
    }
    ```
+ <a name="sm-req-s3-bucket"></a>Um bucket do Amazon S3 criado no mesmo dispositivo central do Greengrass Conta da AWS e no Região da AWS mesmo dispositivo. SageMaker O AI Edge Manager requer um bucket S3 para criar uma frota de dispositivos de ponta e armazenar dados de amostra da execução de inferência em seu dispositivo. Para obter informações sobre como criar buckets do S3, consulte [Conceitos básicos do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html).
+ <a name="sm-req-edge-device-fleet"></a>Uma frota de dispositivos de ponta de SageMaker IA que usa o mesmo alias de AWS IoT função do seu dispositivo principal do Greengrass. Para obter mais informações, consulte [Criar uma frota de dispositivos de borda](get-started-with-edge-manager-on-greengrass.md#create-edge-device-fleet-for-greengrass).
+ <a name="sm-req-edge-device"></a>Seu dispositivo principal do Greengrass foi registrado como um dispositivo de ponta em sua frota de dispositivos SageMaker AI Edge. O nome do dispositivo de borda deve corresponder ao AWS IoT nome do dispositivo principal. Para obter mais informações, consulte [Registrar seu dispositivo principal do Greengrass](get-started-with-edge-manager-on-greengrass.md#register-greengrass-core-device-in-sme).

## Comece a usar o SageMaker AI Edge Manager
<a name="use-sm-edge-manager"></a>

Você pode concluir um tutorial para começar a usar o SageMaker AI Edge Manager. O tutorial mostra como começar a usar o SageMaker AI Edge Manager com componentes AWS de amostra fornecidos em um dispositivo principal existente. Esses componentes de amostra usam o componente SageMaker AI Edge Manager como uma dependência para implantar o agente do Edge Manager e realizar inferências usando modelos pré-treinados que foram compilados usando o AI Neo SageMaker . Para obter mais informações, consulte [Tutorial: Comece a usar o SageMaker AI Edge Manager](get-started-with-edge-manager-on-greengrass.md).

# Personalizar seus componentes de machine learning
<a name="ml-customization"></a>

Em AWS IoT Greengrass, você pode configurar exemplos de [componentes de aprendizado de máquina](perform-machine-learning-inference.md#ml-components) para personalizar a forma como você executa a inferência de aprendizado de máquina em seus dispositivos com os componentes de inferência, modelo e tempo de execução como blocos de construção. AWS IoT Greengrass também oferece a flexibilidade de usar os componentes de amostra como modelos e criar seus próprios componentes personalizados conforme necessário. Você pode misturar e combinar essa abordagem modular para personalizar seus componentes de inferência de machine learning das seguintes maneiras:

**Usando componentes de inferência de amostra**  
+ Modifique a configuração dos componentes de inferência ao implantá-los.
+ Use um modelo personalizado com o componente de inferência de amostra substituindo o componente de armazenamento de modelos de amostra por um componente de modelo personalizado. Seu modelo personalizado deve ser treinado usando o mesmo runtime do modelo de amostra.

**Usando componentes de inferência personalizados**  
+ Use o código de inferência personalizado com os modelos de amostra e os tempos de execução adicionando componentes de modelo público e componentes de runtime como dependências de componentes de inferência personalizados.
+ Crie e adicione componentes de modelo personalizados ou componentes de runtime como dependências de componentes de inferência personalizados. Você deve usar componentes personalizados se quiser usar um código de inferência personalizado ou um tempo de execução para o qual AWS IoT Greengrass não forneça um componente de amostra. 

**Topics**
+ [Modificar a configuração de um componente de inferência pública](#modify-ml-component-config)
+ [Usar um modelo personalizado com o componente de inferência de amostra](#override-public-model-store)
+ [Criar componentes personalizados de machine learning](#create-private-ml-components)
+ [Criar um componente de inferência personalizado](#create-inference-component)

## Modificar a configuração de um componente de inferência pública
<a name="modify-ml-component-config"></a>

No [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass), a página do componente exibe a configuração padrão desse componente. Por exemplo, a configuração padrão do componente de classificação de imagem TensorFlow Lite tem a seguinte aparência:

```
{
  "accessControl": {
    "aws.greengrass.ipc.mqttproxy": {
      "aws.greengrass.TensorFlowLiteImageClassification:mqttproxy:1": {
        "policyDescription": "Allows access to publish via topic ml/tflite/image-classification.",
        "operations": [
          "aws.greengrass#PublishToIoTCore"
        ],
        "resources": [
          "ml/tflite/image-classification"
        ]
      }
    }
  },
  "PublishResultsOnTopic": "ml/tflite/image-classification",
  "ImageName": "cat.jpeg",
  "InferenceInterval": 3600,
  "ModelResourceKey": {
    "model": "TensorFlowLite-Mobilenet"
  }
}
```

Ao implantar um componente de inferência pública, você pode modificar a configuração padrão para personalizar sua implantação. Para obter informações sobre os parâmetros de configuração disponíveis para cada componente de inferência pública, consulte o tópico do componente em [Componentes de machine learning fornecidos pela AWS](perform-machine-learning-inference.md#ml-components).

Esta seção descreve como implantar um componente modificado a partir do AWS IoT Greengrass console. Para obter informações sobre a implantação de componentes usando o AWS CLI, consulte[Criar implantações](create-deployments.md).<a name="modify-ml-component-config-console"></a>

**Para implantar um componente de inferência pública modificado (console)**

1. Faça login no [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. No menu de navegação, escolha **Componentes**.

1. Na página **Componentes**, na guia **Componentes públicos**, escolha o componente que deseja implantar.

1. Na página do componente, escolha **Implantar**.

1. <a name="add-deployment"></a>Em **Adicionar à implantação**, escolha uma das seguintes opções:

   1. Para mesclar esse componente a uma implantação existente em seu dispositivo de destino, escolha **Adicionar à implantação existente** e selecione a implantação que você deseja revisar.

   1. Para criar uma nova implantação em seu dispositivo de destino, escolha **Criar nova implantação**. Se você tiver uma implantação existente em seu dispositivo, escolher essa etapa substituirá a implantação existente. 

1. <a name="specify-deployment-target"></a>Na página **Especificar destino**, faça o seguinte: 

   1. Em **Informações de implantação**, insira ou modifique o nome amigável para sua implantação.

   1. Em **Destinos de implantação**, selecione um alvo para sua implantação e escolha **Avançar**. Você não pode alterar o destino de implantação se estiver revisando uma implantação existente.

1. Na página **Selecionar componentes**, em **Componentes públicos**, verifique se o componente de inferência com sua configuração modificada está selecionado e escolha **Avançar**.

1. Na página **Configurar componentes**, faça o seguinte: 

   1. Selecione o componente de inferência e escolha **Configurar componente**.

   1. Em **Adicionar atualização**, insira os valores de configuração que você deseja atualizar. Por exemplo, insira a seguinte atualização de configuração na caixa **Configuração a ser mesclada** para alterar o intervalo de inferência para 15 segundos e instrua o componente a procurar a imagem chamada `custom.jpg` na pasta `/custom-ml-inference/images/`. 

      ```
      {
        "InferenceInterval": "15",
        "ImageName": "custom.jpg",
        "ImageDirectory": "/custom-ml-inference/images/"
      }
      ```

      Para redefinir toda a configuração de um componente aos valores padrão, especifique uma única string vazia `""` na caixa **Redefinir caminhos**. 

   1. Escolha **Confirmar** e, em seguida, **Avançar**.

1. Na página **Definir configurações avançadas**, mantenha as configurações padrão e escolha **Avançar**.

1. Na página **Revisar**, escolha **Implantar**.

## Usar um modelo personalizado com o componente de inferência de amostra
<a name="override-public-model-store"></a>

Se você quiser usar o componente de inferência de amostra com seus próprios modelos de aprendizado de máquina para um tempo de execução que AWS IoT Greengrass forneça um componente de tempo de execução de amostra, substitua os componentes do modelo público por componentes que usam esses modelos como artefatos. Em um alto nível, você conclui as etapas a seguir para usar um modelo personalizado com o componente de inferência de amostra:

1. Crie um componente de modelo que use um modelo personalizado em um bucket do S3 como artefato. Seu modelo personalizado deve ser treinado usando o mesmo runtime do modelo que você deseja substituir.

1. Modifique o parâmetro de configuração `ModelResourceKey` no componente de inferência para usar o modelo personalizado. Para obter informações sobre como atualizar a configuração do componente de inferência, consulte [Modificar a configuração de um componente de inferência pública](#modify-ml-component-config)

Quando você implanta o componente de inferência, AWS IoT Greengrass procura a versão mais recente de suas dependências de componentes. Ele substitui o componente do modelo público dependente se uma versão personalizada posterior do componente existir no mesmo e. Conta da AWS Região da AWS

### Criar um componente de modelo personalizado (console)
<a name="create-model-store-component-console"></a>

1. Faça upload do seu modelo em um bucket do S3. Para obter informações sobre como carregar seus modelos para um bucket do S3, consulte [Trabalhar com buckets do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html) no *Guia do usuário do Amazon Simple Storage Service*.
**nota**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>Você deve armazenar seus artefatos em buckets do S3 que estejam nos Região da AWS mesmos Conta da AWS componentes. Para permitir o AWS IoT Greengrass acesso a esses artefatos, a função do [dispositivo Greengrass](device-service-role.md) deve permitir `s3:GetObject` a ação. Para mais informações sobre a função da aplicação, consulte [Autorize os dispositivos principais a interagir com os serviços AWS](device-service-role.md).

1. No menu de navegação do [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass), selecione **Componentes**.

1. Recupere a fórmula do componente público do repositório de modelos.

   1. Na página **Componentes**, na guia **Componentes públicos**, procure e escolha o componente do modelo público para o qual você deseja criar uma nova versão. Por exemplo, .`variant.DLR.ImageClassification.ModelStore`

   1. Na página do componente, escolha **Exibir fórmula** e copie a receita JSON exibida.

1. Na página **Componentes**, na guia **Meus componentes**, escolha **Criar componente**.

1. Na página **Criar componente**, em **Informações do componente**, selecione **Inserir receita como JSON** como fonte do componente.

1. Na caixa **Receita**, cole a fórmula do componente que você copiou anteriormente.

1. <a name="override-model-recipe-config"></a>Na fórmula, substitua os seguintes valores:
   + `ComponentVersion`: incremente a versão secundária do componente. 

     Ao criar um componente personalizado para substituir um componente de modelo público, você deve atualizar somente a versão secundária da versão existente do componente. Por exemplo, se a versão do componente público for `2.1.0`, você poderá criar um componente personalizado com a versão `2.1.1`.
   + `Manifests.Artifacts.Uri`: atualize cada valor de URI para o URI do Amazon S3 do modelo que você deseja usar.
**nota**  
Não mude o nome do componente.

1. Escolha **Criar componente**.

### Criar um componente de modelo personalizado (AWS CLI)
<a name="create-model-store-component-cli"></a>

1. Faça upload do seu modelo em um bucket do S3. Para obter informações sobre como carregar seus modelos para um bucket do S3, consulte [Trabalhar com buckets do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html) no *Guia do usuário do Amazon Simple Storage Service*.
**nota**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>Você deve armazenar seus artefatos em buckets do S3 que estejam nos Região da AWS mesmos Conta da AWS componentes. Para permitir o AWS IoT Greengrass acesso a esses artefatos, a função do [dispositivo Greengrass](device-service-role.md) deve permitir `s3:GetObject` a ação. Para mais informações sobre a função da aplicação, consulte [Autorize os dispositivos principais a interagir com os serviços AWS](device-service-role.md).

1. Execute o comando a seguir para recuperar a fórmula do componente da variante pública. Esse comando grava a fórmula do componente no arquivo de saída que você fornece em seu comando. Converta a string recuperada codificada em base64 em JSON ou YAML, conforme necessário.

------
#### [ Linux, macOS, or Unix ]

   ```
   aws greengrassv2 get-component \
       --arn <arn> \
       --recipe-output-format <recipe-format> \
       --query recipe \
       --output text | base64 --decode > <recipe-file>
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws greengrassv2 get-component ^
       --arn <arn> ^
       --recipe-output-format <recipe-format> ^
       --query recipe ^
       --output text > <recipe-file>.base64
   
   certutil -decode <recipe-file>.base64 <recipe-file>
   ```

------
#### [ PowerShell ]

   ```
   aws greengrassv2 get-component `
       --arn <arn> `
       --recipe-output-format <recipe-format> `
       --query recipe `
       --output text > <recipe-file>.base64
   
   certutil -decode <recipe-file>.base64 <recipe-file>
   ```

------

1. Atualize o nome do arquivo de receita para `<component-name>-<component-version>`, onde a versão do componente é a versão de destino do novo componente. Por exemplo, .`variant.DLR.ImageClassification.ModelStore-2.1.1.yaml` 

1. <a name="override-model-recipe-config"></a>Na fórmula, substitua os seguintes valores:
   + `ComponentVersion`: incremente a versão secundária do componente. 

     Ao criar um componente personalizado para substituir um componente de modelo público, você deve atualizar somente a versão secundária da versão existente do componente. Por exemplo, se a versão do componente público for `2.1.0`, você poderá criar um componente personalizado com a versão `2.1.1`.
   + `Manifests.Artifacts.Uri`: atualize cada valor de URI para o URI do Amazon S3 do modelo que você deseja usar.
**nota**  
Não mude o nome do componente.

1. Execute o comando a seguir para criar um componente usando a fórmula que você recuperou e modificou.

   ```
   aws greengrassv2 create-component-version \
       --inline-recipe fileb://path/to/component/recipe
   ```
**nota**  
Essa etapa cria o componente no AWS IoT Greengrass serviço no Nuvem AWS. É possível usar a CLI do Greengrass para desenvolver, testar e implantar o componente localmente antes de fazer upload para a nuvem. Para obter mais informações, consulte [Desenvolver componentes do AWS IoT Greengrass](develop-greengrass-components.md).

Para obter mais informações sobre a criação de componentes, consulte [Desenvolver componentes do AWS IoT Greengrass](develop-greengrass-components.md).

## Criar componentes personalizados de machine learning
<a name="create-private-ml-components"></a>

Você deve criar componentes personalizados se quiser usar um código de inferência personalizado ou um tempo de execução para o qual AWS IoT Greengrass não forneça um componente de amostra. Você pode usar seu código de inferência personalizado com os exemplos AWS de modelos e tempos de execução de aprendizado de máquina fornecidos, ou pode desenvolver uma solução de inferência de aprendizado de máquina totalmente personalizada com seus próprios modelos e tempo de execução. Se seus modelos usam um tempo de execução para o qual AWS IoT Greengrass fornece um componente de tempo de execução de amostra, você pode usar esse componente de tempo de execução e precisa criar componentes personalizados somente para seu código de inferência e os modelos que deseja usar. 

**Topics**
+ [Recuperar a fórmula de um componente público](#get-ml-component-recipes)
+ [Recuperar amostras de artefatos de componentes](#get-ml-component-artifacts)
+ [Carregar artefatos de componente em um bucket do S3](#upload-ml-component-artifacts)
+ [Criar componentes personalizados](#create-ml-components)

### Recuperar a fórmula de um componente público
<a name="get-ml-component-recipes"></a>

Você pode usar a fórmula de um componente público existente de machine learning como modelo para criar um componente personalizado. Para ver a receita do componente para a versão mais recente de um componente público, use o console ou o AWS CLI seguinte:
+ **Como usar o console**

  1. Na página **Componentes**, na guia **Componentes públicos**, procure pelo componente público e escolha-o.

  1. Na página do componente, escolha **Exibir fórmula**.
+ **Usando AWS CLI**

  Execute o comando a seguir para recuperar a fórmula do componente da variante pública. Esse comando grava a fórmula do componente no arquivo de fórmula JSON ou YAML que você fornece em seu comando. 

------
#### [ Linux, macOS, or Unix ]

  ```
  aws greengrassv2 get-component \
      --arn <arn> \
      --recipe-output-format <recipe-format> \
      --query recipe \
      --output text | base64 --decode > <recipe-file>
  ```

------
#### [ Windows Command Prompt (CMD) ]

  ```
  aws greengrassv2 get-component ^
      --arn <arn> ^
      --recipe-output-format <recipe-format> ^
      --query recipe ^
      --output text > <recipe-file>.base64
  
  certutil -decode <recipe-file>.base64 <recipe-file>
  ```

------
#### [ PowerShell ]

  ```
  aws greengrassv2 get-component `
      --arn <arn> `
      --recipe-output-format <recipe-format> `
      --query recipe `
      --output text > <recipe-file>.base64
  
  certutil -decode <recipe-file>.base64 <recipe-file>
  ```

------

  Substitua os valores dos argumentos no comando da seguinte maneira.
  + `<arn>`. O nome de recurso da Amazon (ARN) do componente público. 
  + `<recipe-format>`. O formato no qual você deseja criar o arquivo de fórmula. Os valores compatíveis são `JSON` e `YAML`.
  + `<recipe-file>`. O nome da fórmula no formato `<component-name>-<component-version>`. 

### Recuperar amostras de artefatos de componentes
<a name="get-ml-component-artifacts"></a>

Você pode usar os artefatos usados pelos componentes públicos de machine learning como modelos para criar seus artefatos de componentes personalizados, como código de inferência ou scripts de instalação em runtime. 

Para visualizar os artefatos de amostra que estão incluídos nos componentes públicos de machine learning, implante o componente de inferência pública e, em seguida, visualize os artefatos em seu dispositivo na pasta `/greengrass/v2/packages/artifacts-unarchived/component-name/component-version/`. 

### Carregar artefatos de componente em um bucket do S3
<a name="upload-ml-component-artifacts"></a>

Antes de criar um componente personalizado, você deve carregar os artefatos do componente em um bucket do S3 e usar o S3 URIs em sua receita de componentes. Por exemplo, para usar um código de inferência personalizado em seu componente de inferência, faça o upload do código em um bucket do S3. Em seguida, você pode usar o URI do Amazon S3 do seu código de inferência como um artefato em seu componente. 

Para obter informações sobre como carregar conteúdo para um bucket do S3, consulte [Trabalhar com buckets do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html) no *Guia do usuário do Amazon Simple Storage Service*.

**nota**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>Você deve armazenar seus artefatos em buckets do S3 que estejam nos Região da AWS mesmos Conta da AWS componentes. Para permitir o AWS IoT Greengrass acesso a esses artefatos, a função do [dispositivo Greengrass](device-service-role.md) deve permitir `s3:GetObject` a ação. Para mais informações sobre a função da aplicação, consulte [Autorize os dispositivos principais a interagir com os serviços AWS](device-service-role.md).

### Criar componentes personalizados
<a name="create-ml-components"></a>

Você pode usar os artefatos e as fórmulas que você recuperou para criar seus componentes personalizados de machine learning. Para ver um exemplo, consulte [Criar um componente de inferência personalizado](#create-inference-component).

Para obter informações detalhadas sobre a criação e implantação de componentes em dispositivos Greengrass, consulte [Desenvolver componentes do AWS IoT Greengrass](develop-greengrass-components.md) e [Implemente AWS IoT Greengrass componentes em dispositivos](manage-deployments.md).

## Criar um componente de inferência personalizado
<a name="create-inference-component"></a>

Esta seção mostra como criar um componente de inferência personalizado usando o componente de classificação de imagem DLR como modelo.

**Topics**
+ [Fazer upload do código de inferência para um bucket do Amazon S3](#create-inference-code)
+ [Crie uma fórmula para o componente de inferência](#create-inference-component-recipe)
+ [Criar o componente de inferência](#create-private-inference-component)

### Fazer upload do código de inferência para um bucket do Amazon S3
<a name="create-inference-code"></a>

Crie o código de inferência e, em seguida, faça upload para um bucket do S3. Para obter informações sobre como carregar conteúdo para um bucket do S3, consulte [Trabalhar com buckets do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html) no *Guia do usuário do Amazon Simple Storage Service*.

**nota**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>Você deve armazenar seus artefatos em buckets do S3 que estejam nos Região da AWS mesmos Conta da AWS componentes. Para permitir o AWS IoT Greengrass acesso a esses artefatos, a função do [dispositivo Greengrass](device-service-role.md) deve permitir `s3:GetObject` a ação. Para mais informações sobre a função da aplicação, consulte [Autorize os dispositivos principais a interagir com os serviços AWS](device-service-role.md).

### Crie uma fórmula para o componente de inferência
<a name="create-inference-component-recipe"></a>

1. Execute o comando a seguir para recuperar a fórmula do componente de classificação de imagem DLR. Esse comando grava a fórmula do componente no arquivo de fórmula JSON ou YAML que você fornece em seu comando. 

------
#### [ Linux, macOS, or Unix ]

   ```
   aws greengrassv2 get-component \
       --arn arn:aws:greengrass:region:aws:components:aws.greengrass.DLRImageClassification:versions:version \
       --recipe-output-format JSON | YAML \
       --query recipe \
       --output text | base64 --decode > <recipe-file>
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws greengrassv2 get-component ^
       --arn arn:aws:greengrass:region:aws:components:aws.greengrass.DLRImageClassification:versions:version ^
       --recipe-output-format JSON | YAML ^
       --query recipe ^
       --output text > <recipe-file>.base64
   
   certutil -decode <recipe-file>.base64 <recipe-file>
   ```

------
#### [ PowerShell ]

   ```
   aws greengrassv2 get-component `
       --arn arn:aws:greengrass:region:aws:components:aws.greengrass.DLRImageClassification:versions:version `
       --recipe-output-format JSON | YAML `
       --query recipe `
       --output text > <recipe-file>.base64
   
   certutil -decode <recipe-file>.base64 <recipe-file>
   ```

------

   *<recipe-file>*Substitua pelo nome da receita no formato`<component-name>-<component-version>`. 

1. No objeto `ComponentDependencies` em sua fórmula, faça um ou mais dos seguintes, dependendo do modelo e dos componentes de runtime que você deseja usar:
   + Mantenha a dependência do componente DLR se quiser usar modelos compilados pelo DLR. Você também pode substituí-lo por uma dependência de um componente de runtime personalizado, conforme mostrado no exemplo a seguir.

     **Componente de runtime**

------
#### [ JSON ]

     ```
     { 
         "<runtime-component>": {
             "VersionRequirement": "<version>",
             "DependencyType": "HARD"
         }
     }
     ```

------
#### [ YAML ]

     ```
     <runtime-component>:
         VersionRequirement: "<version>"
         DependencyType: HARD
     ```

------
   + Mantenha a dependência do armazenamento do modelo de classificação de imagem DLR para usar os modelos ResNet -50 pré-treinados que AWS fornecem, ou modifique-o para usar um componente de modelo personalizado. Quando você inclui uma dependência para um componente de modelo público, se uma versão personalizada posterior do componente existir no mesmo Conta da AWS Região da AWS, o componente de inferência usará esse componente personalizado. Especifique a dependência do componente do modelo, conforme mostrado nos exemplos a seguir.

     **Componente de modelo público**

------
#### [ JSON ]

     ```
     {
         "variant.DLR.ImageClassification.ModelStore": {
             "VersionRequirement": "<version>",
             "DependencyType": "HARD"
         }
     }
     ```

------
#### [ YAML ]

     ```
     variant.DLR.ImageClassification.ModelStore:
         VersionRequirement: "<version>"
         DependencyType: HARD
     ```

------

     **Componente de modelo personalizado**

------
#### [ JSON ]

     ```
     {
         "<custom-model-component>": {
             "VersionRequirement": "<version>",
             "DependencyType": "HARD"
         }
     }
     ```

------
#### [ YAML ]

     ```
     <custom-model-component>:
         VersionRequirement: "<version>"
         DependencyType: HARD
     ```

------

1. No objeto `ComponentConfiguration`, adicione a configuração padrão para esse componente. Posteriormente, você poderá modificar essa configuração ao implantar o componente. O trecho a seguir mostra a configuração do componente de classificação de imagem DLR. 

   Por exemplo, se você usar um componente de modelo personalizado como uma dependência para seu componente de inferência personalizado, modifique `ModelResourceKey` para fornecer os nomes dos modelos que você está usando.

------
#### [ JSON ]

   ```
   {
     "accessControl": {
       "aws.greengrass.ipc.mqttproxy": {
         "aws.greengrass.ImageClassification:mqttproxy:1": {
           "policyDescription": "Allows access to publish via topic ml/dlr/image-classification.",
           "operations": [
             "aws.greengrass#PublishToIoTCore"
           ],
           "resources": [
             "ml/dlr/image-classification"
           ]
         }
       }
     },
     "PublishResultsOnTopic": "ml/dlr/image-classification",
     "ImageName": "cat.jpeg",
     "InferenceInterval": 3600,
     "ModelResourceKey": {
       "armv7l": "DLR-resnet50-armv7l-cpu-ImageClassification",
       "x86_64": "DLR-resnet50-x86_64-cpu-ImageClassification",
       "aarch64": "DLR-resnet50-aarch64-cpu-ImageClassification"
     }
   }
   ```

------
#### [ YAML ]

   ```
   accessControl:
       aws.greengrass.ipc.mqttproxy:
           'aws.greengrass.ImageClassification:mqttproxy:1':
               policyDescription: 'Allows access to publish via topic ml/dlr/image-classification.'
               operations:
                   - 'aws.greengrass#PublishToIoTCore'
               resources:
                   - ml/dlr/image-classification
   PublishResultsOnTopic: ml/dlr/image-classification
   ImageName: cat.jpeg
   InferenceInterval: 3600
   ModelResourceKey:
       armv7l: "DLR-resnet50-armv7l-cpu-ImageClassification"
       x86_64: "DLR-resnet50-x86_64-cpu-ImageClassification"
       aarch64: "DLR-resnet50-aarch64-cpu-ImageClassification"
   ```

------

1. No objeto `Manifests`, forneça informações sobre os artefatos e a configuração desse componente que são usados quando o componente é implantado em plataformas diferentes e qualquer outra informação necessária para executar o componente com êxito. O trecho a seguir mostra a configuração do objeto `Manifests` para a plataforma Linux no componente de classificação de imagem DLR.

------
#### [ JSON ]

   ```
   {
     "Manifests": [
       {
         "Platform": {
           "os": "linux",
           "architecture": "arm"
         },
         "Name": "32-bit armv7l - Linux (raspberry pi)",
         "Artifacts": [
           {
             "URI": "s3://SAMPLE-BUCKET/sample-artifacts-directory/image_classification.zip",
             "Unarchive": "ZIP"
           }
         ],
         "Lifecycle": {
           "Setenv": {
             "DLR_IC_MODEL_DIR": "{variant.DLR.ImageClassification.ModelStore:artifacts:decompressedPath}/{configuration:/ModelResourceKey/armv7l}",
             "DEFAULT_DLR_IC_IMAGE_DIR": "{artifacts:decompressedPath}/image_classification/sample_images/"
           },
           "Run": {
             "RequiresPrivilege": true,
             "script": ". {variant.DLR:configuration:/MLRootPath}/greengrass_ml_dlr_venv/bin/activate\npython3 {artifacts:decompressedPath}/image_classification/inference.py"
           }
         }
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   Manifests:
     - Platform:
         os: linux
         architecture: arm
       Name: 32-bit armv7l - Linux (raspberry pi)
       Artifacts:
         - URI: s3://SAMPLE-BUCKET/sample-artifacts-directory/image_classification.zip
           Unarchive: ZIP
       Lifecycle:
         SetEnv:
           DLR_IC_MODEL_DIR: "{variant.DLR.ImageClassification.ModelStore:artifacts:decompressedPath}/{configuration:/ModelResourceKey/armv7l}"
           DEFAULT_DLR_IC_IMAGE_DIR: "{artifacts:decompressedPath}/image_classification/sample_images/"
         Run:
           RequiresPrivilege: true
           script: |-
             . {variant.DLR:configuration:/MLRootPath}/greengrass_ml_dlr_venv/bin/activate
             python3 {artifacts:decompressedPath}/image_classification/inference.py
   ```

------

 Para informações detalhadas sobre a criação de fórmulas de componentes, consulte [AWS IoT Greengrass referência da receita do componente](component-recipe-reference.md).

### Criar o componente de inferência
<a name="create-private-inference-component"></a>

Use o AWS IoT Greengrass console ou o AWS CLI para criar um componente usando a receita que você acabou de definir. Depois de criar o componente, implante-o para realizar inferência no dispositivo. Para obter um exemplo de como implantar um componente de inferência, consulte [Tutorial: Execute inferência de classificação de imagens de amostra usando o Lite TensorFlow](ml-tutorial-image-classification.md).

#### Criar componente de inferência personalizado (console)
<a name="create-inference-component-console"></a>

1. Faça login no [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. No menu de navegação, escolha **Componentes**.

1. Na página **Componentes**, na guia **Meus componentes**, escolha **Criar componente**.

1. Na página **Criar componente**, em **Informações do componente**, selecione **Inserir fórmula como JSON** ou **Inserir fórmula como YAML** como fonte do componente.

1. Na caixa **Receita**, insira a fórmula personalizada que você criou. 

1. Clique em **Criar componente**.

#### Criar um componente de inferência personalizado (AWS CLI)
<a name="create-inference-component-cli"></a>

Execute o seguinte comando para criar um novo componente personalizado usando a fórmula que você criou.

```
aws greengrassv2 create-component-version \
    --inline-recipe fileb://path/to/recipe/file
```

**nota**  
Essa etapa cria o componente no AWS IoT Greengrass serviço no Nuvem AWS. É possível usar a CLI do Greengrass para desenvolver, testar e implantar o componente localmente antes de fazer upload para a nuvem. Para obter mais informações, consulte [Desenvolver componentes do AWS IoT Greengrass](develop-greengrass-components.md).

# Solução de problemas de inferência de Machine learning do
<a name="ml-troubleshooting"></a>

Use as informações e soluções desta seção para ajudar a resolver problemas com seus componentes de machine learning. Para os componentes públicos de inferência de machine learning, consulte as mensagens de erro nos seguintes logs de componentes:

------
#### [ Linux or Unix ]
+ `/greengrass/v2/logs/aws.greengrass.DLRImageClassification.log`
+ `/greengrass/v2/logs/aws.greengrass.DLRObjectDetection.log`
+ `/greengrass/v2/logs/aws.greengrass.TensorFlowLiteImageClassification.log`
+ `/greengrass/v2/logs/aws.greengrass.TensorFlowLiteObjectDetection.log`

------
#### [ Windows ]
+ `C:\greengrass\v2\logs\aws.greengrass.DLRImageClassification.log`
+ `C:\greengrass\v2\logs\aws.greengrass.DLRObjectDetection.log`
+ `C:\greengrass\v2\logs\aws.greengrass.TensorFlowLiteImageClassification.log`
+ `C:\greengrass\v2\logs\aws.greengrass.TensorFlowLiteObjectDetection.log`

------

Se um componente for instalado corretamente, o log do componente conterá a localização da biblioteca que ele usa para inferência.

**Topics**
+ [Falha ao buscar biblioteca](#rpi-update-error)
+ [Cannot open shared object file](#rpi-import-cv-error)
+ [Error: ModuleNotFoundError: No module named '<library>'](#troubleshooting-venv-errors-not-found)
+ [Nenhum dispositivo compatível com CUDA foi detectado](#troubleshooting-cuda-error)
+ [Nenhum arquivo ou diretório](#troubleshooting-venv-errors-no-such-file)
+ [RuntimeError: module compiled against API version 0xf but this version of NumPy is <version>](#troubleshooting-rpi-numpy-version-error)
+ [picamera.exc.PiCameraError: Camera is not enabled](#troubleshooting-rpi-camera-stack-error)
+ [Erros de memória](#troubleshooting-memory-errors)
+ [Erros de espaço em disco](#troubleshooting-disk-space-errors)
+ [Erros de tempo limite](#troubleshooting-timeout-errors)

## Falha ao buscar biblioteca
<a name="rpi-update-error"></a>

O erro a seguir ocorre quando o script do instalador não consegue baixar uma biblioteca necessária durante a implantação em um dispositivo Raspberry Pi.

```
Err:2 http://raspbian.raspberrypi.org/raspbian buster/main armhf python3.7-dev armhf 3.7.3-2+deb10u1
404 Not Found [IP: 93.93.128.193 80] 
E: Failed to fetch http://raspbian.raspberrypi.org/raspbian/pool/main/p/python3.7/libpython3.7-dev_3.7.3-2+deb10u1_armhf.deb 404 Not Found [IP: 93.93.128.193 80]
```

Execute `sudo apt-get update` e implante seu componente novamente.

## Cannot open shared object file
<a name="rpi-import-cv-error"></a>

Você pode ver erros semelhantes aos seguintes quando o script do instalador não consegue baixar uma dependência necessária `opencv-python` durante a implantação em um dispositivo Raspberry Pi.

```
ImportError: libopenjp2.so.7: cannot open shared object file: No such file or directory
```

Execute o seguinte comando para instalar manualmente as dependências do `opencv-python`:

```
sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
```

## Error: ModuleNotFoundError: No module named '<library>'
<a name="troubleshooting-venv-errors-not-found"></a>

Talvez você veja esse erro nos logs do componente de runtime de ML (`variant.DLR.log` ou `variant.TensorFlowLite.log`) quando a biblioteca de tempo de execução de ML ou suas dependências não estiverem instaladas corretamente. Esse erro pode ocorrer nos seguintes casos:
+ Se você usar a `UseInstaller` opção, que é ativada por padrão, esse erro indica que o componente de runtime de ML falhou ao instalar o runtime ou suas dependências. Faça o seguinte:

  1. Configure o componente de runtime de ML para desativar a opção `UseInstaller`.

  1. Instale o runtime do ML e suas dependências e disponibilize-os para o usuário do sistema que executa os componentes do ML. Para saber mais, consulte:
     + [Opção de tempo de execução UseInstaller do DLR](dlr-component.md#dlr-component-config-useinstaller-term)
     + [TensorFlow UseInstaller Opção Lite Runtime](tensorflow-lite-component.md#tensorflow-lite-component-config-useinstaller-term)
+ Se você não usar a opção `UseInstaller`, esse erro indica que o runtime do ML ou suas dependências não estão instalados para o usuário do sistema que executa os componentes do ML. Faça o seguinte:

  1. Verifique se a biblioteca está instalada para o usuário do sistema que executa os componentes de ML. *ggc\$1user*Substitua pelo nome do usuário do sistema e *tflite\$1runtime* substitua pelo nome da biblioteca a ser verificada.

------
#### [ Linux or Unix ]

     ```
     sudo -H -u ggc_user bash -c "python3 -c 'import tflite_runtime'"
     ```

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

     ```
     runas /user:ggc_user "py -3 -c \"import tflite_runtime\""
     ```

------

  1. Se a biblioteca não estiver instalada, instale-a para esse usuário. *ggc\$1user*Substitua pelo nome do usuário do sistema e *tflite\$1runtime* substitua pelo nome da biblioteca.

------
#### [ Linux or Unix ]

     ```
     sudo -H -u ggc_user bash -c "python3 -m pip install --user tflite_runtime"
     ```

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

     ```
     runas /user:ggc_user "py -3 -m pip install --user tflite_runtime"
     ```

------

     Para obter mais informações sobre as dependências de cada runtime de ML, consulte o seguinte:
     + [Opção de tempo de execução UseInstaller do DLR](dlr-component.md#dlr-component-config-useinstaller-term)
     + [TensorFlow UseInstaller Opção Lite Runtime](tensorflow-lite-component.md#tensorflow-lite-component-config-useinstaller-term)

  1. Se o problema persistir, instale a biblioteca para outro usuário para confirmar se esse dispositivo pode instalar a biblioteca. O usuário pode ser, por exemplo, seu usuário, o usuário root ou um usuário administrador. Se você não conseguir instalar a biblioteca com êxito para nenhum usuário, talvez seu dispositivo não seja compatível com a biblioteca. Consulte a documentação da biblioteca para analisar os requisitos e solucionar problemas de instalação.

## Nenhum dispositivo compatível com CUDA foi detectado
<a name="troubleshooting-cuda-error"></a>

Você poderá ver o seguinte erro ao usar a aceleração de GPU. Execute o comando a seguir para ativar o acesso à GPU para o usuário do Greengrass.

```
sudo usermod -a -G video ggc_user
```

## Nenhum arquivo ou diretório
<a name="troubleshooting-venv-errors-no-such-file"></a>

Os erros a seguir indicam que o componente de runtime não conseguiu configurar o ambiente virtual corretamente:
+ `MLRootPath/greengrass_ml_dlr_conda/bin/conda: No such file or directory `
+ `MLRootPath/greengrass_ml_dlr_venv/bin/activate: No such file or directory ` 
+ `MLRootPath/greengrass_ml_tflite_conda/bin/conda: No such file or directory ` 
+ `MLRootPath/greengrass_ml_tflite_venv/bin/activate: No such file or directory `

Verifique os logs para se certificar de que todas as dependências de runtime foram instaladas corretamente. Para obter mais informações sobre as bibliotecas instaladas pelo script do instalador, consulte os seguintes tópicos:
+ [Runtime do DLR](dlr-component.md)
+ [TensorFlow Tempo de execução leve](tensorflow-lite-component.md)

Por padrão, *MLRootPath* está definido como`/greengrass/v2/work/component-name/greengrass_ml`. Para alterar esse local, inclua o componente de runtime [Runtime do DLR](dlr-component.md) ou [TensorFlow Tempo de execução leve](tensorflow-lite-component.md) diretamente em sua implantação e especifique um valor modificado para o parâmetro `MLRootPath` em uma atualização de mesclagem de configuração. Para obter mais informações sobre a configuração de componentes, consulte [Atualizar configurações do componente](update-component-configurations.md).

**nota**  
Para o componente DLR v1.3.x, você define o parâmetro `MLRootPath` na configuração do componente de inferência e o valor padrão é `$HOME/greengrass_ml`.

## RuntimeError: module compiled against API version 0xf but this version of NumPy is <version>
<a name="troubleshooting-rpi-numpy-version-error"></a>

Você pode ver os seguintes erros ao executar a inferência de machine learning em um Raspberry Pi executando o Raspberry Pi OS Bullseye.

```
RuntimeError: module compiled against API version 0xf but this version of numpy is 0xd
ImportError: numpy.core.multiarray failed to import
```

Esse erro ocorre porque o Raspberry Pi OS Bullseye inclui uma versão anterior à versão exigida pelo NumPy OpenCV. Para corrigir esse problema, execute o comando a seguir para atualizar NumPy para a versão mais recente.

```
pip3 install --upgrade numpy
```

## picamera.exc.PiCameraError: Camera is not enabled
<a name="troubleshooting-rpi-camera-stack-error"></a>

Você pode ver o seguinte erro ao executar a inferência de machine learning em um Raspberry Pi executando o Raspberry Pi OS Bullseye.

```
picamera.exc.PiCameraError: Camera is not enabled. Try running 'sudo raspi-config' and ensure that the camera has been enabled.
```

Esse erro ocorre porque o Raspberry Pi OS Bullseye inclui uma nova pilha de câmeras que não é compatível com os componentes de ML. Para resolver esse problema, ative a pilha de câmeras antiga.<a name="raspberry-pi-bullseye-enable-legacy-camera-stack"></a>

**Para habilitar a pilha de câmeras antiga**

1. Execute o comando abaixo para abrir a ferramenta de configuração do Raspberry Pi.

   ```
   sudo raspi-config
   ```

1. Selecione **Opções de interface**.

1. Selecione **Câmera antiga** para habilitar a pilha de câmeras antiga.

1. Reinicie o Raspberry Pi.

## Erros de memória
<a name="troubleshooting-memory-errors"></a>

Os erros a seguir geralmente ocorrem quando o dispositivo não tem memória suficiente e o processo do componente é interrompido.
+ `stderr. Killed.`
+ `exitCode=137`

Recomendamos um mínimo de 500 MB de memória para implantar um componente público de inferência de machine learning.

## Erros de espaço em disco
<a name="troubleshooting-disk-space-errors"></a>

Normalmente, o erro `no space left on device` ocorre quando um dispositivo não tem armazenamento suficiente. Verifique se há espaço em disco suficiente disponível em seu dispositivo antes de implantar o componente novamente. Recomendamos um mínimo de 500 MB de espaço livre em disco para implantar um componente público de inferência de machine learning.

## Erros de tempo limite
<a name="troubleshooting-timeout-errors"></a>

Os componentes públicos de machine learning baixam grandes arquivos de modelo de machine learning com mais de 200 MB. Se o download expirar durante a implantação, verifique a velocidade da sua conexão com a Internet e tente implantar novamente.