Exercício - Crie e publique imagens de contêiner DeepStream entre plataformas

Concluído

O pacote DeepStream 6.0 container-builder pode criar imagens de contêiner entre plataformas. Você precisará usar esse recurso para criar um contêiner compatível com a CPU ARM64 em seu dispositivo incorporado NVIDIA de destino.

Conclua as etapas a seguir em uma máquina host baseada em x86 que tenha o DeepStream 6.0 Graph Composer com Docker instalado. As etapas pressupõem que você concluiu as etapas descritas em Configurar e configurar um ambiente de desenvolvimento NVIDIA DeepStream e Introdução ao NVIDIA DeepStream Graph Composer com Azure.

  1. Para começar, você deve instalar os qemu-user-static pacotes e binfmt-support . Os pacotes são dependências necessárias para suporte entre plataformas no Docker. Para executar esta etapa, execute os seguintes comandos em um terminal no host:

    sudo apt install qemu-user-static binfmt-support
    
  2. Quando a instalação estiver concluída, execute os seguintes comandos no host para configurar o suporte entre plataformas no Docker:

    sudo docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes --credential yes 
    
  3. Em seguida, você criará uma container-builder configuração que produzirá um contêiner baseado em ARM64 para suportar o gráfico deepstream-test4. Para começar, vá para /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4 e abra o ds_test4_container_builder_jetson.yaml arquivo com:

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

    O conteúdo do arquivo não modificado ds_test4_container_builder_jetson.yaml é mostrado abaixo:

        %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

    Aqui estão algumas dicas para usar o editor vi quando você edita o arquivo ds_test4_container_builder_jetson.yaml :

    • Para entrar no modo de inserção, selecione i. Em seguida, você pode fazer alterações.
    • Para sair do modo de inserção e voltar ao modo normal, selecione Esc.
    • Para guardar o ficheiro e sair, selecione x e, em seguida, selecione Enter.
    • Para guardar o ficheiro, selecione w e, em seguida, selecione Enter.
    • Para sair do vi, digite Sair e selecione Enter.

    Tome nota da última linha deste ficheiro, pois será necessária uma modificação:

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

    Atualize esta seção para ter a seguinte aparência:

    image_name: deepstream-test4-jetson
    

    Nota

    Se você não modificar esta seção, as tentativas de criar a imagem de plataforma cruzada em etapas posteriores produzirão o seguinte erro: ConnectionResetError: [Errno 104] Connection reset by peer

    Tenha em atenção que esta especificação utiliza uma imagem base de nvcr.io e cópias nos deepstream-test4.yaml ficheiros e parameters.yaml . O ponto de entrada da imagem inicia o gráfico deepstream-test4 e o substitui pelos valores presentes no parameters.yaml. Por esse motivo, também precisamos atualizar esse arquivo antes de realmente construir o contêiner.

  4. Retorne ao diretório dos gráficos de referência deepstream-test4 e edite o arquivo parameters.yaml :

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

    Altere o valor de msg-broker-proto-lib para /opt/nvidia/deepstream/deepstream/lib/libnvds_azure_edge_proto.so.

    Além disso, altere o valor de msg-conv-payload-type para 1. Este parâmetro controla como a saída da mensagem resultante é formatada. Se você não alterar esse parâmetro, a saída usará um formato codificado fornecido nos exemplos NVIDIA. O formato pode não representar suas classes de deteção de objeto se você atualizar o modelo usado no NvDsInferVideo.

    O conteúdo final de parameters.yaml deve ser semelhante ao seguinte exemplo:

    ################################################################################
    # 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. Crie a imagem de plataforma cruzada na máquina host executando o seguinte comando em um 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
    

    Depois que o código é executado com êxito, a saída que contém a mensagem Successfully tagged deepstream-test4-jetson:latest aparece.

  6. Agora, você está pronto para publicar essa imagem no registro de contêiner criado no módulo anterior. Execute o código a seguir em um terminal no host para marcar a imagem com um nome que siga o formato usado anteriormente. Para <Servidor de Logon>, use a URL do seu registro de contêiner.

    sudo docker tag deepstream-test4-jetson <Login Server>/deepstream_test4_jetson:v1
    
  7. Com sua imagem agora marcada corretamente, envie a imagem para seu registro de contêiner no Azure executando o seguinte comando em um terminal no host. Para <Servidor de Logon>, use a URL do seu registro de contêiner.

    sudo docker push <Login Server>/deepstream_test4_jetson:v1
    

Com sua imagem de plataforma cruzada agora publicada no registro de contêiner do Azure, você está pronto para provisionar seu hardware incorporado NVIDIA para o tempo de execução do IoT Edge e implantar essa carga de trabalho como um módulo do IoT Edge.