

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

# Cómo realizar la inferencia de machine learning
<a name="perform-machine-learning-inference"></a>

Con él AWS IoT Greengrass, puede realizar inferencias de aprendizaje automático (ML) en sus dispositivos periféricos a partir de datos generados localmente mediante modelos entrenados en la nube. Benefíciese de la baja latencia y el ahorro de costos que supone la ejecución de inferencias locales, aprovechando al mismo tiempo la potencia de cómputo de la nube para el entrenamiento de modelos y el procesamiento complejo.

AWS IoT Greengrass hace que los pasos necesarios para realizar la inferencia sean más eficientes. Puede entrenar sus modelos de inferencia en cualquier lugar e implementarlos localmente como componentes de *machine learning*. Por ejemplo, puede crear y entrenar modelos de aprendizaje profundo en [Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker). A continuación, puede almacenar estos modelos en un bucket de [Amazon S3](https://console.aws.amazon.com/s3), de forma que pueda utilizarlos como artefactos en sus componentes para realizar inferencias en sus dispositivos principales.

**Topics**
+ [Cómo funciona la inferencia AWS IoT Greengrass de aprendizaje automático](#how-ml-inference-works)
+ [¿Qué hay de diferente en la AWS IoT Greengrass versión 2?](#ml-differences)
+ [Requisitos](#ml-requirements)
+ [Orígenes de modelos admitidos](#ml-model-sources)
+ [Tiempos de ejecución de machine learning compatibles](#ml-runtime-libraries)
+ [Componentes de machine learning proporcionados por AWS](#ml-components)
+ [Utilice Amazon SageMaker AI Edge Manager en los dispositivos principales de Greengrass](use-sagemaker-edge-manager.md)
+ [Personalización de sus componentes de machine learning](ml-customization.md)
+ [Resolución de problemas de inferencia de machine learning](ml-troubleshooting.md)

## Cómo funciona la inferencia AWS IoT Greengrass de aprendizaje automático
<a name="how-ml-inference-works"></a>

AWS proporciona [componentes de aprendizaje automático](#ml-components) que puede usar para crear implementaciones en un solo paso para realizar inferencias de aprendizaje automático en su dispositivo. También puede utilizar estos componentes como plantillas para crear componentes personalizados que se adapten a sus requisitos específicos.<a name="ml-component-types"></a>

AWS proporciona las siguientes categorías de componentes de aprendizaje automático:
+ **Componente de modelo**: contiene modelos de machine learning como artefactos de Greengrass.
+ **Componente de tiempo de ejecución**: contiene el script que instala el marco de machine learning y sus dependencias en el dispositivo principal de Greengrass.
+ **Componente de inferencia**: contiene el código de inferencia e incluye las dependencias de los componentes para instalar el marco de machine learning y descargar modelos de machine learning previamente entrenados.

Cada implementación que cree para realizar inferencias de machine learning consta de al menos un componente que ejecuta la aplicación de inferencia, instala el marco de machine learning y descarga sus modelos de machine learning. Para realizar una inferencia de ejemplo con los componentes AWS proporcionados, debe implementar un componente de inferencia en el dispositivo principal, que incluye automáticamente los componentes del modelo y del tiempo de ejecución correspondientes como dependencias. Para personalizar las implementaciones, puede conectar o cambiar los componentes del modelo de muestra por componentes de modelo personalizados, o puede utilizar las recetas de componentes de los componentes AWS proporcionados como plantillas para crear sus propios componentes personalizados de inferencia, modelo y tiempo de ejecución. 

Cómo realizar inferencias de machine learning mediante componentes personalizados:

1. Cree un componente de modelo personalizado. Este componente contiene los modelos de aprendizaje automático que desea utilizar para realizar la inferencia. AWS proporciona ejemplos de modelos DLR y TensorFlow Lite previamente entrenados. Para usar un modelo personalizado, cree su propio componente de modelo.

1. Cree un componente de tiempo de ejecución. Este componente contiene los scripts necesarios para instalar el entorno de ejecución de aprendizaje automático en sus modelos. AWS proporciona ejemplos de componentes de tiempo de ejecución para [Deep Learning Runtime](https://github.com/neo-ai/neo-ai-dlr) (DLR) y [TensorFlow Lite](https://www.tensorflow.org/lite/guide/python). Para usar otros tiempos de ejecución con sus modelos personalizados y su código de inferencia, cree sus propios componentes de tiempo de ejecución.

1. Cree un componente de inferencia. Este componente contiene el código de inferencia e incluye los componentes del modelo y del tiempo de ejecución como dependencias. AWS proporciona ejemplos de componentes de inferencia para la clasificación de imágenes y la detección de objetos mediante DLR y Lite. TensorFlow Para realizar otros tipos de inferencias, o para usar modelos y tiempos de ejecución personalizados, cree su propio componente de inferencia.

1. Implemente el componente de inferencia. Al implementar este componente, AWS IoT Greengrass también despliega automáticamente las dependencias del modelo y del componente de tiempo de ejecución.

Para empezar con los componentes AWS proporcionados, consulte. [Tutorial: Realice una inferencia de clasificación de imágenes de muestra con Lite TensorFlow](ml-tutorial-image-classification.md)

Para obtener información sobre cómo crear componentes de machine learning personalizados, consulte [Personalización de sus componentes de machine learning](ml-customization.md).

## ¿Qué hay de diferente en la AWS IoT Greengrass versión 2?
<a name="ml-differences"></a>

AWS IoT Greengrass consolida las unidades funcionales del aprendizaje automático (como los modelos, los tiempos de ejecución y el código de inferencia) en componentes que permiten utilizar un proceso de un solo paso para instalar el entorno de ejecución del aprendizaje automático, descargar los modelos entrenados y realizar inferencias en el dispositivo. 

Al utilizar los componentes de aprendizaje automático AWS proporcionados, tiene la flexibilidad de empezar a realizar inferencias de aprendizaje automático con ejemplos de códigos de inferencia y modelos previamente entrenados. Puede conectar componentes de modelos personalizados para utilizar sus propios modelos personalizados con los componentes de inferencia y tiempo de ejecución que proporcionan. AWS Para obtener una solución de machine learning completamente personalizada, puede usar los componentes públicos como plantillas para crear componentes personalizados y usar cualquier tiempo de ejecución, modelo o tipo de inferencia que desee.

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

Para crear y utilizar componentes de machine learning, debe disponer de lo siguiente:
+ Un dispositivo principal de Greengrass. Si no dispone de una, consulte [Tutorial: Introducción a AWS IoT Greengrass V2](getting-started.md).
+ Espacio de almacenamiento local mínimo de 500 MB para usar los componentes de aprendizaje AWS automático de muestra proporcionados.

## Orígenes de modelos admitidos
<a name="ml-model-sources"></a>

AWS IoT Greengrass admite el uso de modelos de aprendizaje automático personalizados que se almacenan en Amazon S3. También puede utilizar los trabajos de empaquetado perimetral de Amazon SageMaker AI para crear directamente componentes de modelo para sus modelos compilados con SageMaker AI NEO. Para obtener información sobre el uso de SageMaker AI Edge Manager con AWS IoT Greengrass, consulte[Utilice Amazon SageMaker AI Edge Manager en los dispositivos principales de Greengrass](use-sagemaker-edge-manager.md).

Los buckets de S3 que contienen sus modelos deben cumplir los siguientes requisitos:
+ No deben cifrarse con SSE-C. En el caso de los buckets que utilizan cifrado del lado del servidor, la inferencia de machine learning de AWS IoT Greengrass actualmente solo admite las opciones de cifrado SSE-S3 o SSE-KMS. Para obtener más información sobre las opciones de cifrado del lado del servidor, consulte [Protección de datos con el cifrado del lado del servidor](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html) en la *Guía del usuario de Amazon Simple Storage Service*.
+ Sus nombres no deben incluir puntos (`.`). Para obtener más información, consulte la regla sobre el uso de buckets virtuales de estilo host con SSL en [Reglas para la nomenclatura del bucket](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules) en la *Guía del usuario de Amazon Simple Storage Service*.
+ <a name="sr-artifacts-req"></a>Los depósitos de S3 que almacenan las fuentes de los modelos deben estar en los mismos componentes de aprendizaje automático Cuenta de AWS y Región de AWS al igual que ellos.
+ AWS IoT Greengrass debe tener `read` permiso para acceder a la fuente del modelo. Para permitir el acceso AWS IoT Greengrass a los buckets de S3, el rol de [dispositivo de Greengrass](device-service-role.md) debe permitir `s3:GetObject` la acción. Para obtener más información acerca del rol del dispositivo, consulte [Autorizar a los dispositivos principales a interactuar con AWS los servicios](device-service-role.md).

## Tiempos de ejecución de machine learning compatibles
<a name="ml-runtime-libraries"></a>

AWS IoT Greengrass le permite crear componentes personalizados para utilizar cualquier entorno de aprendizaje automático que elija para realizar inferencias de aprendizaje automático con sus modelos personalizados. Para obtener información sobre cómo crear componentes de machine learning personalizados, consulte [Personalización de sus componentes de machine learning](ml-customization.md).

Para que el proceso de introducción al aprendizaje automático sea más eficiente, AWS IoT Greengrass proporciona ejemplos de componentes de inferencia, modelos y tiempo de ejecución que utilizan los siguientes tiempos de ejecución de aprendizaje automático: 
+  [Tiempo de ejecución de aprendizaje profundo](https://github.com/neo-ai/neo-ai-dlr) (DLR) versión 1.6.0 y versión 1.3.0
+  [TensorFlow Lite v2.5.0](https://www.tensorflow.org/lite/guide/python) 

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

En la siguiente tabla se enumeran los componentes AWS proporcionados que se utilizan para el aprendizaje automático. 

**nota**  <a name="component-nucleus-dependency-update-note"></a>
Varios AWS de los componentes proporcionados dependen de versiones secundarias específicas del núcleo de Greengrass. Debido a esta dependencia, es necesario actualizar estos componentes al actualizar el núcleo de Greengrass a una nueva versión secundaria. Para obtener información sobre las versiones específicas del núcleo de las que depende cada componente, consulte el tema del componente correspondiente. Para más información sobre la actualización del núcleo, consulte [Actualización del software AWS IoT Greengrass Core (OTA)](update-greengrass-core-v2.md).


| Componente | Description (Descripción) | [Tipo de componente](develop-greengrass-components.md#component-types) | Sistema operativo admitido | [Código abierto](open-source.md) | 
| --- | --- | --- | --- | --- | 
| [SageMaker Administrador AI Edge](sagemaker-edge-manager-component.md) | Implementa el agente Amazon SageMaker AI Edge Manager en el dispositivo principal de Greengrass. | Genérico | Linux, Windows | No | 
| [Clasificación de imágenes de DLR](dlr-image-classification-component.md) | Componente de inferencia que utiliza el almacén de modelos de clasificación de imágenes de DLR y el componente de tiempo de ejecución de DLR como dependencias para instalar el DLR, descargar modelos de clasificación de imágenes de muestra y realizar inferencias de clasificación de imágenes en los dispositivos compatibles. | Genérico | Linux, Windows | No | 
| [Detección de objetos del DLR](dlr-object-detection-component.md) | Componente de inferencia que utiliza el almacén de modelos de detección de objetos del DLR y el componente de tiempo de ejecución del DLR como dependencias para instalar el DLR, descargar modelos de detección de objetos de muestra y realizar inferencias de detección de objetos en los dispositivos compatibles. | Genérico | Linux, Windows | No | 
| [Almacén de modelos de clasificación de imágenes de DLR](dlr-image-classification-model-store-component.md) | Componente de modelo que contiene ejemplos de ResNet -50 modelos de clasificación de imágenes como artefactos de Greengrass. | Genérico | Linux, Windows | No | 
| [Almacén de modelos de detección de objetos del DLR](dlr-object-detection-model-store-component.md) | Componente de modelo que contiene ejemplos de modelos de detección de YOLOv3 objetos como artefactos de Greengrass. | Genérico | Linux, Windows | No | 
| [Tiempo de ejecución de DLR](dlr-component.md) | Componente de tiempo de ejecución que contiene una cadena de instalación que se utiliza para instalar el DLR y sus dependencias en el dispositivo principal de Greengrass. | Genérico | Linux, Windows | No | 
| [TensorFlow Clasificación de imágenes Lite](tensorflow-lite-image-classification-component.md) | Componente de inferencia que utiliza el TensorFlow almacén de modelos de clasificación de imágenes de TensorFlow Lite y el componente de tiempo de ejecución de Lite como dependencias para instalar TensorFlow Lite, descargar modelos de clasificación de imágenes de muestra y realizar inferencias de clasificación de imágenes en dispositivos compatibles. | Genérico | Linux, Windows | No | 
| [TensorFlow Detección de objetos Lite](tensorflow-lite-object-detection-component.md) | Componente de inferencia que utiliza la tienda de modelos de detección de objetos de TensorFlow Lite y el componente de tiempo de ejecución de TensorFlow Lite como dependencias para instalar TensorFlow Lite, descargar modelos de detección de objetos de muestra y realizar inferencias de detección de objetos en dispositivos compatibles. | Genérico | Linux, Windows | No | 
| [TensorFlow Tienda de modelos de clasificación de imágenes Lite](tensorflow-lite-image-classification-model-store-component.md) | Componente de modelo que contiene un modelo MobileNet v1 de muestra como artefacto de Greengrass. | Genérico | Linux, Windows | No | 
| [TensorFlow Tienda de modelos de detección de objetos Lite](tensorflow-lite-object-detection-model-store-component.md) | Componente de modelo que contiene un MobileNet modelo de muestra de detección de disparo único (SSD) como un artefacto de Greengrass. | Genérico | Linux, Windows | No | 
| [TensorFlow Tiempo de ejecución Lite](tensorflow-lite-component.md) | Componente de tiempo de ejecución que contiene un script de instalación que se utiliza para instalar TensorFlow Lite y sus dependencias en el dispositivo principal de Greengrass. | Genérico | Linux, Windows | No | 

# Utilice Amazon SageMaker AI Edge Manager en los dispositivos principales de Greengrass
<a name="use-sagemaker-edge-manager"></a>

**importante**  
SageMaker AI Edge Manager dejó de fabricarse el 26 de abril de 2024. Para obtener más información sobre cómo seguir implementando sus modelos en dispositivos periféricos, consulte el [final del ciclo de vida de SageMaker AI Edge Manager](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-eol.html).

Amazon SageMaker AI Edge Manager es un agente de software que se ejecuta en dispositivos periféricos. SageMaker AI Edge Manager proporciona administración de modelos para dispositivos periféricos para que pueda empaquetar y usar modelos compilados por Amazon SageMaker AI NEO directamente en los dispositivos principales de Greengrass. Con SageMaker AI Edge Manager, también puede muestrear los datos de entrada y salida del modelo de sus dispositivos principales y enviarlos a ellos Nube de AWS para su supervisión y análisis. Como SageMaker AI Edge Manager utiliza SageMaker AI Neo para optimizar tus modelos para el hardware de destino, no necesitas instalar el DLR Runtime directamente en tu dispositivo. En los dispositivos Greengrass, SageMaker AI Edge Manager no carga los AWS IoT certificados locales ni llama directamente al punto final del proveedor de AWS IoT credenciales. En su lugar, SageMaker AI Edge Manager utiliza el [servicio de intercambio de fichas](token-exchange-service-component.md) para obtener una credencial temporal de un punto final de TES. 

En esta sección se describe cómo funciona SageMaker AI Edge Manager en los dispositivos principales de Greengrass.



## Cómo funciona SageMaker AI Edge Manager en los dispositivos Greengrass
<a name="how-to-use-sdge-manager-with-greengrass"></a>

Para implementar el agente SageMaker AI Edge Manager en sus dispositivos principales, cree una implementación que incluya el `aws.greengrass.SageMakerEdgeManager` componente. AWS IoT Greengrass gestiona la instalación y el ciclo de vida del agente Edge Manager en sus dispositivos. Cuando haya disponible una nueva versión del binario del agente, implemente la versión actualizada del componente `aws.greengrass.SageMakerEdgeManager` para actualizar la versión del agente que está instalada en su dispositivo. 

Cuando utilizas SageMaker AI Edge Manager con AWS IoT Greengrass, tu flujo de trabajo incluye los siguientes pasos de alto nivel:

1. Compila modelos con SageMaker AI Neo.

1. Empaque sus modelos compilados con SageMaker AI Neo utilizando trabajos de empaquetado periféricos de SageMaker AI. Cuando ejecuta un trabajo de empaquetado de periferia para su modelo, puede optar por crear un componente del modelo con el modelo empaquetado como un artefacto que se puede implementar en su dispositivo principal de Greengrass. 

1. Cree un componente de inferencia personalizado. Este componente de inferencia se utiliza para interactuar con el agente del administrador de periféricos y realizar la inferencia en el dispositivo principal. Estas operaciones incluyen cargar modelos, invocar solicitudes de predicción para ejecutar la inferencia y descargar modelos cuando el componente se apaga. 

1. Implemente el componente SageMaker AI Edge Manager, el componente de modelo empaquetado y el componente de inferencia para ejecutar el modelo en el motor de inferencia de SageMaker IA (agente Edge Manager) de su dispositivo.

Para obtener más información sobre la creación de trabajos de empaquetado perimetral y componentes de inferencia que funcionen con SageMaker AI Edge Manager, consulte [Deploy Model Package y Edge Manager Agent con AWS IoT Greengrass](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-greengrass.html) en la *Guía para desarrolladores de Amazon SageMaker AI*.

El [Tutorial: Cómo empezar a SageMaker usar AI Edge Manager](get-started-with-edge-manager-on-greengrass.md) tutorial le muestra cómo configurar y usar el agente SageMaker AI Edge Manager en un dispositivo principal de Greengrass existente, utilizando el código de ejemplo AWS proporcionado que puede usar para crear ejemplos de componentes de inferencia y modelo. 

Cuando usa SageMaker AI Edge Manager en los dispositivos principales de Greengrass, también puede usar la función de captura de datos para cargar datos de muestra en. Nube de AWS La captura de datos es una función de SageMaker IA que se utiliza para cargar entradas de inferencia, resultados de inferencias y datos de inferencia adicionales a un bucket de S3 o a un directorio local para futuros análisis. Para obtener más información sobre el uso de datos de captura con SageMaker AI Edge Manager, consulte [Manage Model](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-manage-model.html#edge-manage-model-capturedata) en la *Guía para desarrolladores de Amazon SageMaker AI*.

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

Debe cumplir los siguientes requisitos para utilizar el agente SageMaker AI Edge Manager en los dispositivos principales de Greengrass.<a name="sm-edge-manager-component-reqs"></a>
+ <a name="sm-req-core-device"></a>Un dispositivo principal de Greengrass que se ejecuta en Amazon Linux 2, una plataforma de Linux basada en Debian (x86\$164 o Armv8) o Windows (x86\$164). Si no dispone de una, consulte [Tutorial: Introducción a AWS IoT Greengrass V2](getting-started.md).
+ <a name="sm-req-python"></a>[Python](https://www.python.org/downloads/) 3.6 o posterior, incluido `pip` para la versión de Python, instalado en el dispositivo principal.
+ El [rol del dispositivo de Greengrass](device-service-role.md) se configuró con lo siguiente: 
  + <a name="sm-req-iam-trust-relationship"></a>Una relación de confianza que permite a `credentials.iot.amazonaws.com` y a `sagemaker.amazonaws.com` asumir el rol, como se muestra en el siguiente ejemplo de política de IAM.

    ```
    { 
      "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>La política gestionada [AmazonSageMakerEdgeDeviceFleetPolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AmazonSageMakerEdgeDeviceFleetPolicy)de IAM.
  + <a name="sm-req-iam-s3-putobject"></a>La acción `s3:PutObject`, como se muestra en el siguiente ejemplo de política de IAM.

    ```
    {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
        {
          "Action": [
            "s3:PutObject"
          ],
          "Resource": [
            "*"
          ],
          "Effect": "Allow"
        }
      ]
    }
    ```
+ <a name="sm-req-s3-bucket"></a>Un bucket de Amazon S3 creado en el mismo dispositivo principal de Greengrass Cuenta de AWS y Región de AWS en el mismo que él. SageMaker AI Edge Manager requiere un depósito S3 para crear una flota de dispositivos perimetrales y almacenar datos de muestra derivados de la ejecución de inferencias en su dispositivo. Para más información sobre la creación de buckets de S3, consulte [Introducción a Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html).
+ <a name="sm-req-edge-device-fleet"></a>Una flota de dispositivos periféricos de SageMaker IA que utiliza el mismo alias de AWS IoT rol que su dispositivo principal de Greengrass. Para obtener más información, consulte [Creación de una flota de dispositivos de periferia](get-started-with-edge-manager-on-greengrass.md#create-edge-device-fleet-for-greengrass).
+ <a name="sm-req-edge-device"></a>Su dispositivo principal de Greengrass registrado como dispositivo perimetral en su flota de dispositivos SageMaker AI Edge. El nombre del dispositivo perimetral debe coincidir con el AWS IoT nombre del dispositivo principal. Para obtener más información, consulte [Registro del dispositivo principal de Greengrass](get-started-with-edge-manager-on-greengrass.md#register-greengrass-core-device-in-sme).

## Comience con SageMaker AI Edge Manager
<a name="use-sm-edge-manager"></a>

Puedes completar un tutorial para empezar a usar SageMaker AI Edge Manager. El tutorial muestra cómo empezar a utilizar SageMaker AI Edge Manager con los componentes AWS de muestra proporcionados en un dispositivo principal existente. Estos componentes de ejemplo utilizan el componente SageMaker AI Edge Manager como una dependencia para implementar el agente de Edge Manager y realizar inferencias utilizando modelos previamente entrenados que se compilaron con SageMaker AI Neo. Para obtener más información, consulte [Tutorial: Cómo empezar a SageMaker usar AI Edge Manager](get-started-with-edge-manager-on-greengrass.md).

# Personalización de sus componentes de machine learning
<a name="ml-customization"></a>

En AWS IoT Greengrass, puede configurar ejemplos de [componentes de aprendizaje automático](perform-machine-learning-inference.md#ml-components) para personalizar la forma en que realiza la inferencia de aprendizaje automático en sus dispositivos, con los componentes de inferencia, modelo y tiempo de ejecución como componentes básicos. AWS IoT Greengrass también le proporciona la flexibilidad de usar los componentes de muestra como plantillas y crear sus propios componentes personalizados según sea necesario. Puede combinar este enfoque modular para personalizar los componentes de inferencia del machine learning de las siguientes maneras:

**Uso de ejemplos de componentes de inferencia**  
+ Modifique la configuración de los componentes de inferencia cuando los implemente.
+ Utilice un modelo personalizado con el componente de inferencia de muestra sustituyendo el componente almacén de modelos de muestra por un componente de modelo personalizado. El modelo personalizado debe entrenarse con el mismo tiempo de ejecución que el modelo de muestra.

**Uso de componentes de inferencia personalizados**  
+ Use código de inferencia personalizado con los modelos y tiempos de ejecución de muestra agregando componentes de modelos públicos y componentes de tiempo de ejecución como dependencias de los componentes de inferencia personalizados.
+ Cree y agrega componentes de modelo personalizados o componentes de tiempo de ejecución como dependencias de componentes de inferencia personalizados. Debe utilizar componentes personalizados si desea utilizar un código de inferencia personalizado o un entorno de ejecución para el que AWS IoT Greengrass no se proporcione un componente de muestra. 

**Topics**
+ [Modificación de la configuración de un componente de inferencia público](#modify-ml-component-config)
+ [Uso de un modelo personalizado con el componente de inferencia de muestra](#override-public-model-store)
+ [Creación de componentes de machine learning personalizados](#create-private-ml-components)
+ [Creación de un componente de inferencia personalizado](#create-inference-component)

## Modificación de la configuración de un componente de inferencia público
<a name="modify-ml-component-config"></a>

En la [consola de AWS IoT Greengrass](https://console.aws.amazon.com/greengrass), la página del componente muestra la configuración predeterminada de ese componente. Por ejemplo, la configuración predeterminada del componente de clasificación de imágenes de TensorFlow Lite es la siguiente:

```
{
  "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"
  }
}
```

Cuando implementa un componente de inferencia público, puede modificar la configuración predeterminada para personalizar su implementación. Para obtener información sobre los parámetros de configuración disponibles para cada componente de inferencia pública, consulte el tema del componente en [Componentes de machine learning proporcionados por AWS](perform-machine-learning-inference.md#ml-components).

En esta sección se describe cómo implementar un componente modificado desde la AWS IoT Greengrass consola. Para obtener información sobre la implementación de componentes mediante el AWS CLI, consulte[Crear implementaciones](create-deployments.md).<a name="modify-ml-component-config-console"></a>

**Cómo implementar un componente de inferencia pública modificado (consola)**

1. Inicie sesión en la [consola de AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. En el menú de navegación, elija **Componentes**.

1. En la página **Componentes**, en la pestaña **Componentes públicos**, elija el componente que desea implementar.

1. En la página del componente, elija **Implementar**.

1. <a name="add-deployment"></a>En **Agregar a la implementación**, elija una de las siguientes opciones:

   1. Para combinar este componente con una implementación existente en el dispositivo de destino, elija **Agregar a la implementación existente** y, a continuación, seleccione la implementación que desee revisar.

   1. Para crear una nueva implementación en el dispositivo de destino, elija **Crear nueva implementación**. Si tiene una implementación existente en su dispositivo, al elegir este paso se reemplaza la implementación existente. 

1. <a name="specify-deployment-target"></a>En la página **Especificar detalles**, haga lo siguiente: 

   1. En **Información de implementación**, introduzca o modifique el nombre descriptivo de su implementación.

   1. En **Objetivos de implementación**, seleccione un objetivo para su implementación y elija **Siguiente**. No puede cambiar el objetivo de implementación si está revisando una implementación existente.

1. En la página **Seleccionar componentes**, en **Componentes públicos**, compruebe que está seleccionado el componente de inferencia con la configuración modificada y elija **Siguiente**.

1. En la página **Configurar componentes**, haga lo siguiente: 

   1. Seleccione el componente de inferencia y elija **Configurar componente**.

   1. En **Actualización de configuración**, introduzca los valores de configuración que desee actualizar. Por ejemplo, introduzca la siguiente actualización de configuración en el cuadro **Configuración para combinar** para cambiar el intervalo de inferencia a 15 segundos e indique al componente que busque la imagen con nombre `custom.jpg` en la carpeta `/custom-ml-inference/images/`. 

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

      Para restablecer toda la configuración de un componente a sus valores predeterminados, especifique una sola cadena vacía `""` en el cuadro **Restablecer rutas**. 

   1. Seleccione **Confirmar** y, a continuación, elija **Siguiente**.

1. En la página **Configurar ajustes avanzados**, mantenga los ajustes de configuración predeterminados y seleccione **Siguiente**.

1. En la página **Revisar**, elija **Implementar**.

## Uso de un modelo personalizado con el componente de inferencia de muestra
<a name="override-public-model-store"></a>

Si desea utilizar el componente de inferencia de ejemplo con sus propios modelos de aprendizaje automático para un tiempo de ejecución que AWS IoT Greengrass proporcione un componente de tiempo de ejecución de ejemplo, debe anular los componentes del modelo público por componentes que utilicen esos modelos como artefactos. En general, debe completar los siguientes pasos para usar un modelo personalizado con el componente de inferencia de muestra:

1. Cree un componente de modelo que utilice un modelo personalizado en un bucket de S3 como artefacto. Su modelo personalizado debe entrenarse con el mismo tiempo de ejecución que el modelo que desea reemplazar.

1. Modifique el parámetro de configuración `ModelResourceKey` en el componente de inferencia para usar el modelo personalizado. Para obtener información sobre la actualización de la configuración del componente de inferencia, consulte [Modificación de la configuración de un componente de inferencia público](#modify-ml-component-config).

Al implementar el componente de inferencia, AWS IoT Greengrass busca la versión más reciente de las dependencias de sus componentes. Anula el componente del modelo público dependiente si existe una versión personalizada posterior del componente en la misma banda. Cuenta de AWS Región de AWS

### Creación de un componente de modelo personalizado (consola)
<a name="create-model-store-component-console"></a>

1. Suba un modelo en su bucket de S3. Para obtener más información acerca de cargar sus modelos a un bucket de S3, consulte [Cómo trabajar con buckets de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html) en la *Guía del usuario de Amazon Simple Storage Service*.
**nota**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>Debe almacenar sus artefactos en depósitos de S3 que estén en los mismos Cuenta de AWS y Región de AWS como los componentes. Para permitir el acceso AWS IoT Greengrass a estos artefactos, el [rol del dispositivo Greengrass](device-service-role.md) debe permitir la `s3:GetObject` acción. Para obtener más información acerca del rol del dispositivo, consulte [Autorizar a los dispositivos principales a interactuar con AWS los servicios](device-service-role.md).

1. En el menú de navegación de la [consola de AWS IoT Greengrass](https://console.aws.amazon.com/greengrass), elija **Componentes**.

1. Recupere la receta del componente para el componente del almacén de modelos público.

   1. En la página **Componentes**, en la pestaña **Componentes públicos**, busque y elija el componente del modelo público para el que desee crear una nueva versión. Por ejemplo, `variant.DLR.ImageClassification.ModelStore`.

   1. En la página de componentes, elija **Ver receta** y copie la receta JSON que se muestra.

1. En en la página **Componentes**, en la pestaña **Mis componentes**, elija **Crear componente**.

1. En la página **Crear componente**, en **Información del componente**, seleccione **Introducir la receta como JSON** como origen del componente.

1. En el cuadro **Receta**, pegue la receta del componente que copió anteriormente.

1. <a name="override-model-recipe-config"></a>En la receta, actualice los siguientes valores:
   + `ComponentVersion`: aumenta la versión menor del componente. 

     Cuando cree un componente personalizado para anular un componente un modelo público, debe actualizar solo la versión menor de la versión del componente existente. Por ejemplo, si la versión del componente público es `2.1.0`, puede crear un componente personalizado con la versión `2.1.1`.
   + `Manifests.Artifacts.Uri`: actualiza cada valor de URI al URI de Amazon S3 del modelo que desea utilizar.
**nota**  
No cambie el nombre del componente.

1. Seleccione **Crear componente**.

### Creación de un componente de modelo personalizado (AWS CLI)
<a name="create-model-store-component-cli"></a>

1. Suba un modelo en su bucket de S3. Para obtener más información acerca de cargar sus modelos a un bucket de S3, consulte [Cómo trabajar con buckets de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html) en la *Guía del usuario de Amazon Simple Storage Service*.
**nota**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>Debe almacenar sus artefactos en depósitos S3 que estén en el mismo lugar que Cuenta de AWS los Región de AWS componentes. Para permitir el acceso AWS IoT Greengrass a estos artefactos, el [rol del dispositivo Greengrass](device-service-role.md) debe permitir la `s3:GetObject` acción. Para obtener más información acerca del rol del dispositivo, consulte [Autorizar a los dispositivos principales a interactuar con AWS los servicios](device-service-role.md).

1. Ejecute el siguiente comando para recuperar la receta de componente del componente público. Este comando escribe la receta del componente en el archivo de salida que usted proporcione en el comando. Convierta la cadena codificada base64 recuperada a JSON o YAML, según sea necesario.

------
#### [ 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. Actualice el nombre del archivo de recetas a `<component-name>-<component-version>`, donde la versión del componente sea la versión de destino del nuevo componente. Por ejemplo, `variant.DLR.ImageClassification.ModelStore-2.1.1.yaml`. 

1. <a name="override-model-recipe-config"></a>En la receta, actualice los siguientes valores:
   + `ComponentVersion`: aumenta la versión menor del componente. 

     Cuando cree un componente personalizado para anular un componente un modelo público, debe actualizar solo la versión menor de la versión del componente existente. Por ejemplo, si la versión del componente público es `2.1.0`, puede crear un componente personalizado con la versión `2.1.1`.
   + `Manifests.Artifacts.Uri`: actualiza cada valor de URI al URI de Amazon S3 del modelo que desea utilizar.
**nota**  
No cambie el nombre del componente.

1. Ejecute el siguiente comando para crear un componente nuevo con la receta que recuperó y modificó.

   ```
   aws greengrassv2 create-component-version \
       --inline-recipe fileb://path/to/component/recipe
   ```
**nota**  
Este paso crea el componente del AWS IoT Greengrass servicio en. Nube de AWS Puede utilizar la CLI de Greengrass para desarrollar, probar e implementar su componente de forma local antes de cargarlo en la nube. Para obtener más información, consulte [Desarrollo de componentes de AWS IoT Greengrass](develop-greengrass-components.md).

Para obtener más información sobre cómo crear componentes, consulte [Desarrollo de componentes de AWS IoT Greengrass](develop-greengrass-components.md).

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

Debe crear componentes personalizados si desea utilizar un código de inferencia personalizado o un tiempo de ejecución para el que AWS IoT Greengrass no se proporcione un componente de muestra. Puede usar su código de inferencia personalizado con los modelos de aprendizaje automático y tiempos de ejecución de muestra AWS proporcionados, o puede desarrollar una solución de inferencia de aprendizaje automático completamente personalizada con sus propios modelos y tiempo de ejecución. Si sus modelos utilizan un entorno de ejecución para el que se AWS IoT Greengrass proporciona un ejemplo de componente de tiempo de ejecución, puede utilizar ese componente de tiempo de ejecución y tendrá que crear componentes personalizados únicamente para el código de inferencia y los modelos que desee utilizar. 

**Topics**
+ [Obtención de la receta de un componente público](#get-ml-component-recipes)
+ [Obtención de artefactos de componentes de muestra](#get-ml-component-artifacts)
+ [Carga de artefactos de componentes en un bucket de S3](#upload-ml-component-artifacts)
+ [Creación de componentes personalizados](#create-ml-components)

### Obtención de la receta de un componente público
<a name="get-ml-component-recipes"></a>

Puede utilizar la receta de un componente público de machine learning existente como plantilla para crear un componente personalizado. Para ver la receta de componentes de la última versión de un componente público, utilice la consola o utilice la AWS CLI siguiente opción:
+ **Uso de la consola**

  1. En la página **Componentes**, en la pestaña **Componentes públicos**, busque y elija el componente público.

  1. En la página del componente, elija **Ver receta**.
+ **Usando AWS CLI**

  Ejecute el siguiente comando para recuperar la receta de componente del componente de la variante pública. Este comando escribe la receta del componente en el archivo de receta JSON o YAML que proporcione en el 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>
  ```

------

  Sustituya los valores del comando de la siguiente manera:
  + `<arn>`. El Nombre de recurso de Amazon (ARN) del componente público. 
  + `<recipe-format>`. El formato en el que desea crear el archivo de recetas. Los valores admitidos son `JSON` y `YAML`.
  + `<recipe-file>`. El nombre de la receta en el formato `<component-name>-<component-version>`. 

### Obtención de artefactos de componentes de muestra
<a name="get-ml-component-artifacts"></a>

Puede utilizar los artefactos que utilizan los componentes públicos de machine learning como plantillas para crear sus artefactos de componentes personalizados, como códigos de inferencia o cadenas de instalación en tiempo de ejecución. 

Para ver los artefactos de muestra que se incluyen en los componentes públicos de machine learning, implemente el componente de inferencia público y, a continuación, visualice los artefactos del dispositivo en la carpeta `/greengrass/v2/packages/artifacts-unarchived/component-name/component-version/`. 

### Carga de artefactos de componentes en un bucket de S3
<a name="upload-ml-component-artifacts"></a>

Antes de poder crear un componente personalizado, debe cargar los artefactos del componente en un bucket de S3 y utilizar el S3 URIs en la receta del componente. Por ejemplo, para usar un código de inferencia personalizado en su componente de inferencia, cargue el código en un bucket de S3. A continuación, puede utilizar el URI de Amazon S3 de su código de inferencia como un artefacto en su componente. 

Para obtener más información acerca de cargar contenido a un bucket de S3, consulte [Cómo trabajar con buckets de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html) en la *Guía del usuario de Amazon Simple Storage Service*.

**nota**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>Debe almacenar los artefactos en depósitos de S3 que estén en el mismo lugar que Cuenta de AWS Región de AWS los componentes. Para permitir el acceso AWS IoT Greengrass a estos artefactos, el [rol del dispositivo Greengrass](device-service-role.md) debe permitir la `s3:GetObject` acción. Para obtener más información acerca del rol del dispositivo, consulte [Autorizar a los dispositivos principales a interactuar con AWS los servicios](device-service-role.md).

### Creación de componentes personalizados
<a name="create-ml-components"></a>

Puede utilizar los artefactos y las recetas que haya recuperado para crear sus componentes de machine learning personalizados. Para ver un ejemplo, consulta [Creación de un componente de inferencia personalizado](#create-inference-component).

Para obtener información detallada sobre la creación e implementación de componentes en los dispositivos de Greengrass, consulte [Desarrollo de componentes de AWS IoT Greengrass](develop-greengrass-components.md) y [Implemente AWS IoT Greengrass componentes en los dispositivos](manage-deployments.md).

## Creación de un componente de inferencia personalizado
<a name="create-inference-component"></a>

En esta sección, se muestra cómo crear un componente de inferencia personalizado con el componente de clasificación de imágenes de DLR como una plantilla.

**Topics**
+ [Carga de su código de inferencia a un bucket de Amazon S3](#create-inference-code)
+ [Creación de una receta para su componente de inferencia](#create-inference-component-recipe)
+ [Creación del componente de inferencia](#create-private-inference-component)

### Carga de su código de inferencia a un bucket de Amazon S3
<a name="create-inference-code"></a>

Cree su código de inferencia y, a continuación, cárguelo en un bucket de S3. Para obtener más información acerca de cargar contenido a un bucket de S3, consulte [Cómo trabajar con buckets de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html) en la *Guía del usuario de Amazon Simple Storage Service*.

**nota**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>Debe almacenar sus artefactos en depósitos S3 que estén en el mismo lugar que Cuenta de AWS los Región de AWS componentes. Para permitir el acceso AWS IoT Greengrass a estos artefactos, el [rol del dispositivo Greengrass](device-service-role.md) debe permitir la `s3:GetObject` acción. Para obtener más información acerca del rol del dispositivo, consulte [Autorizar a los dispositivos principales a interactuar con AWS los servicios](device-service-role.md).

### Creación de una receta para su componente de inferencia
<a name="create-inference-component-recipe"></a>

1. Ejecute el siguiente comando para recuperar la receta de componente del componente de clasificación de imágenes de DLR. Este comando escribe la receta del componente en el archivo de receta JSON o YAML que proporcione en el 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>*Sustitúyalo por el nombre de la receta en el formato`<component-name>-<component-version>`. 

1. En el objeto `ComponentDependencies` de la receta, realice una o varias de las siguientes acciones según el modelo y los componentes del tiempo de ejecución que desee utilizar:
   + Mantenga la dependencia de los componentes del DLR si desea utilizar modelos compilados por el DLR. También puede reemplazarlo por una dependencia de un componente de tiempo de ejecución personalizado, como se muestra en el ejemplo siguiente.

     **Componente de tiempo de ejecución**

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

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

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

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

------
   + Mantenga la dependencia del almacén de modelos de clasificación de imágenes del DLR para utilizar los modelos ResNet -50 previamente entrenados que AWS proporciona, o modifíquelo para utilizar un componente de modelo personalizado. Al incluir una dependencia para un componente de modelo público, si existe una versión personalizada posterior del componente en el mismo Cuenta de AWS y Región de AWS, entonces, el componente de inferencia utiliza ese componente personalizado. Especifique la dependencia del componente del modelo como se muestra en los siguientes ejemplos.

     **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. En el objeto `ComponentConfiguration`, agregue la configuración por defecto para este componente. Más adelante podrá modificar esta configuración cuando implemente el componente. El siguiente extracto muestra la configuración del componente de clasificación de imágenes de DLR. 

   Por ejemplo, si usa un componente de modelo personalizado como dependencia para su componente de inferencia personalizado, modifique `ModelResourceKey` para proporcionar los nombres de los modelos que está utilizando.

------
#### [ 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. En el objeto `Manifests`, proporcione información sobre los artefactos y la configuración de este componente que se utilizan cuando el componente se implementa en diferentes plataformas y cualquier otra información necesaria para ejecutar correctamente el componente. El siguiente extracto muestra la configuración del objeto `Manifests` para la plataforma Linux en el componente de clasificación de imágenes de 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 obtener más información acerca de la creación de recetas de componentes, consulte [AWS IoT Greengrass referencia de recetas de componentes](component-recipe-reference.md).

### Creación del componente de inferencia
<a name="create-private-inference-component"></a>

Utilice la AWS IoT Greengrass consola o el AWS CLI para crear un componente con la receta que acaba de definir. Una vez creado el componente, puede implementarlo para realizar inferencias en su dispositivo. Para ver un ejemplo de cómo implementar un componente de inferencia, consulte [Tutorial: Realice una inferencia de clasificación de imágenes de muestra con Lite TensorFlow](ml-tutorial-image-classification.md).

#### Creación de un componente de inferencia personalizado (consola)
<a name="create-inference-component-console"></a>

1. Inicie sesión en la [consola de AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. En el menú de navegación, elija **Componentes**.

1. En en la página **Componentes**, en la pestaña **Mis componentes**, elija **Crear componente**.

1. En la página **Crear componente**, en **Información del componente**, seleccione **Introducir la receta como JSON** o **Introducir la receta como YAML** como origen del componente.

1. En el cuadro **Receta**, introduzca la receta personalizada que haya creado. 

1. Haga clic en **Crear componente**.

#### Creación de un componente de inferencia personalizado (AWS CLI)
<a name="create-inference-component-cli"></a>

Ejecute el siguiente comando para crear un componente personalizado nuevo con la receta que creó.

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

**nota**  
Este paso crea el componente del AWS IoT Greengrass servicio en Nube de AWS. Puede utilizar la CLI de Greengrass para desarrollar, probar e implementar su componente de forma local antes de cargarlo en la nube. Para obtener más información, consulte [Desarrollo de componentes de AWS IoT Greengrass](develop-greengrass-components.md).

# Resolución de problemas de inferencia de machine learning
<a name="ml-troubleshooting"></a>

Use la información de solución de problemas y las soluciones de esta sección para resolver problemas con sus componentes de machine learning. Para ver los componentes públicos de inferencia de machine learning, consulte los mensajes de error en los siguientes registros 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`

------

Si un componente está instalado correctamente, el registro del componente contiene la ubicación de la biblioteca que utiliza para la inferencia.

**Topics**
+ [No fue posible recuperar la biblioteca](#rpi-update-error)
+ [Cannot open shared object file](#rpi-import-cv-error)
+ [Error: ModuleNotFoundError: No module named '<library>'](#troubleshooting-venv-errors-not-found)
+ [No se ha detectado ningún dispositivo compatible con CUDA](#troubleshooting-cuda-error)
+ [No existe tal archivo o directorio](#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)
+ [Errores de memoria](#troubleshooting-memory-errors)
+ [Errores de espacio en el disco](#troubleshooting-disk-space-errors)
+ [Errores de tiempo de espera](#troubleshooting-timeout-errors)

## No fue posible recuperar la biblioteca
<a name="rpi-update-error"></a>

El siguiente error se produce cuando la cadena de instalación no puede descargar una biblioteca requerida durante la implementación en un 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]
```

Ejecute `sudo apt-get update` y vuelva a implementar el componente.

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

Es posible que se produzcan errores similares a los siguientes cuando la cadena del instalador no pueda descargar una dependencia requerida para `opencv-python` durante la implementación en un dispositivo Raspberry Pi.

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

Ejecute el siguiente comando para instalar manualmente las dependencias para `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>

Es posible que vea este error en los registros de los componentes de tiempo de ejecución de ML (`variant.DLR.log` o `variant.TensorFlowLite.log`) cuando el tiempo de ejecución de la biblioteca de ML o sus dependencias no estén instaladas correctamente. Este error se puede producir en los siguientes escenarios:
+ Si usa la opción `UseInstaller`, que está habilitada de forma predeterminada, este error indica que el componente de tiempo de ejecución de ML no pudo instalar el tiempo de ejecución o sus dependencias. Haga lo siguiente:

  1. Configure el componente de tiempo de ejecución de ML para deshabilitar la opción `UseInstaller`.

  1. Instale el tiempo de ejecución de ML y sus dependencias y póngalos a disposición del usuario del sistema que ejecuta los componentes de ML. Para obtener más información, consulte los siguientes temas:
     + [Opción de tiempo de ejecución de DLR UseInstaller ](dlr-component.md#dlr-component-config-useinstaller-term)
     + [TensorFlowOpción de tiempo de ejecución UseInstaller Lite](tensorflow-lite-component.md#tensorflow-lite-component-config-useinstaller-term)
+ Si no usa la opción `UseInstaller`, este error indica que el tiempo de ejecución de ML o sus dependencias no están instalados para el usuario del sistema que ejecuta los componentes de ML. Haga lo siguiente:

  1. Compruebe que la biblioteca esté instalada para el usuario del sistema que ejecuta los componentes de ML. *ggc\$1user*Sustitúyalo por el nombre del usuario del sistema y *tflite\$1runtime* sustitúyalo por el nombre de la biblioteca que desee comprobar.

------
#### [ 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. Si la biblioteca no está instalada, instálela para ese usuario. *ggc\$1user*Sustitúyalo por el nombre del usuario del sistema y *tflite\$1runtime* sustitúyalo por el nombre de la 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 obtener más información acerca de las dependencias de cada tiempo de ejecución de ML, consulte lo siguiente:
     + [Opción de tiempo de ejecución UseInstaller de DLR](dlr-component.md#dlr-component-config-useinstaller-term)
     + [TensorFlowOpción de tiempo de ejecución UseInstaller Lite](tensorflow-lite-component.md#tensorflow-lite-component-config-useinstaller-term)

  1. Si el problema persiste, instale la biblioteca para que otro usuario confirme si este dispositivo puede instalarla. El usuario puede ser, por ejemplo, su usuario, el usuario raíz o un usuario administrador. Si no puede instalar la biblioteca correctamente para ningún usuario, es posible que su dispositivo no sea compatible con la biblioteca. Consulte la documentación de la biblioteca para revisar los requisitos y solucionar los problemas de instalación.

## No se ha detectado ningún dispositivo compatible con CUDA
<a name="troubleshooting-cuda-error"></a>

Es posible que vea el siguiente error cuando utilice la aceleración de GPU. Ejecute el siguiente comando para habilitar el acceso a la GPU para el usuario de Greengrass.

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

## No existe tal archivo o directorio
<a name="troubleshooting-venv-errors-no-such-file"></a>

Los siguientes errores indican que el componente de tiempo de ejecución no pudo configurar el entorno virtual correctamente:
+ `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 `

Compruebe los registros para asegurarse de que todas las dependencias del tiempo de ejecución se instalaron correctamente. Para obtener más información acerca de las bibliotecas que instale la cadena de instalación, consulte los temas siguientes:
+ [Tiempo de ejecución de DLR](dlr-component.md)
+ [TensorFlow Tiempo de ejecución Lite](tensorflow-lite-component.md)

De forma predeterminada *MLRootPath* está configurada en`/greengrass/v2/work/component-name/greengrass_ml`. Para cambiar esta ubicación, incluya el componente de tiempo de ejecución [Tiempo de ejecución de DLR](dlr-component.md) o [TensorFlow Tiempo de ejecución Lite](tensorflow-lite-component.md) directamente en la implementación y especifique un valor modificado para el parámetro `MLRootPath` en una actualización de combinación de configuraciones. Para obtener más información sobre la configuración de componentes, consulte [Actualización de las configuraciones de los componentes](update-component-configurations.md).

**nota**  
Para el componente DLR versión 1.3.x, se establece el parámetro `MLRootPath` en la configuración del componente de inferencia y el valor predeterminado es `$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>

Es posible que aparezcan los siguientes errores cuando ejecute la inferencia de machine learning en Raspberry Pi con el sistema operativo Bullseye de Raspberry Pi.

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

Este error se produce porque Raspberry Pi OS Bullseye incluye una versión anterior a la NumPy que requiere OpenCV. Para solucionar este problema, ejecuta el siguiente comando para actualizar NumPy a la versión más reciente.

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

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

Es posible que aparezca el siguiente error cuando ejecute la inferencia de machine learning en una Raspberry Pi con el sistema operativo Bullseye de Raspberry Pi.

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

Este error se produce porque el sistema operativo Bullseye de Raspberry Pi incluye una nueva pila de cámara que no es compatible con los componentes de ML. Para solucionar este problema, habilite la pila de cámara antigua.<a name="raspberry-pi-bullseye-enable-legacy-camera-stack"></a>

**Cómo activar la pila de cámara antigua**

1. Ejecute el siguiente comando para abrir la herramienta de configuración de Raspberry Pi.

   ```
   sudo raspi-config
   ```

1. Seleccione **Opciones de interfaz**.

1. Seleccione **Cámara antigua** para activar la pila de cámara antigua.

1. Reinicie el Raspberry Pi.

## Errores de memoria
<a name="troubleshooting-memory-errors"></a>

Los siguientes errores suelen producirse cuando el dispositivo no tiene suficiente memoria y se interrumpe el proceso de los componentes.
+ `stderr. Killed.`
+ `exitCode=137`

Recomendamos un mínimo de 500 MB de memoria para implementar un componente de inferencia de machine learning público.

## Errores de espacio en el disco
<a name="troubleshooting-disk-space-errors"></a>

El error `no space left on device` suele ocurrir cuando un dispositivo no tiene suficiente espacio de almacenamiento. Asegúrese de que haya suficiente espacio disponible en el disco en el dispositivo antes de volver a implementar el componente. Recomendamos un mínimo de 500 MB de espacio libre en el disco para implementar un componente de inferencia de machine learning público.

## Errores de tiempo de espera
<a name="troubleshooting-timeout-errors"></a>

Los componentes públicos de machine learning descargan archivos de modelos de machine learning de gran tamaño que superan los 200 MB. Si se agota el tiempo de espera de la descarga durante la implementación, compruebe la velocidad de la conexión a Internet y vuelva a intentar la implementación.