Ejercicio: Compilación y publicación de imágenes de contenedor de DeepStream multiplataforma

Completado

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.

  1. Para comenzar, debe instalar los paquetes qemu-user-static y binfmt-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
    
  2. 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 
    
  3. 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 archivo ds_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 y parameters.yaml. El punto de entrada de la imagen inicia el grafo deepstream-test4 y lo reemplaza por los valores presentes en parameters.yaml. Por este motivo, también es necesario actualizar este archivo antes de compilar realmente el contenedor.

  4. 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 a 1. 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 en NvDsInferVideo.

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

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