Exercício – Criar e publicar imagens de contêiner multiplataforma do DeepStream
O pacote do DeepStream 6.0 container-builder
pode criar imagens de contêiner multiplataforma. Você precisará usar essa capacidade para criar um contêiner compatível com a CPU ARM64 no seu dispositivo NVIDIA inserido de destino.
Conclua as etapas a seguir em um computador host baseado em x86 que tenha o DeepStream 6.0 Graph Composer com o Docker instalado. As etapas consideram que você concluiu as etapas descritas em Instalar e configurar um ambiente de desenvolvimento NVIDIA DeepStream e Introdução ao NVIDIA DeepStream Graph Composer com o Azure.
Para começar, você deve instalar os pacotes
qemu-user-static
ebinfmt-support
. Eles são dependências necessárias para o suporte multiplataforma no Docker. Para concluir esta etapa, execute os seguintes comandos em um terminal no host:sudo apt install qemu-user-static binfmt-support
Quando a instalação for concluída, execute os seguintes comandos no host para configurar o suporte multiplataforma no Docker:
sudo docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes --credential yes
Depois, você criará uma configuração
container-builder
que produzirá um contêiner baseado em ARM64 para dar suporte ao grafo deepstream-test4. Para começar, acesse /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4 e abra o arquivods_test4_container_builder_jetson.yaml
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
Observação
Confira algumas dicas para usar o editor vi ao editar o arquivo ds_test4_container_builder_jetson.yaml:
- Para entrar no modo de inserção, selecione i. Depois, você pode fazer alterações.
- Para sair do modo de inserção e retornar ao modo normal, pressione ESC.
- Para salvar o arquivo e sair, pressione x e Enter.
- Para salvar o arquivo, pressione w e Enter.
- Para sair do vi, digite Quit e pressione Enter.
Anote a última linha desse arquivo, pois ele exigirá uma modificação:
image_name: <docker-container-registry>:deepstream-test4-jetson
Atualize essa seção para que se pareça com o seguinte:
image_name: deepstream-test4-jetson
Observação
Se você não modificar essa seção, as tentativas de criar a imagem multiplataforma nas próximas etapas produzirão o seguinte erro:
ConnectionResetError: [Errno 104] Connection reset by peer
Observe que essa especificação usa uma imagem base de nvcr.io e das cópias nos arquivos
deepstream-test4.yaml
eparameters.yaml
. O ponto de entrada da imagem inicia o grafo deepstream-test4 e o substitui pelos valores presentes emparameters.yaml
. Por esse motivo, também precisamos atualizar esse arquivo antes de realmente criarmos o contêiner.Retorne ao diretório dos grafos 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
para1
. Esse 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 embutido em código fornecido nos exemplos da NVIDIA. O formato pode não representar suas classes de detecção de objetos se você atualizar o modelo usado noNvDsInferVideo
.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
Crie a imagem multiplataforma no computador 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 for executado com êxito, a saída que contém a mensagem
Successfully tagged deepstream-test4-jetson:latest
será exibida.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 segue 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
Com sua imagem agora marcada corretamente, envie-a para o seu registro de contêiner no Azure executando o comando a seguir 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 a imagem multiplataforma agora publicada no registro de contêiner do Azure, você está pronto para provisionar o hardware NVIDIA inserido para o runtime do IoT Edge e implantar essa carga de trabalho como um módulo do IoT Edge.