Ćwiczenie — kompilowanie i publikowanie międzyplatformowych obrazów kontenerów DeepStream

Ukończone

Pakiet DeepStream 6.0 container-builder może tworzyć międzyplatformowe obrazy kontenerów. Ta funkcja będzie potrzebna do utworzenia kontenera zgodnego z procesorem ARM64 na docelowym urządzeniu osadzonym NVIDIA.

Wykonaj poniższe kroki na maszynie hosta opartej na architekturze x86, na którym zainstalowano program DeepStream 6.0 Graph Composer z platformą Docker. W krokach założono, że zostały wykonane kroki opisane w temacie Konfigurowanie i konfigurowanie środowiska deweloperskiego NVIDIA DeepStream oraz Wprowadzenie do programu NVIDIA DeepStream Graph Composer na platformie Azure.

  1. Aby rozpocząć, należy zainstalować qemu-user-static pakiety i binfmt-support . Pakiety są zależnościami wymaganymi do obsługi międzyplatformowej na platformie Docker. Aby wykonać ten krok, uruchom następujące polecenia w terminalu na hoście:

    sudo apt install qemu-user-static binfmt-support
    
  2. Po zakończeniu instalacji uruchom następujące polecenia na hoście, aby skonfigurować obsługę międzyplatformową na platformie Docker:

    sudo docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes --credential yes 
    
  3. Następnie utworzysz konfigurację container-builder , która będzie generować kontener oparty na architekturze ARM64 w celu obsługi grafu deepstream-test4. Aby rozpocząć, przejdź do strony /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4 i otwórz plik za ds_test4_container_builder_jetson.yaml pomocą polecenia:

        cd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4
        sudo vi ds_test4_container_builder_jetson.yaml
    

    Poniżej przedstawiono zawartość niezmodyfikowanego ds_test4_container_builder_jetson.yaml pliku:

        %YAML 1.2
        ################################################################################
        # Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.
        #
        # NVIDIA Corporation and its licensors retain all intellectual property
        # and proprietary rights in and to this software, related documentation
        # and any modifications thereto.  Any use, reproduction, disclosure or
        # distribution of this software and related documentation without an express
        # license agreement from NVIDIA Corporation is strictly prohibited.
        #
        ################################################################################
        ---
        # final stage
        unique_stage: final_image
        base_image: auto
        stage_model: clean_stage
    
        local_copy_files:
        - src: "/opt/nvidia/graph-composer/graph_composer-1.0.0_arm64.deb"
          dst: "/tmp/"
        - src: "parameters.yaml"
          dst: "/workspace/deepstream-test4/" # ends with '/' is folder
    
        custom_runs:
         - "apt install -y /tmp/graph_composer-1.0.0_arm64.deb && rm -rf /tmp/graph-composer-1.0.0_arm64.deb"
    
        work_folder: /workspace/deepstream-test4/
    
        env_list:
          PATH: "/opt/nvidia/graph-composer/:$PATH"
          LD_LIBRARY_PATH: "/opt/nvidia/graph-composer/:$LD_LIBRARY_PATH"
          DISPLAY: ":0"
    
        # Setup entrypoint
        entrypoint:
        - "gxe"
        - "--manifest"
        - "deepstream-test4_manifest.yaml"
        - "--app"
        - "deepstream-test4.yaml,parameters.yaml"
        ---
        # Container Builder Config
        container_builder: main # required
        graph:
          graph_files: [ deepstream-test4.yaml ]
          graph_dst: /workspace/deepstream-test4/
          manifest_dst: /workspace/deepstream-test4/deepstream-test4_manifest.yaml
          ext_install_root: /workspace/deepstream-test4/
        docker_build:
            image_name: <docker-container-registry>:deepstream-test4-jetson
    

    Uwaga

    Poniżej przedstawiono kilka wskazówek dotyczących korzystania z edytora vi podczas edytowania pliku ds_test4_container_builder_jetson.yaml :

    • Aby wprowadzić tryb wstawiania, wybierz pozycję i. Następnie możesz wprowadzić zmiany.
    • Aby zamknąć tryb wstawiania i powrócić do trybu normalnego, wybierz Esc.
    • Aby zapisać plik i zakończyć pracę, wybierz pozycję x, a następnie wybierz Enter.
    • Aby zapisać plik, wybierz pozycję w, a następnie wybierz Enter.
    • Aby zakończyć działanie vi, wprowadź polecenie Zamknij, a następnie wybierz Enter.

    Zanotuj ostatni wiersz tego pliku, ponieważ będzie wymagał modyfikacji:

    image_name: <docker-container-registry>:deepstream-test4-jetson
    

    Zaktualizuj tę sekcję tak, aby wyglądała następująco:

    image_name: deepstream-test4-jetson
    

    Uwaga

    Jeśli ta sekcja nie zostanie zmodyfikowana, próba skompilowania obrazu międzyplatformowego w kolejnych krokach spowoduje wygenerowanie następującego błędu: ConnectionResetError: [Errno 104] Connection reset by peer

    Należy pamiętać, że ta specyfikacja używa obrazu podstawowego z nvcr.io i kopii w deepstream-test4.yaml plikach i parameters.yaml . Punkt wejścia obrazu uruchamia graf deepstream-test4 i zastępuje go wartościami obecnymi w pliku parameters.yaml. Z tego powodu musimy również zaktualizować ten plik, zanim faktycznie skompilujemy kontener.

  4. Wróć do katalogu grafów referencyjnych deepstream-test4 i zmodyfikuj plik parameters.yaml :

    cd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4
    sudo vi parameters.yaml
    

    Zmień wartość na msg-broker-proto-lib /opt/nvidia/deepstream/deepstream/lib/libnvds_azure_edge_proto.so.

    Ponadto zmień wartość na msg-conv-payload-type 1. Ten parametr określa sposób formatowania wynikowych danych wyjściowych komunikatów. Jeśli nie zmienisz tego parametru, dane wyjściowe będą używać zakodowanego w kodzie formatu podanego w przykładach firmy NVIDIA. Format może nie reprezentować klas wykrywania obiektów, jeśli zaktualizujesz model używany w programie NvDsInferVideo.

    Ostateczna zawartość pliku parameters.yaml powinna wyglądać podobnie do następującego przykładu:

    ################################################################################
    # Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.
    #
    # NVIDIA Corporation and its licensors retain all intellectual property
    # and proprietary rights in and to this software, related documentation
    # and any modifications thereto. Any use, reproduction, disclosure or
    # distribution of this software and related documentation without an express
    # license agreement from NVIDIA Corporation is strictly prohibited.
    #
    ################################################################################
    
    components:
    - name: nv_ds_single_src_input39..3c18
      parameters:
        uri: file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
    name: NvDsSingleSrcInput..1b00
    ---
    components:
    - name: nv_ds_stream_mux42..36d8
      parameters:
        batch-size: 1
        height: 1080
        width: 1920
    name: NvDsStreamMux..16d8
    ---
    components:
    - name: nv_ds_msg_conv_broker61..4748
      parameters:
        msg-broker-conn-str: 127.0.0.1;9092;test-topic
        msg-broker-proto-lib: /opt/nvidia/deepstream/deepstream/lib/libnvds_azure_edge_proto.so
        msg-conv-config: /opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test4/dstest4_msgconv_config.txt
        msg-conv-payload-type: 1
        topic: test-topic
        name: NvDsMsgConvBroker..bb00
    
  5. Skompiluj obraz międzyplatformowy na maszynie hosta, uruchamiając następujące polecenie w terminalu:

    cd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4
    sudo container_builder -c ds_test4_container_builder_jetson.yaml -d /opt/nvidia/graph-composer/config/target_aarch64.yaml
    

    Po pomyślnym uruchomieniu kodu wyświetlane są dane wyjściowe zawierające komunikat Successfully tagged deepstream-test4-jetson:latest .

  6. Teraz możesz opublikować ten obraz w rejestrze kontenerów utworzonym w poprzednim module. Uruchom następujący kod w terminalu na hoście, aby oznaczyć obraz nazwą zgodną z użytym wcześniej formatem. W przypadku <serwera> logowania użyj adresu URL rejestru kontenerów.

    sudo docker tag deepstream-test4-jetson <Login Server>/deepstream_test4_jetson:v1
    
  7. Po prawidłowym oznaczeniu obrazu wypchnij obraz do rejestru kontenerów na platformie Azure, wykonując następujące polecenie w terminalu na hoście. W przypadku <serwera> logowania użyj adresu URL rejestru kontenerów.

    sudo docker push <Login Server>/deepstream_test4_jetson:v1
    

Po opublikowaniu obrazu międzyplatformowego w rejestrze kontenerów platformy Azure możesz aprowizować sprzęt osadzony NVIDIA dla środowiska uruchomieniowego usługi IoT Edge i wdrożyć to obciążenie jako moduł usługi IoT Edge.