Ejercicio: Implementación de imágenes de DeepStream multiplataforma en dispositivos incrustados NVIDIA con Azure IoT Edge

Completado

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.

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

    Captura de pantalla que muestra la pestaña Dispositivos IoT Edge en Azure Portal.

  2. Para ver detalles sobre la configuración actual, seleccione el nombre del dispositivo:

    Captura de pantalla que muestra información general del dispositivo IoT Edge.

  3. Seleccione la pestaña Establecer módulos para abrir el editor de módulos:

    Captura de pantalla que muestra el panel 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.

  4. En otra ventana del explorador, vaya al registro de contenedor en Azure Portal:

    Captura de pantalla que muestra información general de la instancia de Azure Container Registry.

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

    Captura de pantalla que muestra credenciales para el registro de contenedor.

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

    Captura de pantalla que muestra cómo escribir las credenciales del registro de contenedor en Azure IoT Hub.

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

    Captura de pantalla que muestra cómo agregar un módulo de IoT Edge.

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

    Captura de pantalla que muestra cómo escribir un URI de nombre e imagen para el módulo IoT Edge.

  9. 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:

    Captura de pantalla que muestra las opciones de creación de contenedores en el panel Módulos.

  10. 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:

    Captura de pantalla que muestra el botón Revisar y crear resaltado en el panel Módulos.

  11. 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": {}
        }
    }
    }
    
  12. Compruebe que la configuración de implementación es correcta y, a continuación, seleccione Crear para iniciar el proceso de implementación:

    Captura de pantalla que muestra el cuadro de texto Implementación y el botón Crear.

  13. Para comprobar que la implementación se ha realizado correctamente, ejecute los siguientes comandos en un terminal del dispositivo incrustado NVIDIA:

    sudo iotedge list
    
  14. Compruebe que la salida muestra un estado de running para los módulos edgeAgentedgeHub y deepstream_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:

    Captura de pantalla que muestra el módulo IoT Edge en ejecución en el hardware de Jetson.

  15. 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"
      ]
    }
    
  16. 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:

    Captura de pantalla que muestra información general del dispositivo IoT Edge en el estado en tiempo de ejecución.

  17. 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:

    Captura de pantalla que muestra gráficos que muestran los mensajes recibidos en el panel Uso de IoT Hub.

¡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?