Esercizio - Distribuire immagini DeepStream multipiattaforma in dispositivi incorporati NVIDIA con Azure IoT Edge
È stato pubblicato un carico di lavoro Graph Composer DeepStream in contenitori nel registro contenitori ed è stato effettuato il provisioning del dispositivo incorporato NVIDIA Jetson con il runtime IoT Edge. Si è ora pronti per creare una specifica di distribuzione nell'hub per eseguire il carico di lavoro come modulo IoT Edge.
Nel portale di Azure passare all'hub IoT creato all'inizio di questo modulo. Nel menu a sinistra selezionare IoT Edge in Gestione dispositivi automatica. Cercare il dispositivo registrato.
Per visualizzare i dettagli sulla configurazione corrente, selezionare il nome del dispositivo:
Selezionare la scheda Imposta moduli per aprire l'editor dei moduli:
È necessario specificare le credenziali appropriate del Registro Container, in modo che il dispositivo incorporato NVIDIA possa eseguire il pull dei carichi di lavoro dei contenitori dal registro contenitori.
In una finestra del browser separata passare al registro contenitori nel portale di Azure:
Nel menu a sinistra, in Impostazioni selezionare Chiavi di accesso. In Chiavi di accesso prendere nota dei valori per Server di accesso, Nome utente e Password. Questi valori verranno usati nel passaggio successivo.
Tornare alla finestra del browser aperta su Imposta moduli. In Credenziali del Registro Container immettere i valori delle chiavi di accesso del registro contenitori. Usando queste credenziali, qualsiasi dispositivo che applica questa specifica del modulo può eseguire il pull sicuro dei carichi di lavoro dei contenitori dal registro contenitori in Azure.
A questo punto verrà configurato un modulo IoT Edge personalizzato come parte della specifica di distribuzione. Nella sezione Moduli IoT Edge del riquadro Moduli selezionare Aggiungi>Modulo IoT Edge:
In Aggiungi modulo IoT Edge immettere il nome del modulo deepstream_test4_jetson in Nome del modulo IoT Edge. In URI immagine immettere <server di accesso>/deepstream_test4_jetson:v1. Per <server di accesso> usare l'URL del registro contenitori.
Selezionare quindi la scheda Opzioni di creazione del contenitore per abilitare il supporto per l'accelerazione GPU e anche per fornire l'accesso al socket X11 per consentire il rendering dell'output video dal contenitore aggiungendo quanto segue:
{ "NetworkingConfig": { "EndpointsConfig": { "host": {} } }, "HostConfig": { "DeviceRequests": [ { "Count": -1, "Capabilities": [ [ "gpu" ] ] } ], "NetworkMode": "host", "Binds": [ "/tmp/.X11-unix/:/tmp/.X11-unix/", "/tmp/argus_socket:/tmp/argus_socket" ] } }
Al termine, selezionare Aggiorna:
Si tornerà alla pagina Imposta moduli nel dispositivo. Selezionare Rivedi e crea:
Nella casella di testo Distribuzione viene visualizzata la specifica di distribuzione che si sta per inviare al dispositivo. Verificare che il contenuto sia simile a questo esempio:
{ "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": {} } } }
Verificare che la configurazione della distribuzione sia corretta e quindi selezionare Crea per avviare il processo di distribuzione:
Per verificare l'esito positivo della distribuzione, eseguire i comandi seguenti in un terminale nel dispositivo incorporato NVIDIA:
sudo iotedge list
Verificare che l'output mostri lo stato
running
per i moduliedgeAgent
,edgeHub
edeepstream_test4_jetson
.Se il dispositivo è connesso a uno schermo, dovrebbe essere visibile l'output visualizzato dell'applicazione Graph Composer DeepStream, come in questo esempio:
Monitorare l'output del modulo
deepstream_test4_jetson
eseguendo il comando seguente in un terminale nel dispositivo incorporato NVIDIA Jetson:sudo docker logs -f deepstream_test4_jetson
Ogni pochi secondi, il dispositivo invia i dati di telemetria all'hub registrato in hub IoT di Azure. Viene visualizzato un messaggio simile all'esempio seguente:
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" ] }
È possibile confermare lo stato dei moduli in esecuzione nel portale di Azure tornando alla panoramica per il dispositivo IoT Edge. Verranno visualizzati i moduli seguenti e gli stati associati per il dispositivo:
È anche possibile confermare nel riquadro di panoramica di hub IoT che i messaggi stanno arrivando nell'hub dal dispositivo. Si dovrebbe notare un aumento dei messaggi:
Complimenti. È stata sviluppata correttamente una distribuzione perimetrale di livello di produzione di un carico di lavoro Graph Composer DeepStream, poi distribuita in un dispositivo reale usando Azure IoT Edge.
Prova
Usando le strategie descritte in questo modulo, come è possibile modificare un grafo di riferimento DeepStream esistente per supportare una soluzione di conservazione della fauna selvatica che conta istanze univoche delle specie in pericolo usando feed di videocamere live? Quali componenti è necessario modificare per supportare questa soluzione? È necessario apportare modifiche alla strategia di distribuzione complessiva?