Exercício - Crie e publique imagens de contêiner DeepStream entre plataformas
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.
Para começar, você deve instalar os
qemu-user-static
pacotes ebinfmt-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
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
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 ods_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 eparameters.yaml
. O ponto de entrada da imagem inicia o gráfico deepstream-test4 e o substitui pelos valores presentes noparameters.yaml
. Por esse motivo, também precisamos atualizar esse arquivo antes de realmente construir o contêiner.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
para1
. 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 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 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.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
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.