Ćwiczenie — kompilowanie i publikowanie międzyplatformowych obrazów kontenerów DeepStream
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.
Aby rozpocząć, należy zainstalować
qemu-user-static
pakiety ibinfmt-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
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
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 zads_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 iparameters.yaml
. Punkt wejścia obrazu uruchamia graf deepstream-test4 i zastępuje go wartościami obecnymi w plikuparameters.yaml
. Z tego powodu musimy również zaktualizować ten plik, zanim faktycznie skompilujemy kontener.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 programieNvDsInferVideo
.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
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
.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
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.