Cómo configurar la inferencia de aprendizaje automático mediante AWS Management Console - AWS IoT Greengrass

AWS IoT Greengrass Version 1ya no recibe actualizaciones de funciones y solo recibirá parches de seguridad y correcciones de errores hasta el 30 de junio de 2023. Para obtener más información, consulte Política deAWS IoT Greengrass V1 mantenimiento. Le recomendamos encarecidamente que migre aAWS IoT Greengrass Version 2, ya que añade nuevas funciones importantes y compatibilidad con plataformas adicionales.

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 configurar la inferencia de aprendizaje automático mediante AWS Management Console

Para seguir los pasos de este tutorial, necesitaAWS IoT GreengrassCore v1.10 o posterior.

Puede realizar la inferencia de aprendizaje automático (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 aprendizaje automático.

En este tutorial se describe cómo utilizar elAWS Management Consolepara configurar un grupo de Greengrass para ejecutar una aplicación de inferencias Lambda que reconoce imágenes de una cámara localmente, sin enviar datos a la nube. La aplicación de inferencias obtiene acceso al módulo de la cámara de un dispositivo Raspberry Pi y ejecuta la inferencia utilizando el código abiertoSqueezeNetModelo de.

El tutorial contiene los siguientes pasos generales:

Requisitos previos

Para completar este tutorial, se necesita lo siguiente:

nota

En este tutorial se utiliza un dispositivo Raspberry Pi, pero AWS IoT Greengrass es compatible con otras plataformas, como Intel Atom y NVIDIA Jetson TX2. En el ejemplo de Jetson TX2, pueden utilizarse imágenes estáticas en lugar de imágenes transmitidas desde una cámara. Si usa el ejemplo de Jetson TX2, es posible que necesite instalar Python 3.6 en lugar de Python 3.7. Para obtener información sobre cómo configurar el dispositivothatpuedes instalar elAWS IoT GreengrassSoftware Core, consulteConfiguración de otros dispositivos.

Para plataformas de terceros queAWS IoT Greengrassno es compatible, debe ejecutar la función Lambda en modo no contenerizado. Para ejecutar en modo no contenedorizado, debe ejecutar la función Lambda como usuario raíz. Para obtener más información, consulte Consideraciones a la hora de elegir la creación de contenedores de la función y Configuración de la identidad de acceso predeterminada para funciones Lambda en un grupo.

Paso 1: Configuración de Raspberry Pi

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
  2. 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 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 o python3.7 correcta para evitar errores de dependencia.

  3. Reinicie el Raspberry Pi.

    sudo reboot
  4. Abra la herramienta de configuración de Raspberry Pi.

    sudo raspi-config
  5. 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.

  6. 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 marco MXNet

En este paso, va a instalar bibliotecas de MXNet en su Raspberry Pi.

  1. Inicie sesión en su Raspberry Pi de forma remota.

    ssh pi@your-device-ip-address
  2. Abra la documentación de MXNet, diríjase a Installing MXNet y siga las instrucciones para instalar MXNet en el dispositivo.

    nota

    Para este tutorial, es recomendable instalar la versión 1.5.0 y MXNet a partir del código fuente para evitar conflictos de dispositivos.

  3. Después de instalar MXNet, valide la siguiente configuración:

    • Asegúrese de que la cuenta ggc_user del sistema puede utilizar el marco MXNet.

      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 de modelo de MXNet

En este paso, va a crear un paquete que contiene un modelo MXNet preentrenado de ejemplo para cargarlo en Amazon Simple Storage Service (Amazon S3).AWS IoT Greengrasspuede utilizar un paquete de modelo de Amazon S3 siempre que tenga el formato tar.gz o zip.

  1. En su equipo, descargue el ejemplo de MXNet para Raspberry Pi de Ejemplos de aprendizaje automático.

  2. Descomprima el archivo mxnet-py3-armv7l.tar.gz descargado.

  3. 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. SqueezeNet artefactos de código 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

En este paso, va a crear un paquete de implementación de la función Lambda y una función 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 de modelo de MXNet.

    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.

    • greengrasssdkes la versión 1.5.0 delAWS IoT GreengrassCore SDK for Python.

      nota

      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, consulteAWS IoT GreengrassCore SDK for Pythonen GitHub.

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

    zip -r greengrassObjectClassification.zip .
    nota

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

     

    A continuación, cree la función de Lambda.

  3. De la versión deAWS IoTconsola, elija la versiónFuncionesyCrear función.

  4. ElegirAuthor from scratchy utilice los siguientes valores para crear la función:

    • En Function name (Nombre de función), introduzca greengrassObjectClassification.

    • En Runtime (Tiempo de ejecución), elija Python 3.7.

    ParaPermisos, mantenga la configuración predeterminada. Esto crea una función de ejecución que otorga permisos Lambda básicos. no utiliza este rol.AWS IoT Greengrass.

  5. Elija Create function (Crear función).

     

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

  6. Elija la función de Lambda y cargue el paquete de implementación de la función de Lambda.

    1. En la páginaCódigopestaña, enCódigo fuente de., eligeCargar desde. En el menú desplegable, elija.Archivo .zip.

      
                El menú desplegable Cargar desde con el archivo.zip resaltado.
    2. ElegirCargary luego seleccione lagreengrassObjectClassification.zippaquete de implementación. A continuación, elija Save (Guardar).

    3. En la páginaCódigopara la función, enConfiguración de tiempo de, eligeEditary, a continuación, establezca los siguientes valores.

      • En Runtime (Tiempo de ejecución), elija Python 3.7.

      • En Handler (Controlador), escriba greengrassObjectClassification.function_handler.

      Seleccione Save (Guardar).

    A continuación, publique la primera versión de la función de Lambda. A continuación, cree un alias para la versión.

    nota

    Los grupos de Greengrass pueden hacer referencia a una función Lambda por alias (recomendado) o por versión. Usar un alias hace que sea más sencillo gestionar las actualizaciones de código, ya que no tiene que cambiar la tabla de suscripciones o la definición del grupo cuando se actualiza el código de la función. En cambio, tan solo tiene que apuntar el alias a la nueva versión de la función.

  7. En el menú Actions, elija Publish new version.

    
            La opción Publish new version (Publicar nueva versión) del menú Actions (Acciones).
  8. En Version description (Descripción de versión), escriba First version y, a continuación, elija Publish (Publicar).

  9. En la páginagreengrassObjectClassification: 1página de configuración, desde laActionsEl menú deCreación de alias de.

    
            La opción Create alias (Crear alias) en el menú Actions (Acciones).
  10. En la página Create a new alias, utilice los valores siguientes:

    • En Name (Nombre), ingrese mlTest.

    • En Version (Versión), escriba 1.

    nota

    AWS IoT Greengrassno admite alias de Lambda para$LATEST ESTVersión.

  11. Seleccione Save (Guardar).

     

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

Paso 5: Añadir la función de Lambda al grupo de Greengrass

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

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

  1. En el navegadorAWS IoTPanel de navegación de la consola, enManejar, EXpanda,Dispositivos de Greengrassy luego seleccione.Grupos (V1).

  2. En la página de configuración del grupo, seleccioneFunciones de LambdaTAB.

  3. En elFunciones de My Lambdasección, elija.Añadir.

  4. Para el registroFunción de Lambda, eligegreengrassObjectClassification.

  5. Para el registroVersión de función de Lambda, eligeAlias: MLTest.

     

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

  6. En la páginaConfiguración de una 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 caso de negocio lo requiera. Esto ayuda a habilitar el acceso a la GPU y la cámara del dispositivo sin configurar los recursos del dispositivo. Si se ejecuta sin contenedorización, también debe conceder acceso root aAWS IoT GreengrassFunciones de Lambda.

    1. Para funcionar sin contenedorización:

    2. Para ejecutar en modo contenedorizado en su lugar:

      nota

      No es recomendable ejecutar las funciones en modo contenedorizado a menos que su caso de negocio lo requiera.

      • ParaGrupo y usuario del sistema, eligeUsar grupo predeterminado.

      • ParaContenerización de funciones de Lambda, eligeUsar grupo predeterminado.

      • En Límite de memoria, escriba 96 MB.

      • En Tiempo de espera, escriba 10 seconds.

      • ParaPinned, eligeTrue.

        Para obtener más información, consulte Configuración del ciclo de vida de las funciones Lambda de Greengrass.

  7. En Variables de entorno, cree un par clave-valor. Un par clave-valor es necesario para las funciones que interactúan con modelos MXNet en un Raspberry Pi.

    Como clave, utilice MXNET_ENGINE_TYPE. Para obtener el valor, utiliceNaiveEngine.

    nota

    En sus propias funciones Lambda definidas por el usuario, si lo desea, puede establecer la variable de entorno en el código de la función.

  8. Mantenga los valores predeterminados para el resto de las propiedades y elijaAgregar función de Lambda.

Paso 6: Agregar recursos al grupo de Greengrass

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

nota

Si se ejecuta en modo no contenerizado,AWS IoT Greengrasspuede acceder a la GPU y la cámara de su dispositivo sin configurar estos recursos del 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.

  1. En la página de configuración del grupo, seleccione laRecursosTAB.

  2. En el navegadorRecursos localessección, elija.Adición del recurso local.

  3. En la páginaAdición de un recurso local, utilice los siguientes valores:

    • En Resource Name (Nombre del recurso), escriba videoCoreSharedMemory.

    • En Tipo de recurso, elija Dispositivo.

    • ParaRuta 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.

    • ParaPermisos de acceso a archivos y propietario del grupo de, eligeAgregar automáticamente los permisos del sistema de archivos del grupo de sistemas propietario del recurso.

      LaPermisos de acceso a archivos y propietario del grupo depermite conceder permisos de acceso a archivos adicionales para el proceso Lambda. Para obtener más información, consulte Group owner file access permission (Permiso de acceso a los archivos del propietario del grupo).

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

  5. ElegirAdición del recurso local.

  6. En la páginaAdición de un recurso local, utilice los siguientes valores:

    • En Resource Name (Nombre del recurso), escriba videoCoreInterface.

    • En Tipo de recurso, elija Dispositivo.

    • ParaRuta del dispositivo local, Escriba./dev/vchiq.

    • ParaPermisos de acceso a archivos y propietario del grupo de, eligeAgregar automáticamente los permisos del sistema de archivos del grupo de sistemas propietario del recurso.

  7. En la parte inferior de la página, seleccioneAdd resource (Añadir recurso).

 

Ahora, añada el modelo de inferencia como recurso de aprendizaje automático. Este paso incluye cargar elsqueezenet.zippaquete modelo a Amazon S3.

  1. En la páginaRecursosde tu grupo, en la pestañaMachine Learning, elija la sección deAgregar un recurso de aprendizaje automático.

  2. En la páginaAgregar un recurso de aprendizaje automáticoSe ha creado el certificadoNombre del recurso, Escriba.squeezenet_model.

  3. ParaOrigen de modelos de, eligeUsar un modelo almacenado en S3, como un modelo optimizado mediante Deep Learning Compiler.

  4. ParaEL URI DE, introduzca una ruta en la que se guarde el depósito de S3.

  5. Elija Browse S3 (Examinar S3). Esto abre una nueva pestaña en la consola de Amazon S3.

  6. En la pestaña de la consola de Amazon S3, cargue elsqueezenet.zipen un bucket de S3. Para obtener información, consulte¿Cómo puedo cargar archivos y carpetas en un bucket de S3?en laAmazon Simple Storage Service.

    nota

    Para que el bucket de S3 sea accesible, el nombre del bucket debe contener la cadenagreengrassy el bucket de debe estar en la misma región que utilice paraAWS IoT Greengrass. Elija un nombre único (como greengrass-bucket-user-id-epoch-time). No utilice un punto (.) en el nombre del bucket.

  7. En la páginaAWS IoT Greengrass, localice y elija su 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.

  8. 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. Cuando se implementa el grupo, AWS IoT Greengrass recupera el paquete del modelo de origen y, a continuación, extrae el contenido en el directorio especificado. La función Lambda de ejemplo de este tutorial ya está configurada para utilizar esta ruta (en lamodel_pathVariable).

  9. Under Permisos de acceso a archivos y propietario del grupo de, eligeSin grupo de sistemas.

  10. Seleccione Add resource (Añadir recurso).

Uso de SageMaker modelos entrenados con

En este tutorial se utiliza un modelo que está almacenado en Amazon S3, pero puede utilizar fácilmente SageMaker También modelos. LaAWS IoT Greengrassla consola proporciona SageMaker , por lo que no es necesario cargar manualmente estos modelos en Amazon S3. Para conocer los requisitos y las restricciones del uso SageMaker modelos, consulteOrígenes de modelos admitidos.

Para usar un SageMaker Modelo de

  • ParaOrigen de modelos de, eligeUtilice un modelo capacitado enAWS SageMakery, a continuación, elija el nombre del trabajo de entrenamiento del modelo.

  • ParaDestination path, escriba la ruta del directorio en el que la función de Lambda busca el modelo.

Paso 7: Agregar una suscripción al grupo de Greengrass

En este paso, va a agregar una suscripción al grupo. Esta suscripción permite a la función Lambda enviar los resultados de la predicción aAWS IoTpublicando en un tema de MQTT.

  1. En la página de configuración del grupo, seleccione laSuscripcionesy a continuación, elija.Agregar suscripción.

  2. En la páginaDetalles de suscripción, configure el origen y el destino, del modo siguiente:

    1. EnTipo de origen de, eligeFunción de Lambday luego seleccione.greengrassObjectClassification.

    2. EnTarget type (Tipo de objetivo), eligeService (Servicio)y luego seleccione.IoT Cloud (Nube de IoT).

  3. EnFiltro de temas, Escriba.hello/worldy luego seleccione.Crear suscripción.

Paso 8: Implementar el grupo de Greengrass

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 elAWS IoT Greengrassel núcleo se está ejecutando. Ejecute los siguientes comandos en el terminal de Raspberry Pi según sea necesario.

    1. Para comprobar si el demonio 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 demonio está en ejecución.

      nota

      La versión que figura en la ruta depende de la versión del software AWS IoT Greengrass Core que esté instalada en el dispositivo del núcleo.

    2. Para iniciar el demonio:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. En la página de configuración del grupo, seleccioneDesplegar.

    
            La página del grupo con las opciones Deployments (Implementaciones) y and Deploy (Implementar) resaltadas.
  3. En el navegadorFunciones de Lambda, en la pestañaFunciones de System Lambdasección, seleccionaDetector de IP dey eligeEditar.

  4. En el navegadorEditar la configuración del detector IPcuadro de diálogo, seleccioneDetectar y anular automáticamente los puntos finales del agente MQTT.

  5. Seleccione Save (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 es compatible con puntos de enlace 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 crearRol de servicio de Greengrassy asócialo con tuCuenta de AWSEn la versión actual deRegión de AWS. Este rol permite aAWS IoT Greengrasspara acceder a los recursos enAWSServicios de .

    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 correspondiente aCompleted.

    Para obtener más información sobre las implementaciones, consulteImplementación de grupos de AWS IoT Greengrass en un núcleo de AWS IoT Greengrass. Para obtener ayuda sobre la resolución de problemas, consulte Solución de problemas de AWS IoT Greengrass.

Paso 9: Probar la aplicación de inferencias

Ahora puede verificar si la implementación se ha configurado correctamente. Para probarlo, suscríbase alhello/worldy vea los resultados de la predicción que publica la función 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 el navegadorAWS IoTconsola, debajoPruebas, eligeCliente de pruebas MQTT.

  2. En Subscriptions (Suscripciones), utilice los siguientes valores:

    • Como tema de la suscripción, utilice hello/world.

    • Under Configuración adicional, paraVisualización de la carga de MQTT, eligeDisplay payloads as strings.

  3. Elija Subscribe.

    Si la prueba se realiza correctamente, los mensajes de la función 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.

Solución de problemas relacionados con la inferencia de aprendizaje automático de AWS IoT Greengrass

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

  1. Cambie al usuario raíz y vaya al directorio log. El acceso a los registros de AWS IoT Greengrass requiere permisos raíz.

    sudo su cd /greengrass/ggc/var/log
  2. 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.

DesempacarERROR DEruntime.log

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 que contiene los archivos del modelo, use el comando siguiente parareempaquetareEl 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.

  1. Listar el contenido de Lambda en la/lambdaEl certificado). 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
  2. 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.

    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

  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.

  2. Escriba el espacio de nombres de Lambda. Asegúrese de que sustituye el valor del marcador de posición pid 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
  3. Muestre el contenido del directorio local que ha especificado para el recurso de aprendizaje automático.

    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

Pasos siguientes

A continuación, explore otras aplicaciones de inferencias.AWS IoT Greengrassproporciona 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: Instalar el marco MXNet.

Configuración de Intel Atom

Para ejecutar este tutorial en un dispositivo Intel Atom, debe proporcionar imágenes de origen, configurar la función Lambda y agregar otro recurso de 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 Paso 2.

  • NumPy

  • OpenCV en Wheels

  1. Descargue imágenes PNG o JPG estáticas para la función 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 ha cargado enPaso 4: Crear y publicar una función de Lambda.

    nota

    Si está utilizando AWS DeepLens, puede emplear la cámara integrada o montar su propia cámara para realizar la inferencia 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, consulteActualice la versión deAWS DeepLensdispositivoen laAWS DeepLensGuía para desarrolladores.

  2. Si no está utilizando Python 3.7, no olvide crear un symlink entre Python 3.x y Python 3.7. Esto configurará el dispositivo para que utilice 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.

  3. Edite la configuración de la función de Lambda. Siga el procedimiento indicado en Paso 5: Añadir la función de Lambda al grupo de Greengrass.

    nota

    Le recomendamos que ejecute la función de Lambda sin creación de contenedores a menos que su caso de negocio lo requiera. Esto ayuda a habilitar el acceso a la GPU y la cámara del dispositivo sin configurar los recursos del dispositivo. Si se ejecuta sin contenedorización, también debe conceder acceso root aAWS IoT GreengrassFunciones de Lambda.

    1. Para funcionar sin contenedorización:

      • ParaGrupo y usuario del sistema, eligeAnother user ID/group ID. ParaID de usuario del sistema, Escriba.0. ParaID del grupo de sistemas, Escriba.0.

        Esto permite a su función Lambda ejecutarse como root. Para obtener más información sobre cómo ejecutar como root, consulteConfiguración de la identidad de acceso predeterminada para funciones Lambda en un grupo.

        sugerencia

        También debe actualizar suconfig.jsonpara conceder a acceso de root a la función de Lambda. Para obtener el procedimiento, consulteEjecución de una función Lambda como raíz.

      • ParaContenerización de funciones de Lambda, eligeSin contenedor.

        Para obtener más información sobre cómo ejecutar sin creación de contenedores, consulteConsideraciones a la hora de elegir la creación de contenedores de la función.

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

      • Under Pinned, eligeTrue.

      • Under Parámetros adicionales, paraRead access to /sys directory (Acceso de lectura al directorio /sys), eligeEnabled (Habilitado).

      • 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).

    2. Para ejecutar en modo contenedorizado en su lugar:

      nota

      No es recomendable ejecutar las funciones en modo contenedorizado a menos que su caso 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.

      • ParaPinned, eligeTrue.

      • Under Parámetros adicionales, paraRead access to /sys directory (Acceso de lectura al directorio /sys), eligeEnabled (Habilitado).

  4. Si se ejecuta en modo contenedorizado, añada el recurso de dispositivo local necesario para conceder acceso a la GPU de su dispositivo.

    nota

    Si se ejecuta en modo no contenerizado,AWS IoT Greengrasspuede acceder a la GPU de su dispositivo sin configurar los recursos del dispositivo.

    1. En la página de configuración del grupo, seleccione laRecursosTAB.

    2. ElegirAdición del recurso local.

    3. Defina el recurso:

      • En Resource Name (Nombre del recurso), escriba renderD128.

      • ParaTipo de recurso, eligeDispositivo local.

      • En Device path (Ruta del dispositivo), escriba /dev/dri/renderD128.

      • ParaPermisos de acceso a archivos y propietario del grupo de, eligeAgregar automáticamente los permisos del sistema de archivos del grupo de sistemas propietario del recurso.

      • ParaAfiliaciones de funciones de Lambda, concesiones deAcceso de lectura y escrituraa la función de Lambda.

Configuración de un dispositivo NVIDIA Jetson TX2

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

  1. Compruebe que el dispositivo Jetson está configurado de forma que permita instalar el software AWS IoT Greengrass Core. Para obtener más información sobre la configuración del proyecto, consulte Configuración de otros dispositivos.

  2. Abra la documentación de MXNet, vaya a Installing MXNet on a Jetson y siga las instrucciones para instalar MXNet en el dispositivo Jetson.

    nota

    Si desea compilar MxNet desde el origen, siga las instrucciones para crear la biblioteca compartida. Modifique los siguientes ajustes en el archivo config.mk para trabajar con un dispositivo Jetson TX2:

    • Agréguela -gencode arch=compute-62, code=sm_62 a la opción CUDA_ARCH.

    • Active CUDA.

      USE_CUDA = 1
  3. Descargue imágenes PNG o JPG estáticas para la función 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 la función de Lambda que ha cargado enPaso 4: Crear y publicar una función de Lambda.

  4. Cree un symlink entre Python 3.7 y Python 3.6 para poder 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.

  5. Asegúrese de que la cuenta ggc_user del sistema puede usar el marco MxNet:

    “sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
  6. Edite la configuración de la función de Lambda. Siga el procedimiento indicado en Paso 5: Añadir la función de Lambda al grupo de Greengrass.

    nota

    Le recomendamos que ejecute la función de Lambda sin creación de contenedores a menos que su caso de negocio lo requiera. Esto ayuda a habilitar el acceso a la GPU y la cámara del dispositivo sin configurar los recursos del dispositivo. Si se ejecuta sin contenedorización, también debe conceder acceso root aAWS IoT GreengrassFunciones de Lambda.

    1. Para funcionar sin contenedorización:

      • ParaGrupo y usuario del sistema, eligeAnother user ID/group ID. ParaID de usuario del sistema, Escriba.0. ParaID del grupo de sistemas, Escriba.0.

        Esto permite a su función Lambda ejecutarse como root. Para obtener más información sobre cómo ejecutar como root, consulteConfiguración de la identidad de acceso predeterminada para funciones Lambda en un grupo.

        sugerencia

        También debe actualizar suconfig.jsonpara conceder a acceso de root a la función de Lambda. Para obtener el procedimiento, consulteEjecución de una función Lambda como raíz.

      • ParaContenerización de funciones de Lambda, eligeSin contenedor.

        Para obtener más información sobre cómo ejecutar sin creación de contenedores, consulteConsideraciones a la hora de elegir la creación de contenedores de la función.

      • Under Parámetros adicionales, paraRead access to /sys directory (Acceso de lectura al directorio /sys), eligeEnabled (Habilitado).

      • Under Environment variables (Variables de entorno):, agregue los siguientes pares clave-valor a la función Lambda. Esto configurará AWS IoT Greengrass de modo que permita usar el marco MxNet.

        Clave

        Valor

        PATH

        /usr/local/cuda/bin:$PATH

        MXNET_HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

    2. Para ejecutar en modo contenedorizado en su lugar:

      nota

      No es recomendable ejecutar las funciones en modo contenedorizado a menos que su caso 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.

      • Under Parámetros adicionales, paraRead access to /sys directory (Acceso de lectura al directorio /sys), eligeEnabled (Habilitado).

      • Under Environment variables (Variables de entorno):, agregue los siguientes pares clave-valor a la función Lambda. Esto configurará AWS IoT Greengrass de modo que permita usar el marco MxNet.

        Clave

        Valor

        PATH

        /usr/local/cuda/bin:$PATH

        MXNET_HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

  7. Si se ejecuta en modo contenedorizado, añada los siguientes recursos de dispositivos locales para conceder acceso a la GPU de su dispositivo. Siga el procedimiento indicado en Paso 6: Agregar recursos al grupo de Greengrass.

    nota

    Si se ejecuta en modo no contenerizado,AWS IoT Greengrasspuede acceder a la GPU de su dispositivo sin configurar los recursos del dispositivo.

    Para cada recurso:

    • En Tipo de recurso, elija Dispositivo.

    • ParaPermisos de acceso a archivos y propietario del grupo de, eligeAgregar automáticamente los permisos del sistema de archivos del grupo de sistemas propietario del recurso.

       

      Nombre

      Ruta del dispositivo

      nvhost-ctrl

      /dev/nvhost-ctrl

      nvhost-gpu

      /dev/nvhost-gpu

      nvhost-ctrl-gpu

      /dev/ dev/nvhost-ctrl-gpu

      nvhost-dbg-gpu

      /dev/ dev/nvhost-dbg-gpu

      nvhost-prof-gpu

      /dev/ dev/nvhost-prof-gpu

      nvmap

      /dev/nvmap

      nvhost-vic

      /dev/nvhost-vic

      tegra_dc_ctrl

      /dev/tegra_dc_ctrl

  8. Si se ejecuta en modo contenedorizado, añada el siguiente recurso de volumen local para conceder acceso a la cámara del dispositivo. Siga el procedimiento indicado en Paso 6: Agregar recursos al grupo de Greengrass.

    nota

    Si se ejecuta en modo no contenerizado,AWS IoT Greengrasspuede acceder a la cámara del dispositivo sin configurar los recursos de volumen.

    • En Resource type (Tipo de recurso), elija Device (Dispositivo).

    • ParaPermisos de acceso a archivos y propietario del grupo de, eligeAgregar automáticamente los permisos del sistema de archivos del grupo de sistemas propietario del recurso.

       

      Nombre

      Ruta de origen

      Destination path

      shm

      /dev/shm

      /dev/shm

      tmp

      /tmp

      /tmp