Exercice - Déployer des images DeepStream multiplateformes sur des appareils NVIDIA embarqués avec Azure IoT Edge
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.
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é.
Pour afficher des détails relatifs à la configuration actuelle, sélectionnez le nom de l’appareil :
Sélectionnez l’onglet Définir des modules pour ouvrir l’éditeur de 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.
Dans une fenêtre de navigateur distincte, accédez à votre registre de conteneurs dans le portail Azure :
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.
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.
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 :
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.
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 :
Vous revenez alors dans la page Définir des modules sur l’appareil et sélectionnez Vérifier + créer :
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": {} } } }
Vérifiez que la configuration du déploiement est correcte, puis sélectionnez Créer pour commencer le processus de déploiement :
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
Vérifiez que la sortie affiche l’état
running
pour les modulesedgeAgent
,edgeHub
etdeepstream_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 :
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" ] }
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 :
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 :
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 ?