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

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

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

    Screenshot that shows an overview of the IoT Edge device.

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

    Screenshot that shows the Modules pane.

    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 :

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

  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.

    Screenshot that shows credentials for the container registry.

  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.

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

    Screenshot that shows adding an IoT Edge module.

  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.

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

  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 :

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

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

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

  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 :

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

  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 :

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

  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 :

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

  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 :

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

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 ?