Exercice - Créer et publier des images conteneur DeepStream multiplateformes
Le package DeepStream 6.0 container-builder
peut générer des images de conteneur multiplateforme. Vous devez utiliser cette fonctionnalité pour créer un conteneur compatible avec l’UC ARM64 sur votre appareil incorporé NVIDIA cible.
Effectuez les étapes suivantes sur un ordinateur hôte x86 sur lequel DeepStream 6.0 Graph Composer avec Docker est installé. Les étapes partent du principe que vous avez effectué les étapes décrites dans Installer et configurer un environnement de développement NVIDIA DeepStream et Présentation de NVIDIA DeepStream Graph Composer avec Azure.
Pour commencer, vous devez installer les packages
qemu-user-static
etbinfmt-support
. Les packages sont des dépendances nécessaires pour la prise en charge multiplateforme dans Docker. Pour cette étape, exécutez les commandes suivantes dans un terminal sur l’ordinateur hôte :sudo apt install qemu-user-static binfmt-support
Une fois l’installation terminée, exécutez les commandes suivantes sur l’ordinateur hôte afin de configurer la prise en charge multiplateforme dans Docker :
sudo docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes --credential yes
Vous allez ensuite créer une configuration
container-builder
qui produira un conteneur ARM64 pour prendre en charge le graphique deepstream-test4. Pour commencer, accédez à /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4 et ouvrez le fichierds_test4_container_builder_jetson.yaml
avec :cd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4 sudo vi ds_test4_container_builder_jetson.yaml
Le contenu du fichier non modifié
ds_test4_container_builder_jetson.yaml
est indiqué ci-dessous :%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
Notes
Voici quelques conseils pour l’utilisation de l’éditeur vi lorsque vous modifiez le fichier ds_test4_container_builder_jetson. YAML :
- Pour passer en mode Insertion, sélectionnez i. Vous pouvez ensuite apporter des modifications.
- Pour quitter le mode Insertion et revenir au mode normal, sélectionnez Échap.
- Pour enregistrer le fichier et quitter, sélectionnez x, puis Entrée.
- Pour enregistrer le fichier, sélectionnezw, puis Entrée.
- Pour quitter vi, entrez Quitter, puis sélectionnez Entrée.
Notez la dernière ligne de ce fichier car il vous faudra la modifier :
image_name: <docker-container-registry>:deepstream-test4-jetson
Mettez à jour cette section pour qu’elle se présente comme suit :
image_name: deepstream-test4-jetson
Notes
À défaut de modifier cette section, les tentatives de génération de l’image multiplateforme lors des étapes ultérieures produiront l’erreur suivante :
ConnectionResetError: [Errno 104] Connection reset by peer
Notez que cette spécification utilise une image de base de nvcr.io et copie les fichiers
deepstream-test4.yaml
etparameters.yaml
. Le point d’entrée de l’image démarre le graphique deepstream-test4 et le remplace par les valeurs présentes dansparameters.yaml
. Dès lors, il nous faut mettre à jour ce fichier avant de générer le conteneur.Revenez au répertoire des graphiques de référence deepstream-test4, puis modifiez le fichier parameters.yaml :
cd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4 sudo vi parameters.yaml
Remplacez la valeur de
msg-broker-proto-lib
par/opt/nvidia/deepstream/deepstream/lib/libnvds_azure_edge_proto.so
.Remplacez également la valeur de
msg-conv-payload-type
par1
. Ce paramètre contrôle la manière dont la sortie de message qui en résulte est mise en forme. À défaut de modifier ce paramètre, la sortie utilise un format codé en dur fourni dans les exemples NVIDIA. Le format peut ne pas représenter vos classes de détection d’objets si vous mettez à jour le modèle utilisé dansNvDsInferVideo
.Le contenu final de parameters.yaml doit ressembler à l’exemple suivant :
################################################################################ # 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
Générez l’image multiplateforme sur l’ordinateur hôte en exécutant la commande suivante dans un terminal :
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
Une fois le code exécuté avec succès, la sortie contenant le message
Successfully tagged deepstream-test4-jetson:latest
s’affiche.Vous êtes maintenant prêt à publier cette image dans le registre de conteneurs que vous avez créé dans le module précédent. Exécutez le code suivant dans un terminal sur l’hôte pour identifier l’image avec un nom suivant le format que vous avez utilisé précédemment. Pour <Serveur de connexion>, utilisez l’URL de votre registre de conteneurs.
sudo docker tag deepstream-test4-jetson <Login Server>/deepstream_test4_jetson:v1
Une fois votre image correctement identifiée, envoyez-la (push) vers votre registre de conteneurs dans Azure en exécutant la commande suivante dans un terminal sur l’hôte. Pour <Serveur de connexion>, utilisez l’URL de votre registre de conteneurs.
sudo docker push <Login Server>/deepstream_test4_jetson:v1
Maintenant que votre image multiplateforme est publiée dans Azure Container Registry, vous êtes prêt à approvisionner votre matériel incorporé NVIDIA pour le runtime IoT Edge et à déployer cette charge de travail en tant que module IoT Edge.