Ćwiczenie — wdrażanie międzyplatformowych obrazów DeepStream na urządzeniach osadzonych NVIDIA za pomocą usługi Azure IoT Edge

Ukończone

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.

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

    Zrzut ekranu przedstawiający kartę Urządzenia usługi IoT Edge w witrynie Azure Portal.

  2. Aby wyświetlić szczegółowe informacje o bieżącej konfiguracji, wybierz nazwę urządzenia:

    Zrzut ekranu przedstawiający przegląd urządzenia usługi IoT Edge.

  3. Wybierz kartę Ustawianie modułów, aby otworzyć edytor modułów :

    Zrzut ekranu przedstawiający okienko Moduły.

    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.

  4. W osobnym oknie przeglądarki przejdź do rejestru kontenerów w witrynie Azure Portal:

    Zrzut ekranu przedstawiający przegląd wystąpienia usługi Azure Container Registry.

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

    Zrzut ekranu przedstawiający poświadczenia rejestru kontenerów.

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

    Zrzut ekranu przedstawiający wprowadzanie poświadczeń rejestru kontenerów w usłudze Azure IoT Hub.

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

    Zrzut ekranu przedstawiający dodawanie modułu usługi IoT Edge.

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

    Zrzut ekranu przedstawiający wprowadzanie nazwy i obrazu U R I dla modułu usługi IoT Edge.

  9. 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:

    Zrzut ekranu przedstawiający opcje Tworzenia kontenera w okienku Moduły.

  10. Powrócisz do strony Ustawianie modułów na urządzeniu, po wybraniu pozycji Przejrzyj i utwórz:

    Zrzut ekranu przedstawiający przycisk Przejrzyj i utwórz wyróżniony w okienku Moduły.

  11. 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": {}
        }
    }
    }
    
  12. Sprawdź, czy konfiguracja wdrożenia jest poprawna, a następnie wybierz pozycję Utwórz , aby rozpocząć proces wdrażania:

    Zrzut ekranu przedstawiający pole tekstowe Wdrożenie i przycisk Utwórz.

  13. 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
    
  14. Sprawdź, czy dane wyjściowe zawierają stan running dla edgeAgentmodułów , edgeHubi deepstream_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:

    Zrzut ekranu przedstawiający moduł usługi IoT Edge uruchomiony na sprzęcie Jetson.

  15. 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"
      ]
    }
    
  16. 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:

    Zrzut ekranu przedstawiający przegląd urządzenia usługi IoT Edge ze stanem środowiska uruchomieniowego.

  17. 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:

    Zrzut ekranu przedstawiający wykresy przedstawiające odebrane komunikaty w okienku Użycie usługi IoT Hub.

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?