AWS IoT Greengrass Version 1 entró en la fase de vida útil prolongada el 30 de junio de 2023. Para obtener más información, consulte la política de mantenimiento de AWS IoT Greengrass V1 Después de esta fecha, AWS IoT Greengrass V1 no se publicarán actualizaciones que proporcionen funciones, mejoras, correcciones de errores o parches de seguridad. Los dispositivos que se ejecuten AWS IoT Greengrass V1 no se verán afectados y seguirán funcionando y conectándose a la nube. Le recomendamos encarecidamente que migre a AWS IoT Greengrass Version 2, ya que añade importantes funciones nuevas y es compatible 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 machine learning mediante AWS Management Console
Para seguir los pasos de este tutorial, necesitas la versión 1.10 de AWS IoT Greengrass Core 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.
En este tutorial se describe cómo utilizar el AWS Management Console para configurar un grupo de Greengrass 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
El tutorial contiene los siguientes pasos generales:
Requisitos previos
Para completar este tutorial, se necesita lo siguiente:
-
Raspberry Pi 4 Modelo B o Raspberry Pi 3 Modelo B/B+, 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 o asegúrese de haber completado el módulo 1 y el módulo 2 de Introducción a AWS IoT Greengrass.
nota
Es posible que la Raspberry Pi requiera una fuente de alimentación
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
. Para obtener información sobre cómo configurar la cámara, consulte Conectar la cámara 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 Introducción a AWS IoT Greengrass.
nota
Este tutorial utiliza una Raspberry Pi, pero AWS IoT Greengrass es compatible con otras plataformas, como Intel Atom y NVIDIA 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, consulteConfiguración de otros dispositivos.
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. y Configuración de la identidad de acceso predeterminada para las funciones de Lambda de un grupo.
Paso 1: Configurar el 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.
-
Instale las actualizaciones en Raspbian.
sudo apt-get update sudo apt-get dist-upgrade
-
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
, utilicepython3.7
en lugar depython3
con los comandos de este tutorial. Asegúrese de que la instalación de pip corresponde a la versiónpython3.7
opython3
correcta para evitar errores de dependencia. -
-
Reinicie el Raspberry Pi.
sudo reboot
-
Abra la herramienta de configuración de Raspberry Pi.
sudo raspi-config
-
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.
-
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
En este paso, instala MXNet las bibliotecas en tu Raspberry Pi.
-
Inicie sesión en su Raspberry Pi de forma remota.
ssh pi@
your-device-ip-address
-
Abre la MXNet documentación, abre Instalación MXNet
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.
-
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
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.
-
En su ordenador, descargue el MXNet ejemplo para Raspberry Pi deEjemplos de aprendizaje automático.
-
Descomprima el archivo
mxnet-py3-armv7l.tar.gz
descargado. -
Vaya al directorio
squeezenet
.cd
path-to-downloaded-sample
/mxnet-py3-armv7l/models/squeezenetEl 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
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.
-
En el equipo, desplácese hasta el directorio
examples
del paquete de ejemplo en el que descomprimió Paso 3: Crear un paquete MXNet modelo.cd
path-to-downloaded-sample
/mxnet-py3-armv7l/examplesEl 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. -
greengrasssdk
es la versión 1.5.0 del AWS IoT Greengrass Core SDK para 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, consulte AWS IoT Greengrass Core SDK for Python
on GitHub.
-
-
Comprima el contenido del directorio
examples
en un archivo llamadogreengrassObjectClassification.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.Ahora, cree la función de Lambda.
-
En la AWS IoT consola, selecciona Funciones y Crear función.
-
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.
-
-
Elija Crear función.
Ahora, cargue el paquete de implementación de la función de Lambda y registre el controlador.
-
Elija su función de Lambda y cargue su paquete de implementación de funciones de Lambda.
-
En la pestaña Código, en Código fuente, seleccione Cargar desde. En el menú desplegable, seleccione un archivo .zip.
-
Seleccione Cargar y, a continuación, elija su paquete de implementación de
greengrassObjectClassification.zip
. A continuación, elija Guardar. -
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_handler
.
Seleccione 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 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.
-
-
En el menú Actions, elija Publish new version.
-
En Version description (Descripción de versión), escriba
First version
y, a continuación, elija Publish (Publicar). -
En la página de configuración greengrassObjectClassification: 1, en el menú Acciones, selecciona Crear alias.
-
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 $LATEST.
-
-
Seleccione Guardar.
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
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.
-
En el panel de navegación de la AWS IoT consola, en Administrar, expanda los dispositivos Greengrass y, a continuación, elija Grupos (V1).
-
En la página de configuración del grupo, seleccione la pestaña Funciones de Lambda.
-
En la sección Mis funciones de Lambda, seleccione Añadir.
-
Para la función Lambda, elija. greengrassObjectClassification
-
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.
-
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 .
-
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, introduzca0
. Para el ID de grupo del sistema, introduzca0
.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.
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. -
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..
-
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.
-
-
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.
-
-
-
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_ENGINE_TYPE. 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.
-
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
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.
-
En la página de configuración del grupo, elija la pestaña Recursos.
-
En la sección Recursos locales, elija Añadir recurso local.
-
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).
-
-
A continuación, añada un recurso de dispositivo local para la interfaz de la cámara.
-
Seleccione Añadir recurso local.
-
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.
-
-
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.
-
En la pestaña Recursos de su grupo, en la sección Machine learning, seleccione Añadir recurso de machine learning.
-
En la página Añadir un recurso de machine learning, en Nombre del recurso, escriba
squeezenet_model
. -
En Origen del modelo, elija Usar un modelo almacenado en S3, como un modelo optimizado mediante el Compilador de Aprendizaje Profundo.
-
Para el URI de S3, introduzca una ruta en la que se guarde el bucket de S3.
-
Elija Browse S3 (Examinar S3). Esto abre una nueva pestaña en la consola de Amazon S3.
-
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? 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 (comogreengrass-bucket-
). No utilice un punto (user-id
-epoch-time
.
) en el nombre del bucket. -
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. -
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
). -
En Propietario del grupo del sistema y permisos de acceso a archivos, seleccione Sin grupo del sistema.
-
Seleccione Add resource (Añadir recurso).
Uso de modelos entrenados por SageMaker IA
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, consulteOrígenes de modelos admitidos.
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
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.
-
En la página de configuración del grupo, elija la pestaña Suscripciones y, a continuación, elija Añadir suscripción.
-
En la página Detalles de la suscripción, configure el origen y el destino de la siguiente manera:
-
En Tipo de fuente, elija Función Lambda y, a continuación, elija. greengrassObjectClassification
-
En Tipo de destino, elija Servicio y, a continuación, Nube de IoT.
-
-
En Filtro por temas, introduzca
hello/world
y, a continuación, 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.
-
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.
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.
Inicio de daemon:
cd /greengrass/ggc/core/ sudo ./greengrassd start
-
En la página de configuración de grupo, elija Implementar.
-
En la pestaña Funciones de Lambda, en la sección Funciones de Lambda del sistema, seleccione Detector IP y elija Editar.
-
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.
-
Seleccione 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 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 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 Implementació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 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.
-
En la AWS IoT consola, en Prueba, elija el cliente de prueba MQTT.
-
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.
-
-
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.
Solución de problemas de AWS IoT Greengrass inferencia ML
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
-
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
-
En el directorio de
system
, marqueruntime.log
opython_runtime.log
.En el directorio de
user/
, marqueregion
/account-id
greengrassObjectClassification.log
.Para obtener más información, consulte Solución de problemas con los registros.
Error de "desempaquetado" en runtime.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 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
-
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 -
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
-
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.
-
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 -
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
Pasos a seguir a continuación
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 .
Configuración de Intel Atom
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 Paso 2.
-
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.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 en la Guía para desarrolladores de AWS DeepLens . -
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.xpath-to-python-3.7/
python3.7Reinicie el dispositivo.
-
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.
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 .
-
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, introduzca0
. Para el ID de grupo del sistema, introduzca0
.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.
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. -
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..
-
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).
-
-
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.
-
-
-
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.
-
En la página de configuración del grupo, elija la pestaña Recursos.
-
Seleccione Añadir recurso local.
-
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
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.
-
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.
-
Abre la MXNet documentación, ve a Instalación MXNet en un dispositivo Jetson
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ónCUDA_ARCH
. -
Active CUDA.
USE_CUDA = 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. -
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.6path-to-python-3.7/
python3.7Reinicie el dispositivo.
-
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"'
-
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.
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 .
-
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, introduzca0
. Para el ID de grupo del sistema, introduzca0
.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.
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. -
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..
-
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
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
-
-
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.
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
-
-
-
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.
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.
Nombre
Ruta del dispositivo
nvhost-ctrl
/dev/nvhost-ctrl
nvhost-gpu
/dev/nvhost-gpu
nvhost-ctrl-gpu
/dev/ nvhost-ctrl-gpu
nvhost-dbg-gpu
/dev/ nvhost-dbg-gpu
nvhost-prof-gpu
/dev/ nvhost-prof-gpu
nvmap
/dev/nvmap
nvhost-vic
/dev/nvhost-vic
tegra_dc_ctrl
/dev/tegra_dc_ctrl
-
-
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.
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.
Nombre
Ruta de origen
Destination path
shm
/dev/shm
/dev/shm
tmp
/tmp
/tmp
-