Exercice - Déployer des images DeepStream multiplateformes sur des appareils NVIDIA embarqués avec Azure IoT Edge

Effectué

Vous avez publié une charge de travail conteneurisée DeepStream Graph Composer dans votre registre de conteneurs et approvisionné votre appareil incorporé NVIDIA Jetson avec le runtime IoT Edge. Vous êtes maintenant prêt à créer une spécification de déploiement dans votre hub afin d’exécuter la charge de travail en tant que module IoT Edge.

  1. Dans le portail Azure, accédez au hub IoT que vous avez créé au début de ce module. Dans le menu de gauche, sous Gestion automatique des appareils, sélectionnez IoT Edge. Recherchez votre appareil enregistré.

    Capture d’écran montrant l’onglet Appareils IoT Edge dans le Portail Azure.

  2. Pour afficher des détails relatifs à la configuration actuelle, sélectionnez le nom de l’appareil :

    Capture d’écran montrant une vue d’ensemble de l’appareil IoT Edge.

  3. Sélectionnez l’onglet Définir des modules pour ouvrir l’éditeur de modules :

    Capture d’écran affichant le volet Modules.

    Vous devez fournir les informations d’identification Container Registry qui conviennent afin de permettre à votre appareil incorporé NVIDIA d’extraire les charges de travail des conteneurs à partir de votre registre de conteneurs.

  4. Dans une fenêtre de navigateur distincte, accédez à votre registre de conteneurs dans le portail Azure :

    Capture d’écran montrant une vue d’ensemble de votre instance Azure Container Registry.

  5. Dans le menu de gauche, sous Paramètres, sélectionnez Clés d’accès. Dans Clés d’accès, notez les valeurs pour Serveur de connexion, Nom d’utilisateur et Mot de passe. Vous utiliserez cette valeur à l'étape suivante.

    Capture d’écran affichant les informations d'identification du registre de conteneurs.

  6. Revenez à la fenêtre du navigateur ouverte pour Définir des modules. Dans Informations d’identification du registre de conteneurs, entrez les valeurs des clés des Clés d’accèsdu registre de conteneurs. À l’aide de ces informations d’identification, tous les appareils appliquant cette spécification de module peuvent extraire en toute sécurité des charges de travail de conteneur à partir de votre registre de conteneurs dans Azure.

    Capture d’écran montrant la saisie des informations d’identification du registre de conteneurs dans Azure IoT Hub.

  7. Vous allez ensuite configurer un module IoT Edge personnalisé dans le cadre de votre spécification de déploiement. Dans la section Modules IoT Edge du volet Modules, sélectionnez Ajouter>Module IoT Edge :

    Capture d’écran montrant l’ajout d’un groupe IoT Edge.

  8. Dans Ajouter un module IoT Edge, dans Nom du module IoT Edge, entrez le nom du module deepstream_test4_jetson. Dans URI d’image, entrez <Connexion serveur>/deepstream_test4_jetson:v1. Pour <Serveur de connexion>, utilisez l’URL de votre registre de conteneurs.

    Capture d’écran montrant la saisie de l’URI d’un nom et d’une image pour le module IoT Edge.

  9. Ensuite, sélectionnez l’onglet Options de création de conteneur pour activer la prise en charge de l’accélération GPU et également pour fournir l’accès au socket X11 afin de permettre le rendu de la sortie vidéo à partir du conteneur en ajoutant ce qui suit :

    {
    "NetworkingConfig": {
        "EndpointsConfig": {
            "host": {}
        }
    },
    "HostConfig": {
        "DeviceRequests": [
            {
                "Count": -1,
                "Capabilities": [
                    [
                        "gpu"
                    ]
                ]
            }
        ],
        "NetworkMode": "host",
        "Binds": [
            "/tmp/.X11-unix/:/tmp/.X11-unix/",
            "/tmp/argus_socket:/tmp/argus_socket"
        ]
    }
    }
    

    Quand vous avez terminé, sélectionnez Mettre à jour :

    Capture d’écran montrant les options Création de conteneur dans le volet Modules.

  10. Vous revenez alors dans la page Définir des modules sur l’appareil et sélectionnez Vérifier + créer :

    Capture d’écran montrant le bouton Vérifier et créer mis en surbrillance dans le volet Modules.

  11. La zone de texte Déploiement affiche la spécification de déploiement que vous êtes sur le point d’envoyer à votre appareil. Vérifiez que le contenu ressemble à l’exemple suivant :

    {
    "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. Vérifiez que la configuration du déploiement est correcte, puis sélectionnez Créer pour commencer le processus de déploiement :

    Capture d’écran montrant la zone de texte Déploiement et le bouton Créer.

  13. Pour vérifier que le déploiement a réussi, exécutez les commandes suivantes dans un terminal sur l’appareil incorporé NVIDIA :

    sudo iotedge list
    
  14. Vérifiez que la sortie affiche l’état running pour les modules edgeAgent, edgeHub et deepstream_test4_jetson.

    Si votre appareil est connecté à un écran, vous devez être en mesure de voir la sortie visualisée de l’application DeepStream Graph Composer, comme dans cet exemple :

    Capture d’écran montrant le module IoT Edge en cours d’exécution sur du matériel Jetson.

  15. Surveillez la sortie du module deepstream_test4_jetson en exécutant la commande suivante dans un terminal sur l’appareil incorporé NVIDIA Jetson :

    sudo docker logs -f deepstream_test4_jetson
    

    Toutes les quelques secondes, votre appareil envoie des données de télémétrie à son hub inscrit dans Azure IoT Hub. Un message semblable au suivant s’affiche :

    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. Vous pouvez vérifier l’état des modules en cours d’exécution dans le portail Azure en revenant à la vue d’ensemble de votre appareil IoT Edge. Les modules et les états associés suivants doivent apparaître pour votre appareil :

    Capture d’écran montrant une vue d’ensemble de l’appareil IoT Edge avec l’état du runtime.

  17. Dans votre volet de vue d’ensemble IoT Hub, assurez-vous que les messages arrivent dans votre hub depuis votre appareil. Vous devriez noter une augmentation des messages :

    Capture d’écran montrant des graphiques illustrant les messages reçus dans le volet Utilisation d’IoT Hub.

Félicitations ! Vous avez correctement développé un déploiement de périphérie de niveau production d’une charge de travail DeepStream Graph Composer et déployé cette dernière sur un appareil réel à l’aide d’Azure IoT Edge.

Essayez ceci

À l’aide des stratégies décrites dans ce module, comment pourriez-vous modifier un graphique de référence DeepStream existant pour prendre en charge une solution de conservation de la faune comptant des instances uniques d'espèces menacées en utilisant les flux de caméras en direct ? Quels composants vous faut-il modifier pour prendre en charge cette solution ? Seriez-vous amené à apporter des modifications à la stratégie globale de déploiement ?