

Aviso de fin de soporte: el 7 de octubre de 2026, AWS suspenderemos el soporte para AWS IoT Greengrass Version 1. Después del 7 de octubre de 2026, ya no podrá acceder a los AWS IoT Greengrass V1 recursos. Para obtener más información, visita [Migrar desde AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

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="ml-inference"></a>

Esta función está disponible para AWS IoT Greengrass Core v1.6 o posterior.

Con ella AWS IoT Greengrass, puede realizar inferencias de aprendizaje automático (ML) en el borde de los 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.

Para comenzar a realizar la inferencia local, consulte [Cómo configurar la inferencia de aprendizaje automático mediante el Consola de administración de AWS](ml-console.md).

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

Puede entrenar sus modelos de inferencia en cualquier lugar, desplegarlos localmente como *recursos de machine learning* en un grupo de Greengrass y luego acceder a ellos desde las funciones de Lambda de Greengrass. Por ejemplo, puede crear y entrenar modelos de aprendizaje profundo en [SageMaker IA](https://console.aws.amazon.com/sagemaker) e implementarlos en su núcleo de Greengrass. A continuación, las funciones de Lambda pueden utilizar los modelos locales para realizar inferencias con los dispositivos cliente y enviar datos de entrenamiento nuevos de vuelta a la nube.

El siguiente diagrama muestra el flujo de trabajo de inferencia de AWS IoT Greengrass aprendizaje automático.

![\[Componentes del flujo de trabajo de machine learning y el flujo de información entre el dispositivo del núcleo, el servicio de AWS IoT Greengrass y los modelos entrenados en la nube.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/ml-inference/diagram-ml-overview.png)


AWS IoT Greengrass La inferencia de aprendizaje automático simplifica cada paso del flujo de trabajo de aprendizaje automático, lo que incluye:
+ La creación e implementación de prototipos de marco de trabajo de machine learning.
+ El acceso a modelos entrenados en la nube y su implementación en dispositivos del núcleo de Greengrass.
+ [Crear aplicaciones de inferencia que puedan acceder a los aceleradores de hardware (como GPUs y FPGAs) como recursos locales.](access-local-resources.md)

## Recursos de machine learning
<a name="ml-resources"></a>

Los recursos de aprendizaje automático representan modelos de inferencia entrenados en la nube que se implementan en un núcleo. AWS IoT Greengrass Para implementar recursos de machine learning, primero debe añadirlos a un grupo de Greengrass y, a continuación, definir cómo podrán obtener acceso a ellos las funciones de Lambda de dicho grupo. Durante el despliegue grupal, AWS IoT Greengrass recupera los paquetes del modelo fuente de la nube y los extrae a directorios dentro del espacio de nombres de tiempo de ejecución de Lambda. A continuación, las funciones de Lambda de Greengrass utilizan los modelos implementados localmente para llevar a cabo la inferencia.

Para actualizar un modelo implementado localmente, primero debe actualizar el modelo de origen (en la nube) correspondiente al recurso de machine learning y, a continuación, implementar el grupo. Durante la implementación, AWS IoT Greengrass comprueba si existen cambios en el origen. Si se detectan cambios, AWS IoT Greengrass actualiza el modelo local.

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

AWS IoT Greengrass admite fuentes de modelos de SageMaker IA y Amazon S3 para recursos de aprendizaje automático.

Los siguientes requisitos se aplican a los orígenes de modelos:
+ Los buckets de S3 que almacenan las fuentes de los modelos SageMaker AI y Amazon S3 no deben cifrarse mediante SSE-C. En el caso de los buckets que utilizan el cifrado del lado del servidor, la inferencia de aprendizaje automático actualmente solo admite las AWS IoT Greengrass 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*.
+ Los nombres de los buckets de S3 que almacenan las fuentes de los modelos SageMaker AI y Amazon S3 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*.
+ [El Región de AWS soporte a nivel de servicio debe estar disponible tanto para la IA como [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)para la IA. SageMaker ](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html) Actualmente, AWS IoT Greengrass es compatible con los modelos de SageMaker IA en las siguientes regiones:
  + Este de EE. UU. (Ohio)
  + Este de EE. UU. (Norte de Virginia)
  + Oeste de EE. UU. (Oregón)
  + Asia-Pacífico (Bombay)
  + Asia-Pacífico (Seúl)
  + Asia-Pacífico (Singapur)
  + Asia-Pacífico (Sídney)
  + Asia-Pacífico (Tokio)
  + Europa (Fráncfort)
  + Europa (Irlanda)
  + Europa (Londres)
+ AWS IoT Greengrass debe tener `read` permiso para acceder a la fuente del modelo, tal y como se describe en las siguientes secciones.

**SageMaker IA**  
AWS IoT Greengrass admite modelos que se guardan como trabajos de entrenamiento de SageMaker IA. SageMaker La IA es un servicio de aprendizaje automático totalmente gestionado que se puede utilizar para crear y entrenar modelos mediante algoritmos integrados o personalizados. Para obtener más información, consulta [¿Qué es la SageMaker IA?](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) en la *Guía para desarrolladores de SageMaker IA*.  
Si configuraste tu entorno de SageMaker IA mediante la [creación de un bucket](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-config-permissions.html) cuyo nombre contiene`sagemaker`, entonces AWS IoT Greengrass tienes permisos suficientes para acceder a tus trabajos de formación en SageMaker IA. La política administrada de `AWSGreengrassResourceAccessRolePolicy` permite el acceso a los buckets cuyo nombre contiene la cadena `sagemaker`. Esta política está asociada al [rol de servicio de Greengrass](service-role.md).  
De lo contrario, debes conceder AWS IoT Greengrass `read` permiso al depósito en el que está almacenado tu trabajo de formación. Para ello, integre la siguiente política insertada en el rol de servicio. Puedes poner en venta varios cubos ARNs.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        }
    ]
}
```

**Amazon S3**  
AWS IoT Greengrass admite modelos que se almacenan en Amazon S3 como `tar.gz` `.zip` archivos.  
Para permitir el acceso AWS IoT Greengrass a los modelos que están almacenados en los buckets de Amazon S3, debe conceder AWS IoT Greengrass `read` permiso para acceder a los buckets mediante **una** de las siguientes acciones:  
+ Almacene el modelo en un bucket cuyo nombre contenga `greengrass`.

  La política administrada de `AWSGreengrassResourceAccessRolePolicy` permite el acceso a los buckets cuyo nombre contiene la cadena `greengrass`. Esta política está asociada al [rol de servicio de Greengrass](service-role.md).

   
+ Incruste una política insertada en el rol de servicio de Greengrass.

  Si el nombre del bucket no contiene `greengrass`, añada la siguiente política insertada al rol de servicio. Puedes poner en venta varios depósitos. ARNs

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3:GetObject"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket"
              ]
          }
      ]
  }
  ```

------

  Para obtener más información, consulte [Integración de políticas insertadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#embed-inline-policy-console) en la *Guía de usuario de IAM*.

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

Los siguientes requisitos se aplican para crear y utilizar recursos de machine learning:
+ Debes usar AWS IoT Greengrass Core v1.6 o una versión posterior.
+ Las funciones de Lambda definidas por el usuario pueden realizar operaciones `read` o `read and write` en el recurso. Los permisos para otras operaciones no están disponibles. El modo de creación de contenedores de las funciones de Lambda afiliadas determina cómo configura los permisos de acceso. Para obtener más información, consulte [Acceso a recursos de machine learning desde funciones de Lamba](access-ml-resources.md).
+ Debe proporcionar la ruta completa del recurso en el sistema operativo del dispositivo del núcleo.
+ Un nombre o ID de recursos debe tener un máximo de 128 caracteres y utilizar el patrón `[a-zA-Z0-9:_-]+`.

## Entornos de ejecución y bibliotecas para la inferencia de machine learning
<a name="ml-libraries"></a>

Puede utilizar las siguientes bibliotecas y tiempos de ejecución de ML. AWS IoT Greengrass
+  [Tiempo de ejecución de aprendizaje profundo de Amazon SageMaker Neo](#dlc-optimize-info) 
+ Apache MXNet
+ TensorFlow

Estos tiempos de ejecución y bibliotecas se pueden instalar en las plataformas NVIDIA Jetson TX2, Intel Atom y Raspberry Pi. Para obtener información sobre la descarga, consulte [Bibliotecas y entornos de ejecución de aprendizaje automático compatibles](what-is-gg.md#ml-runtimes-libs). Puede instalarlos directamente en el dispositivo central.

Asegúrese de leer la siguiente información sobre la compatibilidad y las limitaciones.

### SageMaker Tiempo de ejecución de aprendizaje profundo de AI Neo
<a name="dlc-optimize-info"></a>

 Puede utilizar el tiempo de ejecución de aprendizaje profundo de SageMaker AI Neo para realizar inferencias con modelos de aprendizaje automático optimizados en sus AWS IoT Greengrass dispositivos. Estos modelos se optimizan con el compilador de aprendizaje profundo SageMaker AI Neo para mejorar las velocidades de predicción de inferencias del aprendizaje automático. Para obtener más información sobre la optimización de modelos en SageMaker IA, consulte la documentación de [SageMaker AI Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html). 

**nota**  
 Actualmente, puede optimizar los modelos de machine learning utilizando el compilador de aprendizaje profundo Neo únicamente en regiones específicas de Amazon Web Services. Sin embargo, puede utilizar el entorno de ejecución de aprendizaje profundo de Neo con modelos optimizados en todos los Región de AWS casos en los que se admita el AWS IoT Greengrass núcleo. Para obtener más información, consulte [cómo configurar la inferencia de machine learning optimizado](ml-dlc-console.md). 

### MXNet control de versiones
<a name="mxnet-version-compatibility"></a>

Actualmente, Apache MXNet no garantiza la compatibilidad con versiones posteriores, por lo que es posible que los modelos que se entrenen con versiones posteriores del marco no funcionen correctamente en las versiones anteriores del marco. Para evitar conflictos entre las etapas de entrenamiento y entrega de modelos, y para proporcionar una end-to-end experiencia coherente, utilice la misma versión del MXNet marco en ambas etapas.

### MXNet en Raspberry Pi
<a name="mxnet-engine-rpi"></a>

Las funciones Lambda de Greengrass que acceden a los MXNet modelos locales deben establecer la siguiente variable de entorno:

```
MXNET_ENGINE_TYPE=NativeEngine
```

Puede definir la variable de entorno en el código de la característica o agregarla a la configuración específica del grupo de la característica. Para ver un ejemplo acerca de cómo agregarla como una opción de configuración, consulte este [paso](ml-console.md#ml-console-config-lambda).

**nota**  
Para un uso general del MXNet marco, como ejecutar un ejemplo de código de terceros, la variable de entorno debe configurarse en la Raspberry Pi.

### TensorFlow limitaciones del servicio de modelos en Raspberry Pi
<a name="tensorflow-limitations"></a>

Las siguientes recomendaciones para mejorar los resultados de las inferencias se basan en nuestras pruebas con las bibliotecas Arm de TensorFlow 32 bits de la plataforma Raspberry Pi. Estas recomendaciones van dirigidas a usuarios avanzados únicamente a modo de referencia, sin garantías de ningún tipo.
+ Los modelos que se entrenan con el formato de [punto de comprobación](https://www.tensorflow.org/guide/checkpoint) deberían "congelarse" en el formato del búfer del protocolo antes de su distribución. Para ver un ejemplo, consulte la biblioteca de modelos de [clasificación de imágenes TensorFlow -Slim](https://github.com/tensorflow/models/tree/master/research/slim).
+ No utilice las bibliotecas TF-Estimator y TF-Slim en el código de inferencia o de entrenamiento. En su lugar, utilice el patrón de archivo de carga de modelos `.pb` que se muestra en el ejemplo siguiente.

  ```
  graph = tf.Graph() 
  graph_def = tf.GraphDef()
  graph_def.ParseFromString(pb_file.read()) 
  with graph.as_default():
    tf.import_graph_def(graph_def)
  ```

**nota**  
Para obtener más información sobre las plataformas compatibles TensorFlow, consulte [Instalación TensorFlow](https://www.tensorflow.org/install/#installing_from_sources) en la TensorFlow documentación.

# Acceso a recursos de machine learning desde funciones de Lamba
<a name="access-ml-resources"></a>

Las funciones Lambda definidas por el usuario pueden acceder a los recursos de aprendizaje automático para ejecutar inferencias locales en el núcleo. AWS IoT Greengrass Un recurso de aprendizaje automático consiste en el modelo entrenado y otros artefactos que se descargan en el dispositivo principal.

Para permitir que una función de Lambda tenga acceso a un recurso de machine learning en el núcleo, debe adjuntar el recurso a la función de Lambda y definir los permisos de acceso. El [modo de creación de contenedores](lambda-group-config.md#lambda-function-containerization) de la función de Lambda asociada (o *adjunta*) determina cómo hacerlo.

## Permisos de acceso para recursos de aprendizaje automático
<a name="ml-resource-permissions"></a>

A partir de la AWS IoT Greengrass versión 1.10.0 de Core, puede definir el propietario de un recurso para un recurso de aprendizaje automático. El propietario del recurso representa el grupo de sistemas operativos y los permisos que se AWS IoT Greengrass utilizan para descargar los artefactos de recursos. Si no se define el propietario de un recurso, los artefactos de recursos descargados sólo son accesibles para raíz.
+ Si las funciones de Lambda que no están en un contenedor acceden a un recurso de machine learning, debe definir un propietario de recurso porque no hay control de permisos desde el contenedor. Las funciones de Lambda que no están en un contenedor pueden heredar permisos de propietario de recursos y utilizarlos para acceder al recurso.

   
+ Si solo las funciones de Lambda en contenedor acceden al recurso, se recomienda utilizar permisos de nivel de función en lugar de definir un propietario de recurso.

   

### Propiedades del propietario del recurso
<a name="ml-resource-owner"></a>

Un propietario de recurso especifica un propietario de grupo y permisos de propietario de grupo.

  
**Propietario del grupo**. El ID del grupo (GID) de un grupo de SO Linux existente en el dispositivo principal. Los permisos del grupo se agregan al proceso de Lambda. En concreto, el GID se añade al grupo suplementario de IDs la función Lambda.  
Si una función de Lambda del grupo Greengrass está configurada para [ejecutarse como](lambda-group-config.md#lambda-access-identity) el mismo grupo de SO que el propietario del recurso para un recurso de machine learning, el recurso debe estar asociado a la función de Lambda. De lo contrario, la implementación fallará porque esta configuración otorga permisos implícitos que la función Lambda puede usar para acceder al recurso AWS IoT Greengrass sin autorización. La comprobación de validación de implementación se omite si la función de Lambda se ejecuta como raíz (UID=0).  
Le recomendamos que utilice un grupo de SO que no sea utilizado por otros recursos, funciones de Lambda o archivos en el núcleo de Greengrass. El uso de un grupo de SO compartido proporciona a las funciones de Lambda asociadas más permisos de acceso de los que necesitan. Si utiliza un grupo de SO compartido, también debe adjuntarse una función de Lambda a todos los recursos de machine learning que utilizan el grupo de SO compartido. De lo contrario, se produce un error en la implementación.

  
**Permisos de propietario del grupo**. El permiso de sólo lectura o lectura y escritura que se agregará al proceso de Lambda.  
Las funciones de Lambda que no están en un contenedor deben heredar estos permisos de acceso al recurso. Las funciones de Lambda en contenedor pueden heredar estos permisos de nivel de recursos o definir permisos de nivel de función. Si definen permisos de nivel de función, los permisos deben ser igual o más restrictivos que los permisos de nivel de recursos.

En la tabla siguiente se muestran las configuraciones de permisos de acceso admitidas.

------
#### [ GGC v1.10 or later ]


| Propiedad | Si solo las funciones de Lambda en contenedor acceden al recurso | Si alguna función de Lambda que no está en un contenedor accede al recurso | 
| --- |--- |--- |
| **Propiedades de nivel de función** | 
| --- |
| Permisos (lectura/escritura) |  Necesario a menos que el recurso defina un propietario de recurso. Si se define un propietario de recurso, los permisos de nivel de función deben ser igual o más restrictivos que los permisos de propietario de recurso. Si solo las funciones de Lambda en contenedor acceden al recurso, se recomienda que no defina un propietario de recurso.  |  **Funciones de Lambda que no están en un contenedor:** No admitido. Las funciones de Lambda que no están en un contenedor deben heredar permisos de nivel de recursos. **Funciones de Lambda en contenedores:** Opcional, pero debe ser igual o más restrictivo que los permisos de nivel de recursos. | 
| **Propiedades de nivel de recursos** | 
| --- |
| Propietario del recurso | Opcional (no recomendado). | Obligatorio. | 
| Permisos (lectura/escritura) | Opcional (no recomendado). | Obligatorio. | 

------
#### [ GGC v1.9 or earlier ]


| Propiedad | Si solo las funciones de Lambda en contenedor acceden al recurso | Si alguna función de Lambda que no está en un contenedor accede al recurso | 
| --- |--- |--- |
| **Propiedades de nivel de función** | 
| --- |
| Permisos (lectura/escritura) |  Obligatorio.  | No admitido. | 
| **Propiedades de nivel de recursos** | 
| --- |
| Propietario del recurso | No admitido. | No admitido. | 
| Permisos (lectura/escritura) | No admitido. | No admitido. | 

------

**nota**  
Cuando se utiliza la AWS IoT Greengrass API para configurar funciones y recursos de Lambda, también se requiere la `ResourceId` propiedad de nivel de función. La propiedad `ResourceId` adjunta el recurso de machine learning a la función de Lambda.

## Definición de permisos de acceso para funciones de Lambda (consola)
<a name="ml-resource-permissions-console"></a>

En la AWS IoT consola, los permisos de acceso se definen al configurar un recurso de aprendizaje automático o al adjuntar uno a una función de Lambda.

**Funciones de Lambda en contenedores**  
Si solo se adjuntan funciones de Lambda en contenedor al recurso de machine learning.  
+ Elija **Ningún grupo de sistemas** como propietario del recurso para el recurso de machine learning. Esta es la configuración recomendada cuando solo las funciones de Lambda en contenedores acceden al recurso de machine learning De lo contrario, podría conceder a las funciones Lambda adjuntas más permisos de acceso de los que necesitan.

   
 

**Funciones de Lambda  no organizadas en contenedores** (requiere GGC v 1.10 o posterior)  
Si se adjunta alguna función de Lambda que no está en un contenedor al recurso de machine learning:  
+ Especifique el **ID de grupo del sistema (GID)** que se va a utilizar como propietario del recurso para el recurso de machine learning. Elija **Especificar grupo de sistemas y permisos** e introduzca el GID. Puede utilizar el comando `getent group` en el dispositivo principal para buscar el ID de un grupo de sistemas.

   
+ Elija **Acceso de solo lectura** o **Acceso de lectura y escritura** para los **permisos del grupo de sistemas**.

## Definición de permisos de acceso para funciones de Lambda (API)
<a name="ml-resource-permissions-api"></a>

En la AWS IoT Greengrass API, se definen los permisos para los recursos de aprendizaje automático en la `ResourceAccessPolicy` propiedad de la función Lambda o en la `OwnerSetting` propiedad del recurso.

**Funciones de Lambda en contenedores**  
Si solo se adjuntan funciones de Lambda en contenedor al recurso de machine learning.  
+ Para las funciones de Lambda en contenedores, defina los permisos de acceso en la propiedad `Permission` de la propiedad `ResourceAccessPolicies`. Por ejemplo:

  ```
  "Functions": [
      {
          "Id": "my-containerized-function",
          "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", 
          "FunctionConfiguration": {
              "Environment": {
                  "ResourceAccessPolicies": [
                      { 
                          "ResourceId": "my-resource-id",
                          "Permission": "ro-or-rw"
                      }
                  ]
              }, 
              "MemorySize": 512, 
              "Pinned": true, 
              "Timeout": 5
          }
      }
  ]
  ```
+ Para los recursos de aprendizaje automático, omita la propiedad `OwnerSetting`. Por ejemplo:

  ```
  "Resources": [
      {
          "Id": "my-resource-id",
          "Name": "my-resource-name",
          "ResourceDataContainer": {
              "S3MachineLearningModelResourceData": {
                  "DestinationPath": "/local-destination-path",
                  "S3Uri": "s3://uri-to-resource-package"
              }
          }
      }
  ]
  ```

  Esta es la configuración recomendada cuando solo las funciones de Lambda en contenedores acceden al recurso de machine learning. De lo contrario, podría conceder a las funciones Lambda adjuntas más permisos de acceso de los que necesitan.
 

**Funciones de Lambda  no organizadas en contenedores** (requiere GGC v 1.10 o posterior)  
Si se adjunta alguna función de Lambda que no está en un contenedor al recurso de machine learning:  
+ Para funciones de Lambda que no están en un contenedor, omita la propiedad `Permission` en `ResourceAccessPolicies`. Esta configuración es necesaria y permite que la función herede el permiso de nivel de recursos. Por ejemplo:

  ```
  "Functions": [
      {
          "Id": "my-non-containerized-function",
          "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", 
          "FunctionConfiguration": {
              "Environment": {
                  "Execution": {
                      "IsolationMode": "NoContainer",
                  },            
                  "ResourceAccessPolicies": [
                      { 
                          "ResourceId": "my-resource-id"
                      }
                  ]
              }, 
              "Pinned": true, 
              "Timeout": 5
          }
      }
  ]
  ```
+ Para las funciones de Lambda en contenedores que también tienen acceso al recurso de machine learning, omita la propiedad `Permission` en `ResourceAccessPolicies` o defina un permiso que sea igual o más restrictivo que el permiso de nivel de recursos. Por ejemplo:

  ```
  "Functions": [
      {
          "Id": "my-containerized-function",
          "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", 
          "FunctionConfiguration": {
              "Environment": {
                  "ResourceAccessPolicies": [
                      { 
                          "ResourceId": "my-resource-id",
                          "Permission": "ro-or-rw" // Optional, but cannot exceed the GroupPermission defined for the resource.
                      }
                  ]
              }, 
              "MemorySize": 512, 
              "Pinned": true, 
              "Timeout": 5
          }
      }
  ]
  ```
+ Para los recursos de aprendizaje automático, defina la propiedad `OwnerSetting`, incluidas las propiedades secundarias `GroupOwner` y `GroupPermission`. Por ejemplo:

  ```
  "Resources": [
      {
          "Id": "my-resource-id",
          "Name": "my-resource-name",
          "ResourceDataContainer": {
              "S3MachineLearningModelResourceData": {
                  "DestinationPath": "/local-destination-path",
                  "S3Uri": "s3://uri-to-resource-package",
                  "OwnerSetting": { 
                      "GroupOwner": "os-group-id",
                      "GroupPermission": "ro-or-rw"
                  }
              }
          }
      }
  ]
  ```

## Acceso a recursos de machine learning desde el código de la función de Lambda
<a name="access-resource-function-code"></a>

Las funciones de Lambda definidas por el usuario utilizan interfaces de SO específicas de la plataforma para acceder a recursos de machine learning en un dispositivo principal.

------
#### [ GGC v1.10 or later ]

Para las funciones de Lambda en contenedor, el recurso se monta dentro del contenedor de Greengrass y está disponible en la ruta de destino local definida para el recurso. Para las funciones de Lambda que no están en un contenedor, el recurso se vincula a un directorio de trabajo específico de Lambda y se pasa a la variable de entorno de `AWS_GG_RESOURCE_PREFIX` en el proceso de Lambda.

Para obtener la ruta de acceso a los artefactos descargados de un recurso de machine learning, las funciones de Lambda anexan la variable de entorno `AWS_GG_RESOURCE_PREFIX` a la ruta de destino local definida para el recurso. Para las funciones de Lambda en contenedor, el valor devuelto es una sola barra diagonal (`/`).

```
resourcePath = os.getenv("AWS_GG_RESOURCE_PREFIX") + "/destination-path"
with open(resourcePath, 'r') as f:
    # load_model(f)
```

------
#### [ GGC v1.9 or earlier ]

Los artefactos descargados de un recurso de aprendizaje automático se encuentran en la ruta de destino local definida para el recurso. Solo las funciones Lambda en contenedores pueden acceder a los recursos de machine learning en AWS IoT Greengrass Core versión 1.9 y versiones anteriores.

```
resourcePath = "/local-destination-path"
with open(resourcePath, 'r') as f:
    # load_model(f)
```

------

Su implementación de carga del modelo depende de su biblioteca ML.

## Resolución de problemas
<a name="access-ml-resources-troubleshooting"></a>

Utilice la siguiente información para solucionar problemas relacionados con el acceso a recursos de aprendizaje automático.

**Topics**
+ [MLModelPropietario no válido: GroupOwnerSetting se proporciona en el recurso del modelo ML, pero GroupOwner o no GroupPermission está presente](#nocontainer-lambda-invalid-ml-model-owner)
+ [NoContainer la función no puede configurar el permiso al adjuntar recursos de Machine Learning. <function-arn>hace referencia a un recurso de aprendizaje automático <resource-id>con permiso <ro/rw> en la política de acceso a los recursos.](#nocontainer-lambda-invalid-resource-access-policy)
+ [<function-arn>La función se refiere a un recurso de Machine Learning al que <resource-id>le falta permiso tanto en uno como ResourceAccessPolicy en el recurso OwnerSetting.](#nocontainer-lambda-missing-access-permission)
+ [<function-arn>La función hace referencia al recurso Machine Learning <resource-id>con el permiso\$1 "rw\$1», mientras que la configuración del propietario del recurso GroupPermission solo permite\$1 "ro\$1».](#container-lambda-invalid-rw-permissions)
+ [NoContainer La función <function-arn>hace referencia a los recursos de la ruta de destino anidada.](#nocontainer-lambda-nested-destination-path)
+ [Lambda <function-arn> obtiene acceso al recurso <resource-id> al compartir el mismo ID de propietario del grupo](#lambda-runas-and-resource-owner)

### MLModelPropietario no válido: GroupOwnerSetting se proporciona en el recurso del modelo ML, pero GroupOwner o no GroupPermission está presente
<a name="nocontainer-lambda-invalid-ml-model-owner"></a>

**Solución:** recibe este error si un recurso de aprendizaje automático contiene el [ResourceDownloadOwnerSetting](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-resourcedownloadownersetting.html)objeto pero la `GroupPermission` propiedad requerida `GroupOwner` o no está definida. Para resolver este problema, defina la propiedad que falta.

 

### NoContainer la función no puede configurar el permiso al adjuntar recursos de Machine Learning. <function-arn>hace referencia a un recurso de aprendizaje automático <resource-id>con permiso <ro/rw> en la política de acceso a los recursos.
<a name="nocontainer-lambda-invalid-resource-access-policy"></a>

**Solución**: recibirá este error si una función de Lambda que no está en un contenedor especifica permisos de nivel de característica para un recurso de machine learning. Las funciones que no están en un contenedor deben heredar permisos de los permisos de propietario de recursos definidos en el recurso de machine learning. Para resolver este problema, elija [heredar permisos de propietario de recursos](#non-container-config-console) (consola) o [quitar los permisos de la política de acceso a recursos (API) de la función de Lambda](#non-container-config-api).

 

### <function-arn>La función se refiere a un recurso de Machine Learning al que <resource-id>le falta permiso tanto en uno como ResourceAccessPolicy en el recurso OwnerSetting.
<a name="nocontainer-lambda-missing-access-permission"></a>

**Solución**: recibirá este error si los permisos para el recurso de machine learning no están configurados para la función de Lambda adjunta o el recurso. Para resolver este problema, configure los permisos en la [ResourceAccessPolicy](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-resourceaccesspolicy.html)propiedad de la función Lambda o en la [OwnerSetting](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-ownersetting.html)propiedad del recurso.

 

### <function-arn>La función hace referencia al recurso Machine Learning <resource-id>con el permiso\$1 "rw\$1», mientras que la configuración del propietario del recurso GroupPermission solo permite\$1 "ro\$1».
<a name="container-lambda-invalid-rw-permissions"></a>

**Solución**: recibirá este error si los permisos de acceso definidos para la función de Lambda adjunta superan los permisos de propietario de recursos definidos para el recurso de machine learning. Para resolver este problema, establezca permisos más restrictivos para la función de Lambda o permisos menos restrictivos para el propietario del recurso.

 

### NoContainer La función <function-arn>hace referencia a los recursos de la ruta de destino anidada.
<a name="nocontainer-lambda-nested-destination-path"></a>

**Solución**: recibirá este error si varios recursos de machine learning conectados a una función de Lambda no contenedora utilizan la misma ruta de destino o una ruta de destino anidada. Para resolver este problema, especifique rutas de destino separadas para los recursos.

 

### Lambda <function-arn> obtiene acceso al recurso <resource-id> al compartir el mismo ID de propietario del grupo
<a name="lambda-runas-and-resource-owner"></a>

**Solución:** recibirá este error `runtime.log` si se especifica el mismo grupo de sistemas operativos como la identidad [Ejecutar como](lambda-group-config.md#lambda-access-identity) de la función de Lambda y el [propietario del recurso](#ml-resource-owner) de machine learning, pero el recurso no está adjunto a la función de Lambda. Esta configuración otorga a la función Lambda permisos implícitos que puede usar para acceder al recurso sin autorización. AWS IoT Greengrass 

Para resolver este problema, utilice un grupo de SO diferente para una de las propiedades o adjunte el recurso de machine learning a la función de Lambda.

## Véase también
<a name="access-ml-resources-see-also"></a>
+ [Cómo realizar la inferencia de machine learning](ml-inference.md)
+ [Cómo configurar la inferencia de aprendizaje automático mediante el Consola de administración de AWS](ml-console.md)
+ [Cómo configurar la inferencia de aprendizaje automático optimizada mediante Consola de administración de AWS](ml-dlc-console.md)
+ [AWS IoT Greengrass Version 1 Referencia de la API](https://docs.aws.amazon.com/greengrass/v1/apireference/api-doc.html)

# Cómo configurar la inferencia de aprendizaje automático mediante el Consola de administración de AWS
<a name="ml-console"></a>

Para seguir los pasos de este tutorial, necesitas AWS IoT Greengrass Core v1.10 o una versión posterior.

Puede realizar la inferencia de machine learning (ML) localmente en un dispositivo central de Greengrass utilizando datos generados localmente. Para obtener información, incluidos los requisitos y las restricciones, consulte [Cómo realizar la inferencia de machine learning](ml-inference.md).

Este tutorial describe cómo usarlo para configurar un grupo de Greengrass Consola de administración de AWS para ejecutar una aplicación de inferencia Lambda que reconozca las imágenes de una cámara de forma local, sin enviar datos a la nube. La aplicación de inferencia accede al módulo de cámara de una Raspberry Pi y ejecuta la inferencia mediante el modelo de código abierto. [SqueezeNet](https://github.com/DeepScale/SqueezeNet)

El tutorial contiene los siguientes pasos generales:

1. [Configuración de Raspberry Pi](#config-raspberry-pi)

1. [Instale el MXNet marco](#install-mxnet)

1. [Creación de un paquete de modelos](#package-ml-model)

1. [Crear y publicar una función de Lambda.](#ml-console-create-lambda)

1. [Añadir la función de Lambda al grupo](#ml-console-config-lambda)

1. [Agregar recursos al grupo](#ml-console-add-resources)

1. [Agregar una suscripción al grupo](#ml-console-add-subscription)

1. [Implementar el grupo](#ml-console-deploy-group)

1. [Probar la aplicación](#ml-console-test-app)

## Requisitos previos
<a name="ml-inference-prerequisites"></a>

Para completar este tutorial, se necesita lo siguiente:
+ Raspberry Pi 4 modelo B o Raspberry Pi 3 modelo B/B\$1, configurados y configurados para su uso con. AWS IoT Greengrass Para configurar su Raspberry Pi con AWS IoT Greengrass, ejecute el script de [configuración del dispositivo Greengrass](quick-start.md) o asegúrese de haber completado el [módulo 1](https://docs.aws.amazon.com/greengrass/latest/developerguide/module1.html) y el [módulo 2](https://docs.aws.amazon.com/greengrass/latest/developerguide/module2.html) de [Empezar con AWS IoT Greengrass](gg-gs.md).
**nota**  
Es posible que la Raspberry Pi requiera una [fuente de alimentación](https://www.raspberrypi.org/documentation/hardware/raspberrypi/power/) de 2,5 A para ejecutar los marcos de aprendizaje profundo que se utilizan normalmente para la clasificación de imágenes. Una fuente de alimentación con una potencia inferior podría provocar el reinicio del dispositivo.
+ [Módulo de cámara Raspberry Pi V2 de 8 megapíxeles, 1080p](https://www.amazon.com/Raspberry-Pi-Camera-Module-Megapixel/dp/B01ER2SKFS). Para obtener información sobre cómo configurar la cámara, consulte [Conectar la cámara](https://www.raspberrypi.org/documentation/usage/camera/) en la documentación de Raspberry Pi. 
+ Un grupo de Greengrass y un núcleo de Greengrass. Para obtener información acerca de cómo crear un núcleo o grupo de Greengrass, consulte [Empezar con AWS IoT Greengrass](gg-gs.md).

**nota**  
Este tutorial utiliza una Raspberry Pi, pero AWS IoT Greengrass es compatible con otras plataformas, como [Intel Atom](#atom-lambda-config) y [NVIDIA](#jetson-lambda-config) Jetson. TX2 En el ejemplo de Jetson TX2, puede utilizar imágenes estáticas en lugar de imágenes transmitidas desde una cámara. Si utilizas el TX2 ejemplo de Jetson, es posible que necesites instalar Python 3.6 en lugar de Python 3.7. Para obtener información sobre cómo configurar el dispositivo para poder instalar el software AWS IoT Greengrass Core, consulte[Configuración de otros dispositivos](setup-filter.other.md).  
Para las plataformas de terceros que AWS IoT Greengrass no son compatibles, debe ejecutar la función Lambda en modo no contenerizado. Para ejecutarla en modo no contenerizado, debe ejecutar la función de Lambda como raíz. Para obtener más información, consulte [Consideraciones a la hora de elegir la creación de contenedores de la función de Lambda.](lambda-group-config.md#lambda-containerization-considerations) y [Configuración de la identidad de acceso predeterminada para las funciones de Lambda de un grupo](lambda-group-config.md#lambda-access-identity-groupsettings).

## Paso 1: Configurar el Raspberry Pi
<a name="config-raspberry-pi"></a>

En este paso, va a instalar actualizaciones del sistema operativo Raspbian, el software del módulo de cámara y las dependencias de Python, y va a habilitar la interfaz de la cámara.

Ejecute los siguientes comandos en el terminal de Raspberry Pi.

1. Instale las actualizaciones en Raspbian.

   ```
   sudo apt-get update
   sudo apt-get dist-upgrade
   ```

1. <a name="install-picamera-step"></a>Instale la interfaz `picamera` del módulo de cámara y las demás bibliotecas de Python que sean necesarias para este tutorial.

   ```
   sudo apt-get install -y python3-dev python3-setuptools python3-pip python3-picamera
   ```

   Valide la instalación:
   + Asegúrese de que la instalación de Python 3.7 incluye pip.

     ```
     python3 -m pip
     ```

     Si pip no está instalado, descárguelo del [sitio web de pip](https://pip.pypa.io/en/stable/installing/) y ejecute el siguiente comando.

     ```
     python3 get-pip.py
     ```
   + Asegúrese de que la versión de Python es 3.7 o superior.

     ```
     python3 --version
     ```

     Si en la salida aparece una versión anterior, ejecute el siguiente comando.

     ```
     sudo apt-get install -y python3.7-dev
     ```
   + Asegúrese de que Setuptools y Picamera se han instalado correctamente.

     ```
     sudo -u ggc_user bash -c 'python3 -c "import setuptools"'
     sudo -u ggc_user bash -c 'python3 -c "import picamera"'
     ```

     Si el resultado no contiene errores, la validación es correcta.
**nota**  
Si el ejecutable de Python instalado en el dispositivo es `python3.7`, utilice `python3.7` en lugar de `python3` con los comandos de este tutorial. Asegúrese de que la instalación de pip corresponde a la versión `python3.7` o `python3` correcta para evitar errores de dependencia.

1. Reinicie el Raspberry Pi.

   ```
   sudo reboot
   ```

1. Abra la herramienta de configuración de Raspberry Pi.

   ```
   sudo raspi-config
   ```

1. Utilice las teclas de flecha para abrir **Interfacing Options** (Opciones de interfaz) y habilitar la interfaz de la cámara. Si se le solicita, permita que el dispositivo se reinicie.

1. Utilice el siguiente comando para probar la configuración de la cámara.

   ```
   raspistill -v -o test.jpg
   ```

   Se abre una ventana de vista previa en el Raspberry Pi, se guarda una imagen denominada `test.jpg` en el directorio actual y se muestra información sobre la cámara en el terminal de Raspberry Pi.

## Paso 2: Instale el marco MXNet
<a name="install-mxnet"></a>

En este paso, instala MXNet las bibliotecas en tu Raspberry Pi.

1. <a name="ssh-rpi-step"></a>Inicie sesión en su Raspberry Pi de forma remota.

   ```
   ssh pi@your-device-ip-address
   ```

1. Abre la MXNet documentación, abre [Instalación MXNet](https://mxnet.apache.org/get_started/?) y sigue las instrucciones para instalarlas MXNet en el dispositivo.
**nota**  
Recomendamos instalar la versión 1.5.0 y compilar MXNet desde el código fuente para este tutorial a fin de evitar conflictos entre dispositivos.

1. Tras la instalación MXNet, valide la siguiente configuración:
   + Asegúrese de que la cuenta `ggc_user` del sistema pueda usar el MXNet marco.

     ```
     sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
     ```
   + Asegúrese de que NumPy está instalado.

     ```
     sudo -u ggc_user bash -c 'python3 -c "import numpy"'
     ```

## Paso 3: Crear un paquete MXNet modelo
<a name="package-ml-model"></a>

En este paso, cree un paquete de modelos que contenga un modelo de muestra previamente entrenado MXNet para cargarlo en Amazon Simple Storage Service (Amazon S3). AWS IoT Greengrass puede utilizar un paquete modelo de Amazon S3, siempre que utilice el formato tar.gz o zip.

1. En su ordenador, descargue el MXNet ejemplo para Raspberry Pi de[Ejemplos de aprendizaje automático](what-is-gg.md#gg-ml-samples).

1.  Descomprima el archivo `mxnet-py3-armv7l.tar.gz` descargado. 

1. Vaya al directorio `squeezenet`.

   ```
   cd path-to-downloaded-sample/mxnet-py3-armv7l/models/squeezenet
   ```

   El archivo `squeezenet.zip` de este directorio es el paquete de modelo. Contiene artefactos de un modelo de código SqueezeNet abierto para un modelo de clasificación de imágenes. Más adelante, cargará este paquete de modelo en Amazon S3.

## Paso 4: Crear y publicar una función de Lambda
<a name="ml-console-create-lambda"></a>

En este paso, va a crear un paquete de implementación de funciones de Lambda y una función de Lambda. A continuación, publicará una versión de la función y creará un alias.

Primero, cree el paquete de implementación de la función de Lambda.

1. En el equipo, desplácese hasta el directorio `examples` del paquete de ejemplo en el que descomprimió [Paso 3: Crear un paquete MXNet modelo](#package-ml-model).

   ```
   cd path-to-downloaded-sample/mxnet-py3-armv7l/examples
   ```

   El directorio `examples` contiene el código de la función y las dependencias.
   + `greengrassObjectClassification.py` es el código de inferencia que se utiliza en este tutorial. Puede usar este código como plantilla para crear su propia función de inferencia.
   + <a name="ml-samples-ggc-sdk"></a>`greengrasssdk` es la versión 1.5.0 del AWS IoT Greengrass Core SDK para Python.
**nota**  <a name="ml-samples-ggc-sdk-upgrade"></a>
Si hay una nueva versión disponible, puede descargarla y actualizar la versión del SDK del paquete de implementación. Para obtener más información, consulte [AWS IoT Greengrass Core SDK for Python](https://github.com/aws/aws-greengrass-core-sdk-python/) on GitHub.

1.  Comprima el contenido del directorio `examples` en un archivo llamado `greengrassObjectClassification.zip`. Este es el paquete de implementación. 

   ```
   zip -r greengrassObjectClassification.zip .
   ```
**nota**  <a name="ml-samples-function-zip"></a>
 Asegúrese de que los archivos `.py` y las dependencias se encuentran en la raíz del directorio. 

    

   Ahora, cree la función de Lambda.

1. En la AWS IoT consola, selecciona **Funciones** y **Crear función**.

1. Elija **Autor desde cero** y utilice los siguientes valores para crear su función:
   + En **Function name** (Nombre de la característica), introduzca **greengrassObjectClassification**.
   + En **Runtime** (Tiempo de ejecución), elija **Python 3.7**.

   En **Permisos**, mantenga la configuración predeterminada. Esto crea un rol de ejecución que otorga permisos Lambda básicos. Esta función no la utiliza AWS IoT Greengrass.

1. Elija **Crear función**.

    

   Ahora, cargue el paquete de implementación de la función de Lambda y registre el controlador.

1. Elija su función de Lambda y cargue su paquete de implementación de funciones de Lambda.

   1. <a name="lambda-console-upload"></a>En la pestaña **Código**, en **Código fuente**, seleccione **Cargar desde**. En el menú desplegable, seleccione un **archivo .zip.**  
![\[La carga del menú desplegable con el archivo .zip resaltado.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. Seleccione **Cargar** y, a continuación, elija su paquete de implementación de `greengrassObjectClassification.zip`. A continuación, elija **Guardar**.

   1. <a name="lambda-console-runtime-settings-para"></a>En la pestaña **Código** de la función, en **Configuración de tiempo de ejecución**, elija **Editar** y, a continuación, introduzca los siguientes valores.
      + En **Runtime** (Tiempo de ejecución), elija **Python 3.7**.
      + En **Handler (Controlador)**, escriba **greengrassObjectClassification.function\$1handler**.

      Seleccione **Save**.

   A continuación, publique la primera versión de la función de Lambda. A continuación, cree un [alias para la versión](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).
**nota**  
Los grupos de Greengrass pueden hacer referencia a una función de Lambda por versión o alias (recomendado). El uso de un alias facilita la gestión de las actualizaciones del código porque no tiene que cambiar la tabla de suscripción o la definición del grupo cuando se actualiza el código de la función. En su lugar, basta con apuntar el alias a la nueva versión de la función.

1. En el menú **Actions**, elija **Publish new version**.  
![\[La opción Publish new version (Publicar nueva versión) del menú Actions (Acciones).\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/ml-inference/lambda-publish-version.png)

1. En **Version description (Descripción de versión)**, escriba **First version** y, a continuación, elija **Publish (Publicar)**.

1. En la página de configuración **greengrassObjectClassification: 1**, en el menú **Acciones**, selecciona **Crear alias**.  
![\[La opción Create alias (Crear alias) en el menú Actions (Acciones).\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/ml-inference/lambda-create-alias.png)

1. En la página **Create a new alias**, utilice los valores siguientes:
   + En **Nombre**, escriba **mlTest**.
   + En **Version (Versión)**, escriba **1**.
**nota**  
AWS IoT Greengrass **no admite los alias de Lambda para las versiones \$1LATEST.**

1. Seleccione **Save**.

    

   Ahora, añada función de Lambda al grupo de Greengrass.

## Paso 5: Adición de la función de Lambda al grupo de Greengrass
<a name="ml-console-config-lambda"></a>

En este paso, va a agregar la función de Lambda al grupo y a configurar su ciclo de vida y las variables de entorno.

Primero, añada la función de Lambda al grupo de Greengrass.

1. En el panel de navegación de la AWS IoT consola, en **Administrar**, expanda **los dispositivos Greengrass** y, a continuación, elija **Grupos (V1)**.

1. En la página de configuración del grupo, seleccione la pestaña **Funciones de Lambda**.

1. En la sección **Mis funciones de Lambda**, seleccione **Añadir**.

1. Para la **función Lambda, elija**. **greengrassObjectClassification**

1. Para la **Versión de la función de Lambda**, elija **Alias:MLTest**.

    

   A continuación, configure el ciclo de vida y las variables de entorno de la función de Lambda.

1. En la sección **Configuración de la función de Lambda**, realice las siguientes actualizaciones.
**nota**  
Le recomendamos que ejecute la función de Lambda sin creación de contenedores, a menos que su modelo de negocio lo requiera. Esto permite el acceso a la GPU y la cámara del dispositivo sin necesidad de configurar los recursos del dispositivo. Si ejecuta sin contenedorización, también debe conceder acceso root a las funciones de Lambda AWS IoT Greengrass . 

   1. **Para ejecutar sin creación de contenedores:**
      + En **Usuario y grupo del sistema**, elija **Another user ID/group ID**. En **ID de usuario del sistema**, introduzca **0**. Para el **ID de grupo del sistema**, introduzca **0**.

        Esto permite que la función de Lambda se ejecute como raíz. Para obtener más información sobre cómo ejecutar como raíz, consulte [Configuración de la identidad de acceso predeterminada para las funciones de Lambda de un grupo](lambda-group-config.md#lambda-access-identity-groupsettings).
**sugerencia**  
También debe actualizar el archivo `config.json` para conceder acceso raíz a la función de Lambda. Para el procedimiento, consulte [Ejecución de una función de Lambda como raíz](lambda-group-config.md#lambda-running-as-root).
      + Para la **Creación de contenedores de la función de Lambda**, elija **Sin contenedor**.

        Para obtener más información sobre la ejecución sin creación de contenedores, consulte [Consideraciones a la hora de elegir la creación de contenedores de la función de Lambda.](lambda-group-config.md#lambda-containerization-considerations).
      + En **Tiempo de espera**, escriba **10 seconds**.
      + En **Ancladas**, elija **Verdadero** 

        Para obtener más información, consulte [Configuración del ciclo de vida de las funciones de Lambda de Greengrass](lambda-functions.md#lambda-lifecycle).

   1.  **Para ejecutarlo en modo contenerizado, en su lugar:** 
**nota**  
No recomendamos ejecutarlo en modo contenerizado a menos que su modelo de negocio lo requiera.
      + En **Usuario y grupo del sistema**, seleccione **Usar grupo predeterminado**.
      + Para la **Creación de contenedores de funciones de Lambda**, elija **Usar grupo por defecto**.
      + En **Límite de memoria**, escriba **96 MB**.
      + En **Tiempo de espera**, escriba **10 seconds**.
      + En **Ancladas**, elija **Verdadero** 

        Para obtener más información, consulte [Configuración del ciclo de vida de las funciones de Lambda de Greengrass](lambda-functions.md#lambda-lifecycle).

1. En **Variables de entorno**, cree un par clave-valor. Las funciones que interactúan con los MXNet modelos de una Raspberry Pi requieren un par clave-valor.

   Como clave, utilice MXNET\$1ENGINE\$1TYPE. Para el valor, utilice. NaiveEngine 
**nota**  
En sus propias funciones de Lambda definidas por el usuario, si lo desea, puede establecer la variable de entorno en el código de la función.

1. Mantenga los valores predeterminados para todas las demás propiedades y elija **Agregar función de Lambda**.

## Paso 6: Agregar recursos al grupo de Greengrass
<a name="ml-console-add-resources"></a>

En este paso, va a crear recursos para el módulo de cámara y el modelo de inferencia de ML, y a asociar los recursos con la función de Lambda. De este modo, la función de Lambda podrá acceder a los recursos del dispositivo del núcleo.

**nota**  
Si se ejecuta en modo no contenerizado, AWS IoT Greengrass puede acceder a la GPU y a la cámara del dispositivo sin necesidad de configurar los recursos de este dispositivo. 

En primer lugar, cree dos recursos de dispositivos locales para la cámara: uno para la memoria compartida y otro para la interfaz del dispositivo. Para obtener más información sobre el acceso a los recursos locales, consulte [Acceder a recursos locales con conectores y funciones de Lambda](access-local-resources.md).

1. En la página de configuración del grupo, elija la pestaña **Recursos**.

1. En la sección **Recursos locales**, elija **Añadir recurso local**.

1. En la página **Añadir un recurso local**, utilice los siguientes valores:
   + En **Nombre del recurso**, escriba **videoCoreSharedMemory**.
   + En **Tipo de recurso**, elija **Dispositivo**.
   + En **Ruta del dispositivo local**, escriba **/dev/vcsm**.

     La ruta del dispositivo es la ruta local completa del recurso del dispositivo. Esta ruta solo puede hacer referencia a un dispositivo de carácter o un dispositivo de bloques situado bajo `/dev`.
   + En **Propietario del grupo del sistema y permisos de acceso a archivos**, seleccione **Añadir automáticamente permisos del sistema de archivos del grupo del sistema propietario del recurso**.

     La opción **Permisos de acceso a los archivos del propietario del grupo** le permite conceder al proceso de Lambda permisos de acceso a archivos adicionales. Para obtener más información, consulte [Group owner file access permission (Permiso de acceso a los archivos del propietario del grupo)](access-local-resources.md#lra-group-owner).

1. A continuación, añada un recurso de dispositivo local para la interfaz de la cámara.

1. Seleccione **Añadir recurso local**.

1. En la página **Añadir un recurso local**, utilice los siguientes valores:
   + En **Nombre del recurso**, escriba **videoCoreInterface**.
   + En **Tipo de recurso**, elija **Dispositivo**.
   + En **Ruta del dispositivo local**, escriba **/dev/vchiq**.
   + En **Propietario del grupo del sistema y permisos de acceso a archivos**, seleccione **Añadir automáticamente permisos del sistema de archivos del grupo del sistema propietario del recurso**. 

1. En la parte inferior de la página, elija **Añadir recurso**.

 

Ahora, añada el modelo de inferencia como recurso de machine learning. Este paso incluye cargar el paquete de modelo de `squeezenet.zip` en Amazon S3.

1. En la pestaña **Recursos** de su grupo, en la sección **Machine learning**, seleccione **Añadir recurso de machine learning**.

1. En la página **Añadir un recurso de machine learning**, en **Nombre del recurso**, escriba **squeezenet\$1model**.

1. En **Origen del modelo**, elija **Usar un modelo almacenado en S3, como un modelo optimizado mediante el Compilador de Aprendizaje Profundo**.

1. Para el **URI de S3**, introduzca una ruta en la que se guarde el bucket de S3. 

1.  Elija **Examinar S3**. Esto abre una nueva pestaña en la consola de Amazon S3. 

1.  En la pestaña de la consola de Amazon S3 cargue su archivo `squeezenet.zip` en un bucket de Amazon S3. Para obtener información, consulte [¿Cómo puedo cargar archivos y carpetas en un bucket de S3?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) en la *Guía del usuario de Amazon Simple Storage Service*. 
**nota**  
Para que se pueda acceder al bucket de S3, el nombre del bucket debe contener la cadena **greengrass** y el bucket debe estar en la misma región en la que usted utiliza AWS IoT Greengrass. Elija un nombre único (como **greengrass-bucket-*user-id*-*epoch-time***). No utilice un punto (`.`) en el nombre del bucket. 

1. En la pestaña de la AWS IoT Greengrass consola, busca y elige tu bucket de S3. Localice y cargue el archivo `squeezenet.zip` y elija **Select (Seleccionar)**. Es posible que tenga que elegir **Refresh (Actualizar)** para actualizar la lista de buckets y archivos disponibles. 

1. En **Destination path (Ruta de destino)**, escriba **/greengrass-machine-learning/mxnet/squeezenet**.

   Este es el destino para el modelo local en el espacio de nombres del tiempo de ejecución de Lambda. Al implementar el grupo, AWS IoT Greengrass recupera el paquete del modelo fuente y, a continuación, extrae el contenido al directorio especificado. La función de Lambda de ejemplo de este tutorial ya está configurada para utilizar esta ruta (en la variable `model_path`).

1. En **Propietario del grupo del sistema y permisos de acceso a archivos**, seleccione **Sin grupo del sistema**.

1. Seleccione **Add resource** (Añadir recurso).

### Uso de modelos entrenados por SageMaker IA
<a name="sm-models"></a>

En este tutorial se utiliza un modelo que está almacenado en Amazon S3, pero también se pueden utilizar fácilmente modelos de SageMaker IA. La AWS IoT Greengrass consola cuenta con una integración de SageMaker IA integrada, por lo que no es necesario cargar estos modelos manualmente en Amazon S3. Para conocer los requisitos y limitaciones del uso de modelos de SageMaker IA, consulte[Orígenes de modelos admitidos](ml-inference.md#supported-model-sources).

Para usar un modelo de SageMaker IA:
+ En **Fuente del modelo**, selecciona **Usar un modelo entrenado en AWS SageMaker IA** y, a continuación, elige el nombre del trabajo de entrenamiento del modelo.
+ Para **ruta de destino**, introduzca la ruta al directorio donde su función de Lambda busca el modelo.

## Paso 7: Agregar una suscripción al grupo de Greengrass
<a name="ml-console-add-subscription"></a>

En este paso, va a agregar una suscripción al grupo. Esta suscripción permite a la función Lambda enviar los resultados de las predicciones AWS IoT publicándolos en un tema de MQTT.

1. En la página de configuración del grupo, elija la pestaña **Suscripciones** y, a continuación, elija **Añadir suscripción**.

1. En la página **Detalles de la suscripción**, configure el origen y el destino de la siguiente manera:

   1. En **Tipo de fuente**, elija **Función Lambda** y, a continuación, elija. **greengrassObjectClassification**

   1. En **Tipo de destino**, elija **Servicio** y, a continuación, **Nube de IoT**.

1. En **Filtro por temas**, introduzca **hello/world** y, a continuación, seleccione **Crear suscripción.**

## Paso 8: Implementar el grupo de Greengrass
<a name="ml-console-deploy-group"></a>

En este paso, va a implementar la versión actual de la definición del grupo en el dispositivo del núcleo de Greengrass. La definición contiene la función de Lambda, los recursos y las configuraciones de suscripciones que ha añadido.

1. Asegúrese de que el AWS IoT Greengrass núcleo esté funcionando. Ejecute los siguientes comandos en el terminal de Raspberry Pi según sea necesario.

   1. Para comprobar si el daemon está en ejecución:

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      Si la salida contiene una entrada `root` para `/greengrass/ggc/packages/1.11.6/bin/daemon`, el daemon está en ejecución.
**nota**  
La versión de la ruta depende de la versión del software AWS IoT Greengrass principal que esté instalada en el dispositivo principal.

   1. Inicio de daemon:

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. En la página de configuración de grupo, elija **Implementar**.  
![\[La página del grupo con las opciones Deployments (Implementaciones) y and Deploy (Implementar) resaltadas.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/console-group-deployments-deploy.png)

1. En la pestaña **Funciones de Lambda**, en la sección **Funciones de Lambda del sistema**, seleccione **Detector IP** y elija **Editar.**

1. En el cuadro de diálogo **Editar configuración del detector IP**, seleccione **Detectar y anular automáticamente los puntos de conexión del agente MQTT**.

1. Seleccione **Save**.

   Esto permite a los dispositivos adquirir automáticamente la información de conexión del dispositivo principal, como la dirección IP, el DNS y el número de puerto. Se recomienda la detección automática, pero AWS IoT Greengrass también es compatible con los puntos finales especificados manualmente. Solo se le solicitará el método de detección la primera vez que se implemente el grupo.
**nota**  
Si se le solicita, conceda permiso para crear el [rol de servicio de Greengrass](service-role.md) y asócielo al suyo Cuenta de AWS en el actual. Región de AWS Este rol le permite acceder AWS IoT Greengrass a sus recursos en los AWS servicios.

   En la página **Deployments** (Implementaciones), se muestra la marca temporal, el ID de versión y el estado de la implementación. Una vez terminada, la implementación debería mostrar el estado **Completado**.

   Para obtener más información sobre las implementaciones, consulte [Implemente AWS IoT Greengrass grupos en un AWS IoT Greengrass núcleo](deployments.md). Para obtener ayuda sobre la resolución de problemas, consulte [Solución de problemas AWS IoT Greengrass](gg-troubleshooting.md).

## Paso 9: Probar la aplicación de inferencias
<a name="ml-console-test-app"></a>

Ahora puede verificar si la implementación se ha configurado correctamente. Para ello, suscríbase al tema `hello/world` y vea los resultados de la predicción que publica la función de Lambda.

**nota**  
Si se conecta un monitor al Raspberry Pi, la imagen en directo de la cámara se muestra en una ventana de vista previa.

1. En la AWS IoT consola, en **Prueba**, elija el **cliente de prueba MQTT**.

1. En **Subscriptions** (Suscripciones), utilice los siguientes valores:
   + Como tema de la suscripción, utilice hello/world.
   + En **Configuración adicional**, para la **Visualización de la carga útil MQTT**, seleccione **Visualizar las cargas útiles como cadenas**.

1. Elija **Subscribe**.

   Si la prueba se realiza correctamente, los mensajes de la función de Lambda aparecen en la parte inferior de la página. Cada mensaje contiene los cinco primeros resultados de predicción de la imagen, con este formato: probabilidad, ID de la clase predicha y nombre de la clase correspondiente.  
![\[La página Subscriptions (Suscripciones) con los resultados de la prueba y los datos de los mensajes.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/ml-inference/prediction-results.png)

### Solución de problemas de AWS IoT Greengrass inferencia ML
<a name="ml-inference-troubleshooting"></a>

Si la prueba no se realiza correctamente, puede seguir estos pasos de solución de problemas. Ejecute los comandos en el terminal de Raspberry Pi.

#### Comprobación de los registros de error
<a name="troubleshooting-check-logs"></a>

1. <a name="root-access-logs"></a>Cambie al usuario raíz y vaya al directorio `log`. El acceso a AWS IoT Greengrass los registros requiere permisos de root.

   ```
   sudo su
   cd /greengrass/ggc/var/log
   ```

1. En el directorio de `system`, marque `runtime.log` o `python_runtime.log`.

   En el directorio de `user/region/account-id`, marque `greengrassObjectClassification.log`.

   Para obtener más información, consulte [Solución de problemas con los registros](gg-troubleshooting.md#troubleshooting-logs).

##### Error de "desempaquetado" en runtime.log
<a name="troubleshooting-targz-unpacking"></a>

Si `runtime.log` contiene un error similar al siguiente, asegúrese de que el archivo `tar.gz` del paquete del modelo de origen tiene un directorio principal.

```
Greengrass deployment error: unable to download the artifact model-arn: Error while processing. 
Error while unpacking the file from /tmp/greengrass/artifacts/model-arn/path to /greengrass/ggc/deployment/path/model-arn,
error: open /greengrass/ggc/deployment/path/model-arn/squeezenet/squeezenet_v1.1-0000.params: no such file or directory
```

Si el paquete no tiene un directorio principal con los archivos del modelo, utilice el comando siguiente para volver a comprimir el modelo:

```
tar -zcvf model.tar.gz ./model
```

Por ejemplo:

```
─$ tar -zcvf test.tar.gz ./test
./test
./test/some.file
./test/some.file2
./test/some.file3
```

**nota**  
No incluya caracteres `/*` en este comando.

 

#### Compruebe que la función de Lambda se ha implementado correctamente
<a name="troubleshooting-check-lambda"></a>

1. Muestre el contenido de la Lambda implementada en el directorio de `/lambda`. Reemplace los valores de los marcadores de posición antes de ejecutar el comando .

   ```
   cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version
   ls -la
   ```

1. Compruebe que el directorio contiene el mismo contenido que el paquete de implementación `greengrassObjectClassification.zip` que cargó en el [Paso 4: Crear y publicar una función de Lambda](#ml-console-create-lambda).

   Asegúrese también de que los archivos `.py` y las dependencias se encuentran en la raíz del directorio.

 

#### Compruebe que el modelo de inferencia se ha implementado correctamente
<a name="troubleshooting-check-model"></a>

1. Busque el número de identificación de proceso (PID) del proceso de tiempo de ejecución de Lambda:

   ```
   ps aux | grep 'lambda-function-name*'
   ```

   En el resultado, el PID aparece en la segunda columna de la línea correspondiente al proceso de tiempo de ejecución de Lambda.

1. Entre en el espacio de nombres del tiempo de ejecución de Lambda. Asegúrese de reemplazar el *pid* valor del marcador de posición antes de ejecutar el comando.
**nota**  
Este directorio y su contenido se encuentran en el espacio de nombres del tiempo de ejecución de Lambda, por lo que no son visibles en un espacio de nombres de Linux normal.

   ```
   sudo nsenter -t pid -m /bin/bash
   ```

1. Muestre el contenido del directorio local que ha especificado para el recurso de machine learning.

   ```
   cd /greengrass-machine-learning/mxnet/squeezenet/
   ls -ls
   ```

   Debería ver los siguientes archivos:

   ```
   32 -rw-r--r-- 1 ggc_user ggc_group   31675 Nov 18 15:19 synset.txt
   32 -rw-r--r-- 1 ggc_user ggc_group   28707 Nov 18 15:19 squeezenet_v1.1-symbol.json
   4832 -rw-r--r-- 1 ggc_user ggc_group 4945062 Nov 18 15:19 squeezenet_v1.1-0000.params
   ```

## Siguientes pasos
<a name="next-steps"></a>

A continuación, explore otras aplicaciones de inferencia. AWS IoT Greengrass proporciona otras funciones de Lambda que puede utilizar para probar la inferencia local. Puede encontrar el paquete con los ejemplos en la carpeta de bibliotecas precompiladas que descargó en el [Paso 2: Instale el marco MXNet](#install-mxnet).

## Configuración de Intel Atom
<a name="atom-lambda-config"></a>

 Para ejecutar este tutorial en un dispositivo Intel Atom, debe proporcionar imágenes de origen, configurar la función de Lambda y agregar otro recurso del dispositivo local. Para utilizar la GPU como inferencia, compruebe que el siguiente software está instalado en el dispositivo:
+ OpenCL versión 1.0 o posterior
+ Python 3.7 y pip
**nota**  
Si el dispositivo se ha precompilado con Python 3.6, puede crear un symlink a Python 3.7, en su lugar. Para obtener más información, consulte [Step 2](#python-symlink).
+ [NumPy](https://pypi.org/project/numpy/)
+ [OpenCV en Wheels](https://pypi.org/project/opencv-python/)

1. Descargue imágenes PNG o JPG estáticas para la función de Lambda que se va a utilizar para la clasificación de imágenes. El ejemplo funciona mejor con archivos de imágenes pequeños. 

   Guarde los archivos de imágenes en el directorio que contiene el archivo `greengrassObjectClassification.py` (o en un subdirectorio de este directorio). Se encuentra en el paquete de implementación de la función de Lambda que cargó en [Paso 4: Crear y publicar una función de Lambda](#ml-console-create-lambda).
**nota**  
 Si las utiliza AWS DeepLens, puede utilizar la cámara integrada o montar su propia cámara para realizar inferencias a partir de imágenes capturadas en lugar de imágenes estáticas. Sin embargo, le recomendamos encarecidamente que empiece primero con imágenes estáticas.   
Si utiliza una cámara, asegúrese de que el paquete `awscam` de APT esté instalado y actualizado. Para obtener más información, consulte [Actualización del dispositivo AWS DeepLens](https://docs.aws.amazon.com/deeplens/latest/dg/deeplens-manual-updates.html) en la *Guía para desarrolladores de AWS DeepLens *.

1. <a name="python-symlink"></a>Si no está utilizando Python 3.7, asegúrese de crear un enlace simbólico de Python 3.x a Python 3.7. Esto configura el dispositivo para usar Python 3 con AWS IoT Greengrass. Ejecute el siguiente comando para localizar la instalación de Python:

   ```
   which python3
   ```

   Ejecute el siguiente comando para crear el symlink:

   ```
   sudo ln -s path-to-python-3.x/python3.x path-to-python-3.7/python3.7
   ```

   Reinicie el dispositivo.

1. Edite la configuración de la función de Lambda. Siga el procedimiento indicado en [Paso 5: Adición de la función de Lambda al grupo de Greengrass](#ml-console-config-lambda). 
**nota**  
 Le recomendamos que ejecute la función de Lambda sin creación de contenedores, a menos que su modelo de negocio lo requiera. Esto permite el acceso a la GPU y la cámara del dispositivo sin necesidad de configurar los recursos del dispositivo. Si ejecuta sin contenedorización, también debe conceder acceso root a las funciones de Lambda AWS IoT Greengrass . 

   1. **Para ejecutar sin creación de contenedores:**
      + En **Usuario y grupo del sistema**, elija **Another user ID/group ID**. En **ID de usuario del sistema**, introduzca **0**. Para el **ID de grupo del sistema**, introduzca **0**.

        Esto permite que la función de Lambda se ejecute como raíz. Para obtener más información sobre cómo ejecutar como raíz, consulte [Configuración de la identidad de acceso predeterminada para las funciones de Lambda de un grupo](lambda-group-config.md#lambda-access-identity-groupsettings).
**sugerencia**  
También debe actualizar el archivo `config.json` para conceder acceso raíz a la función de Lambda. Para informarse sobre este procedimiento, consulte [Ejecución de una función de Lambda como raíz](lambda-group-config.md#lambda-running-as-root).
      + Para la **creación de contenedores de la función de Lambda**, elija **Sin contenedor**.

        Para obtener más información sobre la ejecución sin creación de contenedores, consulte [Consideraciones a la hora de elegir la creación de contenedores de la función de Lambda.](lambda-group-config.md#lambda-containerization-considerations).
      + Actualice el valor de **Tiempo de espera** a 5 segundos. De este modo, se asegurará de que la solicitud no supere el tiempo de inactividad demasiado pronto. La configuración tarda unos minutos en ejecutar la inferencia.
      + En **Anclados**, elija **Verdadero**.
      + En **Parámetros adicionales**, para **Acceso de lectura al directorio /sys**, elija **Activado**. 
      +  Para **Lambda lifecycle (Ciclo de vida de Lambda)**, elija **Make this function long-lived and keep it running indefinitely (Prolongar la vida útil de esta función y mantenerla en ejecución indefinidamente)**. 

   1.  **Para ejecutarlo en modo contenerizado, en su lugar:** 
**nota**  
No recomendamos ejecutarlo en modo contenerizado a menos que su modelo de negocio lo requiera.
      + Actualice el valor de **Tiempo de espera** a 5 segundos. De este modo, se asegurará de que la solicitud no supere el tiempo de inactividad demasiado pronto. La configuración tarda unos minutos en ejecutar la inferencia.
      +  En **Ancladas**, elija **Verdadero** 
      + En **Parámetros adicionales**, para **Acceso de lectura al directorio /sys**, elija **Activado**. 

1. **Si se ejecuta en modo contenerizado**, añada el recurso de dispositivo local necesario para conceder acceso a su GPU de dispositivo.
**nota**  
Si se ejecuta en modo no contenerizado, AWS IoT Greengrass podrá acceder a la GPU del dispositivo sin necesidad de configurar los recursos del dispositivo. 

   1. En la página de configuración del grupo, elija la pestaña **Recursos**.

   1. Seleccione **Añadir recurso local**.

   1. Defina el recurso:
      + En **Nombre del recurso**, escriba **renderD128**.
      + En **Tipo de recurso**, elija **Dispositivo local**.
      + En **Device path** (Ruta del dispositivo), escriba **/dev/dri/renderD128**.
      + En **Propietario del grupo del sistema y permisos de acceso a archivos**, seleccione **Añadir automáticamente permisos del sistema de archivos del grupo del sistema propietario del recurso**.
      + En **Afiliaciones de funciones de Lambda**, conceda **Acceso de lectura y escritura** a la función de Lambda.

## Configuración de una NVIDIA Jetson TX2
<a name="jetson-lambda-config"></a>

Para ejecutar este tutorial en una impresora Jetson de NVIDIA TX2, proporcione las imágenes de origen y configure la función Lambda. Si está utilizando la GPU, también debe agregar recursos de dispositivos locales.

1.  Asegúrese de que su dispositivo Jetson esté configurado para poder instalar el AWS IoT Greengrass software Core. Para obtener más información sobre la configuración del proyecto, consulte [Configuración de otros dispositivos](setup-filter.other.md). 

1. Abre la MXNet documentación, ve a [Instalación MXNet en un dispositivo Jetson](https://mxnet.apache.org/get_started/jetson_setup) y sigue las instrucciones para instalarlo MXNet en el dispositivo Jetson.
**nota**  
 Si quieres compilar MXNet desde el código fuente, sigue las instrucciones para crear la biblioteca compartida. Edita la siguiente configuración del `config.mk` archivo para que funcione con un TX2 dispositivo Jetson:   
Agréguela `-gencode arch=compute-62, code=sm_62` a la opción `CUDA_ARCH`.
Active CUDA.  

     ```
     USE_CUDA = 1
     ```

1. Descargue imágenes PNG o JPG estáticas para la función de Lambda que se va a utilizar para la clasificación de imágenes. La aplicación funciona mejor con archivos de imágenes pequeños. Si lo prefiere, puede instrumentar una cámara en la placa Jetson para capturar las imágenes de origen.

   Guarde los archivos de la imagen en la carpeta que contiene el archivo `greengrassObjectClassification.py`. También puede guardarlos en un subdirectorio de esta carpeta. Este directorio está en el paquete de implementación de funciones de Lambda que ha cargado en [Paso 4: Crear y publicar una función de Lambda](#ml-console-create-lambda).

1. Cree un enlace simbólico de Python 3.7 a Python 3.6 para usar Python 3 con AWS IoT Greengrass. Ejecute el siguiente comando para localizar la instalación de Python:

   ```
   which python3
   ```

   Ejecute el siguiente comando para crear el symlink:

   ```
   sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7
   ```

   Reinicie el dispositivo.

1. Asegúrese de que la cuenta `ggc_user` del sistema pueda usar el MXNet marco:

   ```
   “sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
   ```

1. Edite la configuración de la función de Lambda. Siga el procedimiento indicado en [Paso 5: Adición de la función de Lambda al grupo de Greengrass](#ml-console-config-lambda).
**nota**  
 Le recomendamos que ejecute la función de Lambda sin creación de contenedores, a menos que su modelo de negocio lo requiera. Esto permite el acceso a la GPU y la cámara del dispositivo sin necesidad de configurar los recursos del dispositivo. Si ejecuta sin contenedorización, también debe conceder acceso root a las funciones de Lambda AWS IoT Greengrass . 

   1. **Para ejecutar sin creación de contenedores:**
      + En **Usuario y grupo del sistema**, elija **Another user ID/group ID**. En **ID de usuario del sistema**, introduzca **0**. Para el **ID de grupo del sistema**, introduzca **0**.

        Esto permite que la función de Lambda se ejecute como raíz. Para obtener más información sobre cómo ejecutar como raíz, consulte [Configuración de la identidad de acceso predeterminada para las funciones de Lambda de un grupo](lambda-group-config.md#lambda-access-identity-groupsettings).
**sugerencia**  
También debe actualizar el archivo `config.json` para conceder acceso raíz a la función de Lambda. Para el procedimiento, consulte [Ejecución de una función de Lambda como raíz](lambda-group-config.md#lambda-running-as-root).
      + Para la **Creación de contenedores de la función de Lambda**, elija **Sin contenedor**.

        Para obtener más información sobre la ejecución sin creación de contenedores, consulte [Consideraciones a la hora de elegir la creación de contenedores de la función de Lambda.](lambda-group-config.md#lambda-containerization-considerations).
      + En **Parámetros adicionales**, para **Acceso de lectura al directorio /sys**, elija **Activado**. 
      +  En **Variables de entorno**, añada los siguientes pares clave-valor a su función de Lambda. Esto se configura para usar el marco AWS IoT Greengrass . MXNet     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/ml-console.html)

   1.  **Para ejecutarlo en modo contenerizado, en su lugar:** 
**nota**  
No recomendamos ejecutarlo en modo contenerizado a menos que su modelo de negocio lo requiera.
      + Aumente el valor de **Memory limit (Límite de memoria)**. Utilice 500 MB para la CPU o, como mínimo, 2000 MB para la GPU. 
      + En **Parámetros adicionales**, para **Acceso de lectura al directorio /sys**, elija **Activado**. 
      +  En **Variables de entorno**, añada los siguientes pares clave-valor a su función de Lambda. Esto se configura AWS IoT Greengrass para usar el MXNet marco.     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/ml-console.html)

1. **Si se ejecuta en modo contenerizado**, añada los recursos de dispositivo local siguientes para conceder acceso a su GPU de dispositivo. Siga el procedimiento indicado en [Paso 6: Agregar recursos al grupo de Greengrass](#ml-console-add-resources).
**nota**  
 Si se ejecuta en modo no contenerizado, AWS IoT Greengrass puede acceder a la GPU de su dispositivo sin configurar los recursos del dispositivo. 

   Para cada recurso:
   + En **Tipo de recurso**, elija **Dispositivo**.
   + En **Propietario del grupo del sistema y permisos de acceso a archivos**, seleccione **Añadir automáticamente permisos del sistema de archivos del grupo del sistema propietario del recurso**.

          
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/ml-console.html)

1. **Si se ejecuta en modo contenerizado**, añada el siguiente recurso de volumen local para conceder acceso a la cámara de su dispositivo. Siga el procedimiento indicado en [Paso 6: Agregar recursos al grupo de Greengrass](#ml-console-add-resources).
**nota**  
 Si lo ejecuta en modo no contenerizado, AWS IoT Greengrass puede acceder a la cámara de su dispositivo sin configurar los recursos de volumen. 
   + En **Resource type (Tipo de recurso)**, elija **Device (Dispositivo)**.
   + En **Propietario del grupo del sistema y permisos de acceso a archivos**, seleccione **Añadir automáticamente permisos del sistema de archivos del grupo del sistema propietario del recurso**.

          
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/ml-console.html)

# Cómo configurar la inferencia de aprendizaje automático optimizada mediante Consola de administración de AWS
<a name="ml-dlc-console"></a>

Para seguir los pasos de este tutorial, debe utilizar AWS IoT Greengrass Core v1.10 o una versión posterior.

Puedes usar el compilador de aprendizaje profundo SageMaker AI Neo para optimizar la eficiencia de la predicción de los modelos de inferencia nativos de aprendizaje automático en Tensorflow, Apache MXNet, ONNX y los XGBoost marcos, con el fin de reducir el tamaño y aumentar el rendimiento. PyTorch A continuación, puede descargar el modelo optimizado e instalar el entorno de ejecución de aprendizaje profundo SageMaker AI Neo e implementarlo en sus AWS IoT Greengrass dispositivos para obtener inferencias más rápidas. 

En este tutorial se describe cómo utilizar el Consola de administración de AWS para configurar un grupo de Greengrass para ejecutar un ejemplo de inferencia Lambda que reconozca las imágenes de una cámara de forma local, sin enviar datos a la nube. El ejemplo de inferencia obtiene acceso al módulo de cámara en un Raspberry Pi. En este tutorial, se descargará un modelo preempaquetado entrenado por Resnet-50 y optimizado en el compilador de aprendizaje profundo Neo. A continuación, utilice el modelo para realizar la clasificación local de imágenes en su dispositivo. AWS IoT Greengrass 

El tutorial contiene los siguientes pasos generales:

1. [Configuración de Raspberry Pi](#config-raspberry-pi-dlc)

1. [Instalar el entorno de ejecución de aprendizaje profundo de Neo](#install-dlr)

1. [Crear una función de Lambda de inferencia.](#ml-console-dlc-create-lambda)

1. [Añadir la función de Lambda al grupo](#ml-console-dlc-config-lambda)

1. [Agregar al grupo un recurso del modelo optimizado para Neo](#ml-console-dlc-add-resources)

1. [Agregar un recurso de dispositivo de cámara al grupo](#ml-console-dlc-add-cam-resource)

1. [Agregar suscripciones al grupo](#ml-console-dlc-add-subscription)

1. [Implementar el grupo](#ml-console-dlc-deploy-group)

1. [Prueba del ejemplo](#ml-console-dlc-test-app)

## Requisitos previos
<a name="ml-inference-prerequisites"></a>

 Para completar este tutorial, se necesita lo siguiente: 
+  Raspberry Pi 4 Modelo B o Raspberry Pi 3 Modelo B/B\$1, configurados y configurados para su uso con. AWS IoT Greengrass Para configurar su Raspberry Pi con AWS IoT Greengrass, ejecute el script de [configuración del dispositivo Greengrass](quick-start.md) o asegúrese de haber completado el [módulo 1](https://docs.aws.amazon.com/greengrass/latest/developerguide/module1.html) y el [módulo 2](https://docs.aws.amazon.com/greengrass/latest/developerguide/module2.html) de [Empezar con AWS IoT Greengrass](gg-gs.md). 
**nota**  
Es posible que la Raspberry Pi requiera una [fuente de alimentación](https://www.raspberrypi.org/documentation/hardware/raspberrypi/power/) de 2,5 A para ejecutar los marcos de aprendizaje profundo que se utilizan normalmente para la clasificación de imágenes. Una fuente de alimentación con una potencia inferior podría provocar el reinicio del dispositivo.
+  [Módulo de cámara Raspberry Pi V2 de 8 megapíxeles, 1080p](https://www.amazon.com/Raspberry-Pi-Camera-Module-Megapixel/dp/B01ER2SKFS). Para obtener información sobre cómo configurar la cámara, consulte [Connecting the camera](https://www.raspberrypi.org/documentation/usage/camera/) en la documentación de Raspberry Pi. 
+  Un grupo de Greengrass y un núcleo de Greengrass. Para obtener información sobre cómo crear un grupo o dispositivo del núcleo de Greengrass, consulte [Empezar con AWS IoT Greengrass](gg-gs.md). 

**nota**  
 Este tutorial utiliza una Raspberry Pi, pero AWS IoT Greengrass es compatible con otras plataformas, como [Intel Atom](#atom-lambda-dlc-config) y [NVIDIA](#jetson-lambda-dlc-config) Jetson. TX2 Si utiliza el ejemplo de Intel Atom, es posible que necesite instalar Python 3.6 en lugar de Python 3.7. Para obtener información sobre cómo configurar el dispositivo para poder instalar el software AWS IoT Greengrass Core, consulte[Configuración de otros dispositivos](setup-filter.other.md).   
Para las plataformas de terceros que AWS IoT Greengrass no son compatibles, debe ejecutar la función Lambda en modo no contenerizado. Para ejecutarla en modo no contenerizado, debe ejecutar la función de Lambda como raíz. Para obtener más información, consulte [Consideraciones a la hora de elegir la creación de contenedores de la función de Lambda.](lambda-group-config.md#lambda-containerization-considerations) y [Configuración de la identidad de acceso predeterminada para las funciones de Lambda de un grupo](lambda-group-config.md#lambda-access-identity-groupsettings).

## Paso 1: Configurar el Raspberry Pi
<a name="config-raspberry-pi-dlc"></a>

 En este paso, va a instalar actualizaciones del sistema operativo Raspbian, el software del módulo de cámara y las dependencias de Python, y va a habilitar la interfaz de la cámara. 

Ejecute los siguientes comandos en el terminal de Raspberry Pi.

1. Instale las actualizaciones en Raspbian.

   ```
   sudo apt-get update
   sudo apt-get dist-upgrade
   ```

1. <a name="install-picamera-step"></a>Instale la interfaz `picamera` del módulo de cámara y las demás bibliotecas de Python que sean necesarias para este tutorial.

   ```
   sudo apt-get install -y python3-dev python3-setuptools python3-pip python3-picamera
   ```

   Valide la instalación:
   + Asegúrese de que la instalación de Python 3.7 incluye pip.

     ```
     python3 -m pip
     ```

     Si pip no está instalado, descárguelo del [sitio web de pip](https://pip.pypa.io/en/stable/installing/) y ejecute el siguiente comando.

     ```
     python3 get-pip.py
     ```
   + Asegúrese de que la versión de Python es 3.7 o superior.

     ```
     python3 --version
     ```

     Si en la salida aparece una versión anterior, ejecute el siguiente comando.

     ```
     sudo apt-get install -y python3.7-dev
     ```
   + Asegúrese de que Setuptools y Picamera se han instalado correctamente.

     ```
     sudo -u ggc_user bash -c 'python3 -c "import setuptools"'
     sudo -u ggc_user bash -c 'python3 -c "import picamera"'
     ```

     Si el resultado no contiene errores, la validación es correcta.
**nota**  
Si el ejecutable de Python instalado en el dispositivo es `python3.7`, utilice `python3.7` en lugar de `python3` con los comandos de este tutorial. Asegúrese de que la instalación de pip corresponde a la versión `python3.7` o `python3` correcta para evitar errores de dependencia.

1. Reinicie el Raspberry Pi.

   ```
   sudo reboot
   ```

1. Abra la herramienta de configuración de Raspberry Pi.

   ```
   sudo raspi-config
   ```

1. Utilice las teclas de flecha para abrir **Interfacing Options** (Opciones de interfaz) y habilitar la interfaz de la cámara. Si se le solicita, permita que el dispositivo se reinicie.

1. Utilice el siguiente comando para probar la configuración de la cámara.

   ```
   raspistill -v -o test.jpg
   ```

   Se abre una ventana de vista previa en el Raspberry Pi, se guarda una imagen denominada `test.jpg` en el directorio actual y se muestra información sobre la cámara en el terminal de Raspberry Pi.

## Paso 2: Instalar el motor de ejecución de aprendizaje profundo Amazon SageMaker Neo
<a name="install-dlr"></a>

 En este paso, instale el tiempo de ejecución del aprendizaje profundo Neo (DLR) en su Raspberry Pi. 

**nota**  
Para este tutorial, recomendamos instalar la versión 1.1.0.

1. <a name="ssh-rpi-step"></a>Inicie sesión en su Raspberry Pi de forma remota.

   ```
   ssh pi@your-device-ip-address
   ```

1.  Abra la documentación del DLR, abra [Installing DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html) y busque la URL del wheel para los dispositivos Raspberry Pi. A continuación, siga las instrucciones para instalar DLR en su dispositivo. Por ejemplo, puede utilizar pip:

   ```
   pip3 install rasp3b-wheel-url
   ```

1. Después de instalar el DLR, valide la siguiente configuración:
   + Asegúrese de que la cuenta `ggc_user` del sistema puede usar la biblioteca del DLR.

     ```
     sudo -u ggc_user bash -c 'python3 -c "import dlr"'
     ```
   + Asegúrese de que NumPy está instalado.

     ```
     sudo -u ggc_user bash -c 'python3 -c "import numpy"'
     ```

## Paso 3: Creación de una función de Lambda de inferencia
<a name="ml-console-dlc-create-lambda"></a>

 En este paso, va a crear un paquete de implementación de funciones de Lambda y una función de Lambda. A continuación, publicará una versión de la función y creará un alias. 

1. En su equipo, descargue el ejemplo del DLR para Raspberry Pi de [Ejemplos de aprendizaje automático](what-is-gg.md#gg-ml-samples).

1.  Descomprima el archivo `dlr-py3-armv7l.tar.gz` descargado. 

   ```
   cd path-to-downloaded-sample
   tar -xvzf dlr-py3-armv7l.tar.gz
   ```

   El directorio `examples` del paquete de ejemplo extraído contiene el código de la función y las dependencias.
   + `inference.py` es el código de inferencia que se utiliza en este tutorial. Puede usar este código como plantilla para crear su propia función de inferencia.
   + <a name="ml-samples-ggc-sdk"></a>`greengrasssdk` es la versión 1.5.0 del AWS IoT Greengrass Core SDK para Python.
**nota**  <a name="ml-samples-ggc-sdk-upgrade"></a>
Si hay una nueva versión disponible, puede descargarla y actualizar la versión del SDK del paquete de implementación. Para obtener más información, consulte [AWS IoT Greengrass Core SDK for Python](https://github.com/aws/aws-greengrass-core-sdk-python/) on GitHub.

1.  Comprima el contenido del directorio `examples` en un archivo llamado `optimizedImageClassification.zip`. Este es el paquete de implementación. 

   ```
   cd path-to-downloaded-sample/dlr-py3-armv7l/examples
   zip -r optimizedImageClassification.zip .
   ```

    El paquete de implementación contiene el código de la característica y las dependencias. Esto incluye el código que invoca Python, el motor de ejecución de aprendizaje profundo de Neo, APIs para realizar inferencias con los modelos de compilador de aprendizaje profundo de Neo. 
**nota**  <a name="ml-samples-function-zip"></a>
 Asegúrese de que los archivos `.py` y las dependencias se encuentran en la raíz del directorio. 

1.  Ahora, añada función de Lambda al grupo de Greengrass. 

   Seleccione **Funciones** de la página de la consola de Lambda y elija **Crear función**.

1. Elija **Autor desde cero** y utilice los siguientes valores para crear su función:
   + En **Function name** (Nombre de la característica), introduzca **optimizedImageClassification**. 
   + En **Runtime** (Tiempo de ejecución), elija **Python 3.7**.

   En **Permisos**, mantenga la configuración predeterminada. Esto crea un rol de ejecución que otorga permisos Lambda básicos. Esta función no la utiliza. AWS IoT Greengrass  
![\[La sección de información básica de la página Create function (Crear función).\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/ml-dlc-inference/gg-dlr-lambda-creation.png)

1. Elija **Crear función**. 

 

Ahora, cargue el paquete de implementación de la función de Lambda y registre el controlador.

1. <a name="lambda-console-upload"></a>En la pestaña **Código**, en **Código fuente**, seleccione **Cargar desde**. En el menú desplegable, seleccione un **archivo .zip.**  
![\[La carga del menú desplegable con el archivo .zip resaltado.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

1. Elija su paquete de implementación `optimizedImageClassification.zip` y, a continuación, seleccione **Guardar**.

1. <a name="lambda-console-runtime-settings-para"></a>En la pestaña **Código** de la función, en **Configuración de tiempo de ejecución**, elija **Editar** y, a continuación, introduzca los siguientes valores.
   + En **Runtime** (Tiempo de ejecución), elija **Python 3.7**.
   + En **Handler (Controlador)**, escriba **inference.handler**.

   Seleccione **Save**.  
![\[La sección de configuración del tiempo de ejecución con la opción Cargar resaltada.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/ml-dlc-inference/gg-ml2-lambda-upload.png)

 

A continuación, publique la primera versión de la función de Lambda. A continuación, cree un [alias para la versión](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).

**nota**  
Los grupos de Greengrass pueden hacer referencia a una función de Lambda por versión o alias (recomendado). El uso de un alias facilita la gestión de las actualizaciones del código porque no tiene que cambiar la tabla de suscripción o la definición del grupo cuando se actualiza el código de la función. En su lugar, basta con apuntar el alias a la nueva versión de la función.

1. En el menú **Actions**, elija **Publish new version**.  
![\[La opción Publish new version (Publicar nueva versión) del menú Actions (Acciones).\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/ml-dlc-inference/gg-ml2-publish-new.png)

1. En **Version description (Descripción de versión)**, escriba **First version** y, a continuación, elija **Publish (Publicar)**.

1. En la página de configuración **optimizedImageClassification: 1**, en el menú **Acciones**, selecciona **Crear alias**.  
![\[La opción Create alias (Crear alias) en el menú Actions (Acciones).\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/ml-dlc-inference/gg-ml2-create-alias.png)

1. En la página **Create a new alias**, utilice los valores siguientes:
   + En **Nombre**, escriba **mlTestOpt**.
   + En **Version (Versión)**, escriba **1**.
**nota**  
AWS IoT Greengrass **no admite los alias de Lambda para las versiones \$1LATEST.**

1. Seleccione **Crear**.

   Ahora, añada función de Lambda al grupo de Greengrass.

## Paso 4: Adición de la función de Lambda al grupo de Greengrass
<a name="ml-console-dlc-config-lambda"></a>

En este paso, va a agregar la función de Lambda al grupo y a configurar su ciclo de vida.

Primero, añada la función de Lambda al grupo de Greengrass.

1. En el panel de navegación de la AWS IoT consola, en **Administrar**, expanda **los dispositivos Greengrass** y, a continuación, elija **Grupos (V1)**.

1. En la página de configuración de grupos, elija la pestaña **Funciones de Lambda** y seleccione **Añadir**. 

1.  Elija la **función Lambda** y seleccione. **optimizedImageClassification** 

1. En la **versión de la función de Lambda**, elija el alias de la versión que publicó.

 

A continuación, configure el ciclo de vida de la función de Lambda.

1. En la sección de **Configuración de la función de Lambda**, realice las siguientes actualizaciones.
**nota**  
 Le recomendamos que ejecute la función de Lambda sin creación de contenedores, a menos que su modelo de negocio lo requiera. Esto permite el acceso a la GPU y la cámara del dispositivo sin necesidad de configurar los recursos del dispositivo. Si ejecuta sin contenedorización, también debe conceder acceso root a las funciones de Lambda AWS IoT Greengrass . 

   1. **Para ejecutar sin creación de contenedores:**
      + En **Usuario y grupo del sistema**, elija **Another user ID/group ID**. En **ID de usuario del sistema**, introduzca **0**. Para el **ID de grupo del sistema**, introduzca **0**.

        Esto permite que la función de Lambda se ejecute como raíz. Para obtener más información sobre cómo ejecutar como raíz, consulte [Configuración de la identidad de acceso predeterminada para las funciones de Lambda de un grupo](lambda-group-config.md#lambda-access-identity-groupsettings).
**sugerencia**  
También debe actualizar el archivo `config.json` para conceder acceso raíz a la función de Lambda. Para el procedimiento, consulte [Ejecución de una función de Lambda como raíz](lambda-group-config.md#lambda-running-as-root).
      + Para la **Creación de contenedores de la función de Lambda**, elija **Sin contenedor**.

        Para obtener más información sobre la ejecución sin creación de contenedores, consulte [Consideraciones a la hora de elegir la creación de contenedores de la función de Lambda.](lambda-group-config.md#lambda-containerization-considerations).
      + En **Tiempo de espera**, escriba **10 seconds**.
      + En **Ancladas**, elija **Verdadero**

        Para obtener más información, consulte [Configuración del ciclo de vida de las funciones de Lambda de Greengrass](lambda-functions.md#lambda-lifecycle).
      + En **Parámetro adicional**, para **Acceso de lectura al directorio /sys**, elija **Activado**.

   1.  **Para ejecutarlo en modo contenerizado, en su lugar:** 
**nota**  
No recomendamos ejecutarlo en modo contenerizado a menos que su modelo de negocio lo requiera.
      + En **Usuario y grupo del sistema**, seleccione **Usar grupo predeterminado**.
      + Para la **Creación de contenedores de funciones de Lambda**, elija **Usar grupo por defecto**.
      + En **Límite de memoria**, escriba **1024 MB**.
      + En **Tiempo de espera**, escriba **10 seconds**.
      + En **Ancladas**, elija **Verdadero**

        Para obtener más información, consulte [Configuración del ciclo de vida de las funciones de Lambda de Greengrass](lambda-functions.md#lambda-lifecycle).
      + En **Parámetros adicionales**, para **Acceso de lectura al directorio /sys**, elija **Activado**.

1.  Elija **Añadir función de Lambda**.

## Paso 5: Añadir un recurso de modelo optimizado para SageMaker IA Neo al grupo Greengrass
<a name="ml-console-dlc-add-resources"></a>

 En este paso, va a crear un recurso para el modelo de inferencia de ML optimizado y va a cargarlo en un bucket de Amazon S3. A continuación, localice el modelo cargado en Amazon S3 en la AWS IoT Greengrass consola y asocie el recurso recién creado a la función Lambda. Esto permite que la característica acceda a sus recursos en el dispositivo de nodo. 

1.  En el equipo, desplácese hasta el directorio `resnet50` del paquete de ejemplo en el que descomprimió [Paso 3: Creación de una función de Lambda de inferencia](#ml-console-dlc-create-lambda). 
**nota**  
Si utiliza el ejemplo de NVIDIA Jetson, debe usar el directorio `resnet18` en el paquete de ejemplo en su lugar. Para obtener más información, consulte [Configuración de una NVIDIA Jetson TX2](#jetson-lambda-dlc-config).

   ```
   cd path-to-downloaded-sample/dlr-py3-armv7l/models/resnet50
   ```

    Este directorio contiene artefactos de modelos compilados previamente para un modelo de clasificación de imágenes entrenado con Resnet-50.

1. Comprima los archivos que están en el directorio `resnet50` en un archivo llamado `resnet50.zip`. 

   ```
   zip -r resnet50.zip .
   ```

1.  En la página de configuración de grupo de su AWS IoT Greengrass grupo, elija la pestaña **Recursos**. Vaya a la sección **Machine Learning** y elija **Añadir recurso de machine learning**. En la página **Crear un recurso de machine learning**, en **Nombre del recurso**, escriba **resnet50\$1model**.

1. En **Origen del modelo**, elija **Usar un modelo almacenado en S3, como un modelo optimizado mediante el Compilador de Aprendizaje Profundo**.

1.  En **URI de S3**, elija **Browse S3**. 
**nota**  
 Actualmente, los modelos de SageMaker IA optimizados se almacenan automáticamente en Amazon S3. Puede encontrar su modelo optimizado en su bucket de Amazon S3 utilizando esta opción. Para obtener más información sobre la optimización de modelos en SageMaker IA, consulte la [documentación de SageMaker AI Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html). 

1.  Elija **Upload a model (Cargar un modelo)**. 

1.  En la pestaña de la consola de Amazon S3 cargue su archivo zip en un bucket de Amazon S3. Para obtener información, consulte [¿Cómo puedo cargar archivos y carpetas en un bucket de S3?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) en la *Guía del usuario de Amazon Simple Storage Service*. 
**nota**  
 El nombre del bucket debe contener la cadena **greengrass**. Elija un nombre único (como **greengrass-dlr-bucket-*user-id*-*epoch-time***). No utilice un punto (`.`) en el nombre del bucket. 

1.  En la pestaña de la AWS IoT Greengrass consola, busca y elige tu bucket de Amazon S3. Localice y cargue el archivo `resnet50.zip` y elija **Select (Seleccionar)**. Es posible que tenga que actualizar la página para actualizar la lista de buckets y archivos disponibles. 

1.  En **Ruta de destino**, escriba **/ml\$1model**.   
![\[La ruta de destino actualizada.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/ml-dlc-inference/local-path.png)

    Este es el destino para el modelo local en el espacio de nombres del tiempo de ejecución de Lambda. Al implementar el grupo, AWS IoT Greengrass recupera el paquete del modelo fuente y, a continuación, extrae el contenido al directorio especificado. 
**nota**  
 Le recomendamos encarecidamente que utilice la ruta exacta proporcionada por su ruta local. El uso de una ruta de destino de modelo local distinta en este paso hace que algunos comandos de la solución de problemas ofrecidos en este tutorial sean inexactos. Si utiliza una ruta diferente, debe configurar una variable de entorno `MODEL_PATH` que utilice la ruta exacta que proporcione aquí. Para obtener información sobre las variables de entorno, consulte [Variables de entorno de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html). 

1. **Si se ejecuta en modo contenerizado:**

   1. En **Propietario del grupo del sistema y permisos de acceso a archivos**, seleccione **Especificar grupo del sistema y permisos**.

   1. Elija **Acceso de solo lectura** y, a continuación, elija **Agregar recurso**.

## Paso 6: Agregar un recurso de dispositivo de cámara al grupo de Greengrass
<a name="ml-console-dlc-add-cam-resource"></a>

 En este paso, va a crear un recurso para el módulo de cámara y va a asociarlo con la función de Lambda. De este modo, la función de Lambda podrá acceder al recurso del dispositivo del núcleo. 

**nota**  
Si se ejecuta en modo no contenerizado, AWS IoT Greengrass puede acceder a la GPU y a la cámara del dispositivo sin configurar este recurso del dispositivo. 

1. En la página de configuración del grupo, elija la pestaña **Recursos**.

1. En la pestaña **Recursos locales**, elija **Añadir recurso local**.

1. En la página **Añadir un recurso local**, utilice los siguientes valores:
   + En **Nombre del recurso**, escriba **videoCoreSharedMemory**.
   + En **Tipo de recurso**, elija **Dispositivo**.
   + En **Ruta del dispositivo local**, escriba **/dev/vcsm**.

     La ruta del dispositivo es la ruta local completa del recurso del dispositivo. Esta ruta solo puede hacer referencia a un dispositivo de carácter o un dispositivo de bloques situado bajo `/dev`.
   + En **Propietario del grupo del sistema y permisos de acceso a archivos**, seleccione **Añadir automáticamente permisos del sistema de archivos del grupo del sistema propietario del recurso**.

     La opción **Group owner file access permission (Permiso de acceso a los archivos del propietario del grupo)** le permite conceder al proceso de Lambda permisos de acceso a archivos adicionales. Para obtener más información, consulte [Group owner file access permission (Permiso de acceso a los archivos del propietario del grupo)](access-local-resources.md#lra-group-owner).

1. En la parte inferior de la página, elija **Añadir recurso**.

1. En la pestaña **Recursos**, cree otro recurso local seleccionando **Agregar** y use los siguientes valores:
   + En **Nombre del recurso**, escriba **videoCoreInterface**.
   + En **Tipo de recurso**, elija **Dispositivo**.
   + En **Ruta del dispositivo local**, escriba **/dev/vchiq**.
   + En **Propietario del grupo del sistema y permisos de acceso a archivos**, seleccione **Añadir automáticamente permisos del sistema de archivos del grupo del sistema propietario del recurso**.

1. Seleccione **Add resource** (Añadir recurso). 

## Paso 7: Agregar suscripciones al grupo de Greengrass
<a name="ml-console-dlc-add-subscription"></a>

En este paso, va a agregar suscripciones al grupo. Estas suscripciones permiten a la función Lambda enviar los resultados de las predicciones AWS IoT publicándolos en un tema de MQTT.

1. En la página de configuración del grupo, elija la pestaña **Suscripciones** y, a continuación, elija **Añadir suscripción**.

1. En la página **Crear una suscripción**, configure el origen y el destino de la siguiente manera:

   1. En **Tipo de fuente**, elija **Función Lambda** y, a continuación, elija. **optimizedImageClassification**

   1. En **Tipo de destino**, elija **Servicio** y, a continuación, **Nube de IoT**.

   1. En **Filtro por temas**, introduzca **/resnet-50/predictions** y, a continuación, seleccione **Crear suscripción.** 

1. Añadir una segunda suscripción. Seleccione la pestaña **Suscripciones**, elija **Agregar suscripción** y configure el origen y el destino de la siguiente manera: 

   1. En la sección **Tipo de origen**, elija **Servicios** y luego elija **Nube de IoT**.

   1. En **Tipo de destino**, elija **Función Lambda** y, a continuación, elija. **optimizedImageClassification**

   1. En **Filtro por temas**, introduzca **/resnet-50/test** y, a continuación, seleccione **Crear suscripción.**

## Paso 8: Implementar el grupo de Greengrass
<a name="ml-console-dlc-deploy-group"></a>

En este paso, va a implementar la versión actual de la definición del grupo en el dispositivo del núcleo de Greengrass. La definición contiene la función de Lambda, los recursos y las configuraciones de suscripciones que ha añadido.

1. Asegúrese de que el AWS IoT Greengrass núcleo esté funcionando. Ejecute los siguientes comandos en el terminal de Raspberry Pi según sea necesario.

   1. Para comprobar si el daemon está en ejecución:

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      Si la salida contiene una entrada `root` para `/greengrass/ggc/packages/latest-core-version/bin/daemon`, el daemon está en ejecución.

   1. Inicio de daemon:

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. En la página de configuración de grupo, elija **Implementar**.

1. En la pestaña **Funciones de Lambda**, seleccione **Detector IP** y elija **Editar**.

1. En el cuadro de diálogo **Editar configuración del detector IP**, seleccione **Detectar y anular automáticamente los puntos de conexión del agente MQTT** y elija **Guardar**.

   Esto permite a los dispositivos adquirir automáticamente la información de conexión del dispositivo principal, como la dirección IP, el DNS y el número de puerto. Se recomienda la detección automática, pero AWS IoT Greengrass también admite puntos finales especificados manualmente. Solo se le solicitará el método de detección la primera vez que se implemente el grupo.
**nota**  
Si se le solicita, conceda permiso para crear el [rol de servicio de Greengrass](service-role.md) y asócielo al suyo Cuenta de AWS en el actual. Región de AWS Este rol le permite acceder AWS IoT Greengrass a sus recursos en los AWS servicios.

    En la página **Deployments** (Implementaciones), se muestra la marca temporal, el ID de versión y el estado de la implementación. Una vez terminada, la implementación debería mostrar el estado **Completado**. 

   Para obtener más información sobre las implementaciones, consulte [Implemente AWS IoT Greengrass grupos en un AWS IoT Greengrass núcleo](deployments.md). Para obtener ayuda sobre la resolución de problemas, consulte [Solución de problemas AWS IoT Greengrass](gg-troubleshooting.md).

## Prueba del ejemplo de inferencia
<a name="ml-console-dlc-test-app"></a>

Ahora puede verificar si la implementación se ha configurado correctamente. Para probarlo, suscríbase al tema `/resnet-50/predictions` y publique cualquier mensaje en el tema `/resnet-50/test`. Esto activa la función de Lambda para que tome una foto con su Raspberry Pi y realice la inferencia en la imagen que capture. 

**nota**  
Si utiliza el ejemplo de NVIDIA Jetson, no olvide utilizar los temas `resnet-18/predictions`y `resnet-18/test` en su lugar.

**nota**  
Si se conecta un monitor al Raspberry Pi, la imagen en directo de la cámara se muestra en una ventana de vista previa.

1. En la página de inicio de la AWS IoT consola, en **Prueba**, elija el **cliente de prueba MQTT**.

1. Para **Suscripciones**, seleccione **Suscribirse a un tema**. Use los siguientes valores. No cambie los valores predeterminados de las opciones restantes. 
   + Para **Subscription topic (Tema de suscripción)**, escriba **/resnet-50/predictions**.
   + En **Configuración adicional**, para la **Visualización de la carga útil MQTT**, seleccione **Visualizar las cargas útiles como cadenas**.

1. Elija **Subscribe**.

1. Elija **Publicar en un tema**, introduzca **/resnet-50/test** como **Nombre del tema** y seleccione **Publicar**. 

1.  Si la prueba se realiza correctamente, el mensaje publicado hace que la cámara de Raspberry Pi capture una imagen. Un mensaje de la función de Lambda aparece en la parte inferior de la página. Este mensaje contiene el resultado de predicción de la imagen, con este formato: nombre de la clase predicha, probabilidad y uso máximo de memoria. 

## Configuración de Intel Atom
<a name="atom-lambda-dlc-config"></a>

 Para ejecutar este tutorial en un dispositivo Intel Atom, debe proporcionar imágenes de origen, configurar la función de Lambda y agregar otro recurso del dispositivo local. Para utilizar la GPU como inferencia, compruebe que el siguiente software está instalado en el dispositivo:
+ OpenCL versión 1.0 o posterior
+ Python 3.7 y pip
+ [NumPy](https://pypi.org/project/numpy/)
+ [OpenCV en Wheels](https://pypi.org/project/opencv-python/)

1. Descargue imágenes PNG o JPG estáticas para la función de Lambda que se va a utilizar para la clasificación de imágenes. El ejemplo funciona mejor con archivos de imágenes pequeños. 

   Guarde los archivos de imágenes en el directorio que contiene el archivo `inference.py` (o en un subdirectorio de este directorio). Se encuentra en el paquete de implementación de la función de Lambda que cargó en [Paso 3: Creación de una función de Lambda de inferencia](#ml-console-dlc-create-lambda).
**nota**  
 Si lo estás usando AWS DeepLens, puedes usar la cámara integrada o montar tu propia cámara para realizar inferencias a partir de imágenes capturadas en lugar de imágenes estáticas. Sin embargo, le recomendamos encarecidamente que empiece primero con imágenes estáticas.   
Si utiliza una cámara, asegúrese de que el paquete `awscam` de APT esté instalado y actualizado. Para obtener más información, consulte [Actualización del dispositivo AWS DeepLens](https://docs.aws.amazon.com/deeplens/latest/dg/deeplens-manual-updates.html) en la *Guía para desarrolladores de AWS DeepLens *.

1. Edite la configuración de la función de Lambda. Siga el procedimiento indicado en [Paso 4: Adición de la función de Lambda al grupo de Greengrass](#ml-console-dlc-config-lambda). 
**nota**  
 Le recomendamos que ejecute la función de Lambda sin creación de contenedores, a menos que su modelo de negocio lo requiera. Esto permite el acceso a la GPU y la cámara del dispositivo sin necesidad de configurar los recursos del dispositivo. Si ejecuta sin contenedorización, también debe conceder acceso root a las funciones de Lambda AWS IoT Greengrass . 

   1. **Para ejecutar sin creación de contenedores:**
      + En **Usuario y grupo del sistema**, elija **Another user ID/group ID**. En **ID de usuario del sistema**, introduzca **0**. Para el **ID de grupo del sistema**, introduzca **0**.

        Esto permite que la función de Lambda se ejecute como raíz. Para obtener más información sobre cómo ejecutar como raíz, consulte [Configuración de la identidad de acceso predeterminada para las funciones de Lambda de un grupo](lambda-group-config.md#lambda-access-identity-groupsettings).
**sugerencia**  
También debe actualizar el archivo `config.json` para conceder acceso raíz a la función de Lambda. Para el procedimiento, consulte [Ejecución de una función de Lambda como raíz](lambda-group-config.md#lambda-running-as-root).
      + Para la **Creación de contenedores de la función de Lambda**, elija **Sin contenedor**.

        Para obtener más información sobre la ejecución sin creación de contenedores, consulte [Consideraciones a la hora de elegir la creación de contenedores de la función de Lambda.](lambda-group-config.md#lambda-containerization-considerations).
      + Aumente el valor de **Timeout (Tiempo de espera)** a 2 minutos. De este modo, se asegurará de que la solicitud no supere el tiempo de inactividad demasiado pronto. La configuración tarda unos minutos en ejecutar la inferencia.
      +  En **Ancladas**, elija **Verdadero** 
      + En **Parámetros adicionales**, para **Acceso de lectura al directorio /sys**, elija **Activado**. 

   1.  **Para ejecutarlo en modo contenerizado, en su lugar:** 
**nota**  
No recomendamos ejecutarlo en modo contenerizado a menos que su modelo de negocio lo requiera.
      +  Aumente el valor de **Memory limit (Límite de memoria)** a 3000 MB. 
      + Aumente el valor de **Timeout (Tiempo de espera)** a 2 minutos. De este modo, se asegurará de que la solicitud no supere el tiempo de inactividad demasiado pronto. La configuración tarda unos minutos en ejecutar la inferencia.
      +  En **Ancladas**, elija **Verdadero** 
      + En **Parámetros adicionales**, para **Acceso de lectura al directorio /sys**, elija **Activado**. 

1.  Agregar al grupo un recurso del modelo optimizado para Neo Cargue los recursos del modelo en el directorio `resnet50` del paquete de ejemplo en el que descomprimió [Paso 3: Creación de una función de Lambda de inferencia](#ml-console-dlc-create-lambda). Este directorio contiene artefactos de modelos compilados previamente para un modelo de clasificación de imágenes entrenado con Resnet-50. Utilice el procedimiento que se describe en [Paso 5: Añadir un recurso de modelo optimizado para SageMaker IA Neo al grupo Greengrass](#ml-console-dlc-add-resources) con las siguientes actualizaciones. 
   + Comprima los archivos que están en el directorio `resnet50` en un archivo llamado `resnet50.zip`.
   + En la página **Create a machine learning resource (Crear un recurso de aprendizaje automático)**, en **Resource name (Nombre del recurso)**, escriba **resnet50\$1model**.
   + Cargue el archivo `resnet50.zip`.

1. **Si se ejecuta en modo contenerizado**, añada el recurso de dispositivo local necesario para conceder acceso a su GPU de dispositivo.
**nota**  
 Si se ejecuta en modo no contenerizado, AWS IoT Greengrass podrá acceder a la GPU del dispositivo sin necesidad de configurar los recursos del dispositivo. 

   1. En la página de configuración del grupo, elija la pestaña **Recursos**.

   1. En la sección **Recursos locales**, elija **Añadir recurso local**.

   1. Defina el recurso:
      + En **Nombre del recurso**, escriba **renderD128**.
      + En **Tipo de recurso**, elija **Dispositivo**.
      + En **Ruta del dispositivo local**, escriba **/dev/dri/renderD128**.
      + En **Propietario del grupo del sistema y permisos de acceso a archivos**, seleccione **Añadir automáticamente permisos del sistema de archivos del grupo del sistema propietario del recurso**.

## Configuración de una NVIDIA Jetson TX2
<a name="jetson-lambda-dlc-config"></a>

 Para ejecutar este tutorial en una impresora Jetson de NVIDIA TX2, proporcione las imágenes de origen, configure la función Lambda y añada más recursos del dispositivo local.

1. Asegúrese de que su dispositivo Jetson esté configurado para poder instalar el software AWS IoT Greengrass Core y utilizar la GPU para realizar inferencias. Para obtener más información sobre la configuración del proyecto, consulte [Configuración de otros dispositivos](setup-filter.other.md). Para usar la GPU como inferencia en una NVIDIA Jetson TX2, debes instalar CUDA 10.0 y cuDNN 7.0 en tu dispositivo al crear imágenes de tu placa con Jetpack 4.3.

1. Descargue imágenes PNG o JPG estáticas para la función de Lambda que se va a utilizar para la clasificación de imágenes. El ejemplo funciona mejor con archivos de imágenes pequeños. 

   Guarde los archivos de la imagen en la carpeta que contiene el archivo `inference.py`. También puede guardarlos en un subdirectorio de esta carpeta. Este directorio está en el paquete de implementación de funciones de Lambda que ha cargado en [Paso 3: Creación de una función de Lambda de inferencia](#ml-console-dlc-create-lambda).
**nota**  
 En su lugar, puede elegir instrumentar una cámara en la placa Jetson para capturar las imágenes de origen. Sin embargo, le recomendamos encarecidamente que empiece primero con imágenes estáticas. 

1. Edite la configuración de la función de Lambda. Siga el procedimiento indicado en [Paso 4: Adición de la función de Lambda al grupo de Greengrass](#ml-console-dlc-config-lambda).
**nota**  
 Le recomendamos que ejecute la función de Lambda sin creación de contenedores, a menos que su modelo de negocio lo requiera. Esto permite el acceso a la GPU y la cámara del dispositivo sin necesidad de configurar los recursos del dispositivo. Si ejecuta sin contenedorización, también debe conceder acceso root a las funciones de Lambda AWS IoT Greengrass . 

   1. **Para ejecutar sin creación de contenedores:**
      + En **Ejecutar como**, elija **Another user ID/group ID**. En **UID**, escriba **0**. En **GUID**, escriba **0**.

        Esto permite que la función de Lambda se ejecute como raíz. Para obtener más información sobre cómo ejecutar como raíz, consulte [Configuración de la identidad de acceso predeterminada para las funciones de Lambda de un grupo](lambda-group-config.md#lambda-access-identity-groupsettings).
**sugerencia**  
También debe actualizar el archivo `config.json` para conceder acceso raíz a la función de Lambda. Para el procedimiento, consulte [Ejecución de una función de Lambda como raíz](lambda-group-config.md#lambda-running-as-root).
      + Para la **Creación de contenedores de la función de Lambda**, elija **Sin contenedor**.

        Para obtener más información sobre la ejecución sin creación de contenedores, consulte [Consideraciones a la hora de elegir la creación de contenedores de la función de Lambda.](lambda-group-config.md#lambda-containerization-considerations).
      + Aumente el valor de **Timeout (Tiempo de espera)** a 5 minutos. De este modo, se asegurará de que la solicitud no supere el tiempo de inactividad demasiado pronto. La configuración tarda unos minutos en ejecutar la inferencia.
      +  En **Ancladas**, elija **Verdadero** 
      + En **Parámetros adicionales**, para **Acceso de lectura al directorio /sys**, elija **Activado**. 

   1.  **Para ejecutarlo en modo contenerizado, en su lugar:** 
**nota**  
No recomendamos ejecutarlo en modo contenerizado a menos que su modelo de negocio lo requiera.
      +  Aumente el valor de **Memory limit (Límite de memoria)**. Para utilizar el modelo proporcionado en modo de GPU, utilice 2000 MB. 
      + Aumente el valor de **Timeout (Tiempo de espera)** a 5 minutos. De este modo, se asegurará de que la solicitud no supere el tiempo de inactividad demasiado pronto. La configuración tarda unos minutos en ejecutar la inferencia.
      +  En **Ancladas**, elija **Verdadero** 
      + En **Parámetros adicionales**, para **Acceso de lectura al directorio /sys**, elija **Activado**. 

1.  Agregar al grupo un recurso del modelo optimizado para Neo Cargue los recursos del modelo en el directorio `resnet18` del paquete de ejemplo en el que descomprimió [Paso 3: Creación de una función de Lambda de inferencia](#ml-console-dlc-create-lambda). Este directorio contiene artefactos precompilados de un modelo de clasificación de imágenes entrenado con Resnet-18. Utilice el procedimiento que se describe en [Paso 5: Añadir un recurso de modelo optimizado para SageMaker IA Neo al grupo Greengrass](#ml-console-dlc-add-resources) con las siguientes actualizaciones. 
   + Comprima los archivos que están en el directorio `resnet18` en un archivo llamado `resnet18.zip`.
   + En la página **Create a machine learning resource (Crear un recurso de aprendizaje automático)**, en **Resource name (Nombre del recurso)**, escriba **resnet18\$1model**.
   + Cargue el archivo `resnet18.zip`.

1. **Si se ejecuta en modo contenerizado**, añada los recursos de dispositivos locales necesarios para conceder acceso a su GPU de dispositivo. 
**nota**  
 Si se ejecuta en modo no contenerizado, AWS IoT Greengrass podrá acceder a la GPU del dispositivo sin necesidad de configurar los recursos del dispositivo. 

   1. En la página de configuración del grupo, elija la pestaña **Recursos**.

   1. En la sección **Recursos locales**, elija **Añadir recurso local**.

   1. Defina cada recurso:
      + En **Resource name** (Nombre de recurso) y **Device path** (Ruta del dispositivo), utilice los valores en la siguiente tabla. Cree un recurso de dispositivo para cada fila de la tabla.
      + En **Tipo de recurso**, elija **Dispositivo**.
      + En **Propietario del grupo del sistema y permisos de acceso a archivos**, seleccione **Añadir automáticamente permisos del sistema de archivos del grupo del sistema propietario del recurso**.

             
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/ml-dlc-console.html)

1. **Si se ejecuta en modo contenerizado**, añada el siguiente recurso de volumen local para conceder acceso a la cámara de su dispositivo. Siga el procedimiento indicado en [Paso 5: Añadir un recurso de modelo optimizado para SageMaker IA Neo al grupo Greengrass](#ml-console-dlc-add-resources).
**nota**  
 Si se ejecuta en modo no contenerizado, AWS IoT Greengrass puede acceder a la cámara de su dispositivo sin configurar los recursos del dispositivo. 
   + En **Resource type (Tipo de recurso)**, elija **Device (Dispositivo)**.
   + En **Propietario del grupo del sistema y permisos de acceso a archivos**, seleccione **Añadir automáticamente permisos del sistema de archivos del grupo del sistema propietario del recurso**.

          
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/ml-dlc-console.html)

1.  Actualice las suscripciones del grupo para utilizar el directorio correcto. Utilice el procedimiento que se describe en [Paso 7: Agregar suscripciones al grupo de Greengrass](#ml-console-dlc-add-subscription) con las siguientes actualizaciones. 
   + En el primer filtro de tema, escriba **/resnet-18/predictions**.
   + En el segundo filtro de tema, escriba **/resnet-18/test**.

1.  Actualice las suscripciones de prueba para utilizar el directorio correcto. Utilice el procedimiento que se describe en [Prueba del ejemplo de inferencia](#ml-console-dlc-test-app) con las siguientes actualizaciones. 
   +  Para **Suscripciones**, seleccione **Suscribirse a un tema**. Para **Subscription topic (Tema de suscripción)**, escriba **/resnet-18/predictions**. 
   +  En la página `/resnet-18/predictions`, especifique el tema `/resnet-18/test` en el que se va a publicar. 

## Solución de problemas de inferencia XML AWS IoT Greengrass
<a name="ml-inference-troubleshooting"></a>

Si la prueba no se realiza correctamente, puede seguir estos pasos de solución de problemas. Ejecute los comandos en el terminal de Raspberry Pi.

### Comprobación de los registros de error
<a name="troubleshooting-check-logs"></a>

1. <a name="root-access-logs"></a>Cambie al usuario raíz y vaya al directorio `log`. El acceso a AWS IoT Greengrass los registros requiere permisos de root.

   ```
   sudo su
   cd /greengrass/ggc/var/log
   ```

1. Compruebe `runtime.log` para ver si hay errores. 

   ```
   cat system/runtime.log | grep 'ERROR'
   ```

   También puede consultar el registro de la función de Lambda definida por el usuario para ver si hay errores: 

   ```
   cat user/your-region/your-account-id/lambda-function-name.log | grep 'ERROR'
   ```

   Para obtener más información, consulte [Solución de problemas con los registros](gg-troubleshooting.md#troubleshooting-logs).

 

### Verificación de que la función de Lambda se ha implementado correctamente
<a name="troubleshooting-check-lambda"></a>

1.  Muestre el contenido de la Lambda implementada en el directorio de `/lambda`. Reemplace los valores de los marcadores de posición antes de ejecutar el comando . 

   ```
   cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version
   ls -la
   ```

1.  Compruebe que el directorio contiene el mismo contenido que el paquete de implementación `optimizedImageClassification.zip` que cargó en el [Paso 3: Creación de una función de Lambda de inferencia](#ml-console-dlc-create-lambda). 

    Asegúrese también de que los archivos `.py` y las dependencias se encuentran en la raíz del directorio. 

 

### Verificación de que el modelo de inferencia se ha implementado correctamente
<a name="troubleshooting-check-model"></a>

1. Busque el número de identificación de proceso (PID) del proceso de tiempo de ejecución de Lambda:

   ```
   ps aux | grep lambda-function-name
   ```

   En el resultado, el PID aparece en la segunda columna de la línea correspondiente al proceso de tiempo de ejecución de Lambda.

1.  Entre en el espacio de nombres del tiempo de ejecución de Lambda. Asegúrese de reemplazar el *pid* valor del marcador de posición antes de ejecutar el comando. 
**nota**  
Este directorio y su contenido se encuentran en el espacio de nombres del tiempo de ejecución de Lambda, por lo que no son visibles en un espacio de nombres de Linux normal.

   ```
   sudo nsenter -t pid -m /bin/bash
   ```

1. Muestre el contenido del directorio local que ha especificado para el recurso de machine learning.
**nota**  
 Si su ruta de recurso de machine learning es distinta de `ml_model`, debe sustituirla aquí. 

   ```
   cd /ml_model
   ls -ls
   ```

   Debería ver los siguientes archivos:

   ```
       56 -rw-r--r-- 1 ggc_user ggc_group     56703 Oct 29 20:07 model.json
   196152 -rw-r--r-- 1 ggc_user ggc_group 200855043 Oct 29 20:08 model.params
      256 -rw-r--r-- 1 ggc_user ggc_group    261848 Oct 29 20:07 model.so
       32 -rw-r--r-- 1 ggc_user ggc_group     30564 Oct 29 20:08 synset.txt
   ```

 

### La función de Lambda no puede encontrar `/dev/dri/renderD128`
<a name="troubleshooting-atom-config"></a>

 Esto puede ocurrir si OpenCL no puede conectarse a los dispositivos de GPU que necesita. Debe crear los recursos de dispositivos para los dispositivos necesarios para su función de Lambda. 

## Siguientes pasos
<a name="next-dlc-steps"></a>

 A continuación, explore otros modelos optimizados. Para obtener más información, consulte la [documentación de SageMaker AI Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html). 