Ejercicio: Compilación y publicación de imágenes de contenedor de DeepStream multiplataforma
El paquete DeepStream 6.0 container-builder
puede compilar imágenes de contenedor multiplataforma. Deberá usar esta capacidad para crear un contenedor compatible con la CPU ARM64 en el dispositivo incrustado NVIDIA de destino.
Complete los siguientes pasos en un equipo host basado en x86 que tenga instalado DeepStream 6.0 Graph Composer con Docker. Se supone que ha completado los pasos descritos en Configuración y configuración de un entorno de desarrollo de NVIDIA DeepStream e Introducción a NVIDIA DeepStream Graph Composer con Azure.
Para comenzar, debe instalar los paquetes
qemu-user-static
ybinfmt-support
. Los paquetes son dependencias necesarias para la compatibilidad multiplataforma de Docker. Para realizar este paso, ejecute los siguientes comandos en un terminal del host:sudo apt install qemu-user-static binfmt-support
Cuando finalice la instalación, ejecute los siguientes comandos en el host para configurar la compatibilidad multiplataforma de Docker:
sudo docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes --credential yes
A continuación, creará una configuración
container-builder
que producirá un contenedor basado en ARM64 para admitir el grafo deepstream-test4. Para empezar, vaya a /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4 y abra el archivods_test4_container_builder_jetson.yaml
con:cd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4 sudo vi ds_test4_container_builder_jetson.yaml
A continuación se muestra el contenido del archivo
ds_test4_container_builder_jetson.yaml
sin modificar:%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
Nota:
Estas son algunas sugerencias para usar el editor vi al editar el archivo ds_test4_container_builder_jetson.yaml:
- Para entrar en el modo de inserción, seleccione i. A continuación, puede hacer cambios.
- Para salir del modo de inserción y volver al modo normal, seleccione Esc.
- Para guardar el archivo, seleccione x y, a continuación, seleccione Enter.
- Para guardar el archivo, seleccione w y, a continuación, seleccione Enter.
- Para salir de vi, escriba Salir y, a continuación, seleccione Enter.
Tome nota de la última línea de este archivo, ya que requerirá una modificación:
image_name: <docker-container-registry>:deepstream-test4-jetson
Actualice esta sección para que tenga este aspecto:
image_name: deepstream-test4-jetson
Nota:
Si no modifica esta sección, los intentos de compilar la imagen multiplataforma en pasos posteriores producirán el siguiente error:
ConnectionResetError: [Errno 104] Connection reset by peer
Tenga en cuenta que esta especificación usa una imagen base de nvcr.io y copia en los archivos
deepstream-test4.yaml
yparameters.yaml
. El punto de entrada de la imagen inicia el grafo deepstream-test4 y lo reemplaza por los valores presentes enparameters.yaml
. Por este motivo, también es necesario actualizar este archivo antes de compilar realmente el contenedor.Vuelva al directorio de los grafos de referencia deepstream-test4 y edite el archivo parameters.yaml:
cd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4 sudo vi parameters.yaml
Cambie el valor de
msg-broker-proto-lib
a/opt/nvidia/deepstream/deepstream/lib/libnvds_azure_edge_proto.so
.Además, cambie el valor de
msg-conv-payload-type
a1
. Este parámetro controla cómo se da formato a la salida del mensaje resultante. Si no cambia este parámetro, la salida usa un formato codificado de forma rígida que se proporciona en los ejemplos de NVIDIA. Es posible que el formato no represente las clases de detección de objetos si actualiza el modelo usado enNvDsInferVideo
.El contenido final de parameters.yaml debe parecerse al siguiente ejemplo:
################################################################################ # 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
Ejecute el siguiente comando en un terminal para compilar la imagen multiplataforma en el equipo host:
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
Una vez que el código se ejecuta correctamente, aparece la salida que contiene el mensaje
Successfully tagged deepstream-test4-jetson:latest
.Ahora, está listo para publicar esta imagen en el registro de contenedor que creó en el módulo anterior. Ejecute el siguiente código en un terminal del host para etiquetar la imagen con un nombre que siga el formato que usó anteriormente. En <Servidor de inicio de sesión>, use la dirección URL del registro de contenedor.
sudo docker tag deepstream-test4-jetson <Login Server>/deepstream_test4_jetson:v1
Con la imagen ahora etiquetada correctamente, ejecute el siguiente comando en un terminal del host para insertarla en el registro de contenedor en Azure. En <Servidor de inicio de sesión>, use la dirección URL del registro de contenedor.
sudo docker push <Login Server>/deepstream_test4_jetson:v1
Con la imagen multiplataforma publicada en el registro de contenedor de Azure, está listo para aprovisionar el hardware incrustado de NVIDIA para el entorno de ejecución de IoT Edge e implementar esta carga de trabajo como un módulo IoT Edge.