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.

    Screenshot that shows the IoT Edge Devices tab in the Azure portal.

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

    Screenshot that shows an overview of the IoT Edge device.

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

    Screenshot that shows the Modules pane.

    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:

    Screenshot that shows an overview of your Azure Container Registry instance.

  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.

    Screenshot that shows credentials for the container registry.

  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.

    Screenshot that shows entering container registry credentials in 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:

    Screenshot that shows adding an IoT Edge module.

  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.

    Screenshot that shows entering a name and image U R I for the IoT Edge module.

  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:

    Screenshot that shows the Container Create options in the Modules pane.

  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:

    Screenshot that shows the Review plus create button highlighted on the Modules pane.

  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:

    Screenshot that shows the Deployment text box and the Create button.

  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:

    Screenshot that shows the IoT Edge module running on Jetson hardware.

  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:

    Screenshot that shows an overview of the IoT Edge device with runtime status.

  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:

    Screenshot that shows charts that depict received messages in the IoT Hub Usage pane.

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