Ćwiczenie — wdrażanie międzyplatformowych obrazów DeepStream na urządzeniach osadzonych NVIDIA za pomocą usługi Azure IoT Edge
Opublikowano konteneryzowane obciążenie Narzędzia DeepStream Graph Composer do rejestru kontenerów i aprowizowaliśmy urządzenie osadzone NVIDIA Jetson za pomocą środowiska uruchomieniowego usługi IoT Edge. Teraz możesz utworzyć specyfikację wdrożenia w centrum, aby uruchomić obciążenie jako moduł usługi IoT Edge.
W witrynie Azure Portal przejdź do centrum IoT Utworzonego na początku tego modułu. W menu po lewej stronie w obszarze Automatyczne Zarządzanie urządzeniami wybierz pozycję IoT Edge. Wyszukaj zarejestrowane urządzenie.
Aby wyświetlić szczegółowe informacje o bieżącej konfiguracji, wybierz nazwę urządzenia:
Wybierz kartę Ustawianie modułów, aby otworzyć edytor modułów :
Należy podać odpowiednie poświadczenia usługi Container Registry, aby urządzenie osadzone NVIDIA mogło ściągać obciążenia kontenerów z rejestru kontenerów.
W osobnym oknie przeglądarki przejdź do rejestru kontenerów w witrynie Azure Portal:
W menu po lewej stronie w obszarze Ustawienia wybierz pozycję Klucze dostępu. W obszarze Klucze dostępu zanotuj wartości serwera logowania, nazwy użytkownika i hasła. Użyjesz tych wartości w następnym kroku.
Wróć do okna przeglądarki, które jest otwarte, aby ustawić moduły. W obszarze Poświadczenia rejestru kontenerów wprowadź wartości z kluczy dostępu rejestru kontenerów. Przy użyciu tych poświadczeń każde urządzenie, które stosuje tę specyfikację modułu, może bezpiecznie ściągać obciążenia kontenerów z rejestru kontenerów na platformie Azure.
Następnie skonfigurujesz niestandardowy moduł usługi IoT Edge w ramach specyfikacji wdrożenia. W sekcji Moduły usługi IoT Edge w okienku Moduły wybierz pozycję Dodaj>moduł usługi IoT Edge:
W obszarze Dodawanie modułu usługi IoT Edge w polu Nazwa modułu usługi IoT Edge wprowadź nazwę modułu deepstream_test4_jetson. W polu Identyfikator URI obrazu wprowadź wartość< Serwer> logowania/deepstream_test4_jetson:v1. W przypadku <serwera> logowania użyj adresu URL rejestru kontenerów.
Następnie wybierz kartę Opcje tworzenia kontenera, aby włączyć obsługę przyspieszania procesora GPU, a także zapewnić dostęp do gniazda X11, aby umożliwić renderowanie danych wyjściowych wideo z kontenera przez dodanie następujących elementów:
{ "NetworkingConfig": { "EndpointsConfig": { "host": {} } }, "HostConfig": { "DeviceRequests": [ { "Count": -1, "Capabilities": [ [ "gpu" ] ] } ], "NetworkMode": "host", "Binds": [ "/tmp/.X11-unix/:/tmp/.X11-unix/", "/tmp/argus_socket:/tmp/argus_socket" ] } }
Po zakończeniu wybierz pozycję Aktualizuj:
Powrócisz do strony Ustawianie modułów na urządzeniu, po wybraniu pozycji Przejrzyj i utwórz:
W polu tekstowym Wdrożenie zostanie wyświetlona specyfikacja wdrożenia, którą chcesz przesłać do urządzenia. Sprawdź, czy zawartość wygląda podobnie do tego przykładu:
{ "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": {} } } }
Sprawdź, czy konfiguracja wdrożenia jest poprawna, a następnie wybierz pozycję Utwórz , aby rozpocząć proces wdrażania:
Aby sprawdzić, czy wdrożenie zakończyło się pomyślnie, uruchom następujące polecenia w terminalu na urządzeniu osadzonym NVIDIA:
sudo iotedge list
Sprawdź, czy dane wyjściowe zawierają stan
running
dlaedgeAgent
modułów ,edgeHub
ideepstream_test4_jetson
.Jeśli urządzenie jest połączone z wyświetlaczem, powinno być widoczne zwizualizowane dane wyjściowe aplikacji DeepStream Graph Composer, jak pokazano w tym przykładzie:
Monitoruj dane wyjściowe modułu
deepstream_test4_jetson
, uruchamiając następujące polecenie w terminalu na urządzeniu osadzonym NVIDIA Jetson:sudo docker logs -f deepstream_test4_jetson
Co kilka sekund urządzenie wysyła dane telemetryczne do swojego zarejestrowanego centrum w usłudze Azure IoT Hub. Zostanie wyświetlony komunikat podobny do następującego przykładu:
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" ] }
Stan uruchomionych modułów w witrynie Azure Portal można potwierdzić, wracając do przeglądu urządzenia usługi IoT Edge. Powinny zostać wyświetlone następujące moduły i skojarzone stany dla urządzenia:
Możesz również potwierdzić w okienku przeglądu usługi IoT Hub, że komunikaty docierają do centrum z urządzenia. Należy zauważyć wzrost liczby komunikatów:
Gratulacje! Pomyślnie opracowano wdrożenie brzegowe klasy produkcyjnej obciążenia Narzędzia DeepStream Graph Composer i wdrożono je na rzeczywistym urządzeniu przy użyciu usługi Azure IoT Edge!
Wypróbuj
Korzystając ze strategii opisanych w tym module, jak można zmodyfikować istniejący graf referencyjny DeepStream w celu obsługi rozwiązania ochrony przyrody, które liczy unikatowe wystąpienia zagrożonych gatunków przy użyciu kanałów informacyjnych kamery na żywo? Które składniki należy zmodyfikować, aby obsługiwać to rozwiązanie? Czy należy wprowadzić jakiekolwiek modyfikacje ogólnej strategii wdrażania?