Ejercicio: Implementación de imágenes de DeepStream multiplataforma en dispositivos incrustados NVIDIA con Azure IoT Edge
Publicó una carga de trabajo de DeepStream Graph Composer en contenedores en el registro de contenedor y aprovisionó el dispositivo incrustado NVIDIA Jetson con el entorno de ejecución de Azure IoT Edge. Ahora, está listo para crear una especificación de implementación en el centro para ejecutar la carga de trabajo como un módulo IoT Edge.
En Azure Portal, vaya al centro de IoT que creó al principio de este módulo. En el menú izquierdo, en Administración de dispositivos automática, seleccione IoT Edge. Busque el dispositivo registrado.
Para ver detalles sobre la configuración actual, seleccione el nombre del dispositivo:
Seleccione la pestaña Establecer módulos para abrir el editor de módulos:
Debe proporcionar las credenciales de Container Registry adecuadas, para que el dispositivo NVIDIA pueda extraer cargas de trabajo de contenedor del registro de contenedor.
En otra ventana del explorador, vaya al registro de contenedor en Azure Portal:
En el menú de la izquierda, en Configuración, seleccione Claves de acceso. En Claves de acceso, anote los valores de Servidor de inicio de sesión, Nombre de usuario y contraseña. Usará estos valores en el paso siguiente.
Vuelva a la ventana del explorador que está abierta en Establecer módulos. En Credenciales de Container Registry, escriba los valores de Claves de acceso del registro de contenedor. Con estas credenciales, cualquier dispositivo que aplique esta especificación de módulo puede extraer de forma segura las cargas de trabajo de contenedor del registro de contenedor en Azure.
A continuación, configurará un módulo IoT Edge personalizado como parte de la especificación de implementación. En la sección Módulos IoT Edge del panel Módulos, seleccione Agregar>Módulo IoT Edge:
En Agregar módulo IoT Edge , en Nombre del módulo IoT Edge, escriba el nombre del módulo deepstream_test4_jetson. En Image URI (URI de imagen), escriba <Login Server>/deepstream_test4_jetson:v1 (Servidor de inicio de sesión/deepstream_test4_jetson:v1). En <Servidor de inicio de sesión>, use la dirección URL del registro de contenedor.
A continuación, seleccione la pestaña Container Create Options (Opciones de creación de contenedor) para habilitar la compatibilidad con la aceleración de GPU y también para proporcionar acceso al socket X11 para permitir la representación de la salida de vídeo desde el contenedor agregando lo siguiente:
{ "NetworkingConfig": { "EndpointsConfig": { "host": {} } }, "HostConfig": { "DeviceRequests": [ { "Count": -1, "Capabilities": [ [ "gpu" ] ] } ], "NetworkMode": "host", "Binds": [ "/tmp/.X11-unix/:/tmp/.X11-unix/", "/tmp/argus_socket:/tmp/argus_socket" ] } }
Cuando haya terminado, seleccione Actualizar:
Volverá a la página Set Modules on device page (Establecer módulos en la página del dispositivo), una vez que seleccione Revisar y crear:
El cuadro de texto Implementación muestra la especificación de implementación que va a enviar al dispositivo. Compruebe que el contenido sea similar al de este ejemplo:
{ "modulesContent": { "$edgeAgent": { "properties.desired": { "modules": { "deepstream_test4_jetson": { "settings": { "image": "<Login Server>.azurecr.io/deepstream_test4_jetson:v1", "createOptions": "{\"NetworkingConfig\":{\"EndpointsConfig\":{\"host\":{}}},\"HostConfig\":{\"DeviceRequests\":[{\"Count\":-1,\"Capabilities\":[[\"gpu\"]]}],\"NetworkMode\":\"host\",\"Binds\":[\"/tmp/.X11-unix/:/tmp/.X11-unix/\",\"/tmp/argus_socket:/tmp/argus_socket\"]}}" }, "type": "docker", "version": "1.0", "env": { "DISPLAY": { "value": ":0" } }, "status": "running", "restartPolicy": "always" } }, "runtime": { "settings": { "minDockerVersion": "v1.25", "registryCredentials": { "<Your Registry Name>": { "address": "<Login Server>.azurecr.io", "password": "<Your Password>", "username": "<Your Username>" } } }, "type": "docker" }, "schemaVersion": "1.1", "systemModules": { "edgeAgent": { "settings": { "image": "mcr.microsoft.com/azureiotedge-agent:1.1", "createOptions": "" }, "type": "docker" }, "edgeHub": { "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.1", "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}" }, "type": "docker", "status": "running", "restartPolicy": "always" } } } }, "$edgeHub": { "properties.desired": { "routes": { "route": "FROM /messages/* INTO $upstream" }, "schemaVersion": "1.1", "storeAndForwardConfiguration": { "timeToLiveSecs": 7200 } } }, "deepstream_test4_jetson": { "properties.desired": {} } } }
Compruebe que la configuración de implementación es correcta y, a continuación, seleccione Crear para iniciar el proceso de implementación:
Para comprobar que la implementación se ha realizado correctamente, ejecute los siguientes comandos en un terminal del dispositivo incrustado NVIDIA:
sudo iotedge list
Compruebe que la salida muestra un estado de
running
para los módulosedgeAgent
edgeHub
ydeepstream_test4_jetson
.Si el dispositivo está conectado a una pantalla, debería poder ver la salida visualizada de la aplicación DeepStream Graph Composer, como en este ejemplo:
Supervise la salida del módulo
deepstream_test4_jetson
mediante la ejecución del siguiente comando en un terminal del dispositivo incrustado NVIDIA Jetson:sudo docker logs -f deepstream_test4_jetson
Cada pocos segundos, el dispositivo envía telemetría a su centro registrado en Azure IoT Hub. Aparece un mensaje similar al ejemplo siguiente:
Message sent : { "version" : "4.0", "id" : 1440, "@timestamp" : "2021-09-21T03:08:51.161Z", "sensorId" : "sensor-0", "objects" : [ "-1|570|478.37|609|507.717|Vehicle|#|sedan|Bugatti|M|blue|XX1234|CA|-0.1" ] }
Puede confirmar el estado de los módulos en ejecución en Azure Portal volviendo a la información general del dispositivo para el dispositivo IoT Edge. Debería ver los siguientes módulos y estados asociados enumerados para el dispositivo:
También puede confirmar en el panel de información general de IoT Hub que los mensajes lleguen del dispositivo al centro. Debería observar un aumento en los mensajes:
¡Enhorabuena! Ha desarrollado correctamente una implementación de borde de nivel de producción de una carga de trabajo de DeepStream Graph Composer y la ha implementado en un dispositivo real mediante Azure IoT Edge.
Pruebe esto
Con las estrategias descritas en este módulo, ¿cómo podría modificar un grafo de referencia de DeepStream existente para admitir una solución para la conservación de la fauna que cuente instancias únicas de especies en peligro de extinción mediante fuentes de cámaras en directo? ¿Qué componentes tendría que modificar para admitir esta solución? ¿Tendría que realizar modificaciones en la estrategia de implementación general?