연습 - 플랫폼 간 DeepStream 컨테이너 이미지 빌드 및 게시
DeepStream 6.0 container-builder
패키지는 플랫폼 간 컨테이너 이미지를 빌드할 수 있습니다. 이 기능을 사용하여 대상 NVIDIA 임베디드 디바이스에서 ARM64 CPU와 호환되는 컨테이너를 빌드해야 합니다.
Docker가 설치된 DeepStream 6.0 Graph Composer가 있는 x86 기반 호스트 시스템에서 다음 단계를 완료합니다. 이 단계에서는 NVIDIA DeepStream 개발 환경 설정 및 구성 및 Azure를 사용한 NVIDIA DeepStream Graph Composer 소개에서 설명한 단계를 완료했다고 가정합니다.
시작하려면
qemu-user-static
및binfmt-support
패키지를 설치해야 합니다. 패키지는 Docker에서 플랫폼 간 지원에 필요한 종속성입니다. 이 단계를 수행하려면 호스트의 터미널에서 다음 명령을 실행합니다.sudo apt install qemu-user-static binfmt-support
설치가 완료되면 호스트에서 다음 명령을 실행하여 Docker에서 플랫폼 간 지원을 구성합니다.
sudo docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes --credential yes
다음으로 deepstream-test4 그래프를 지원하는 ARM64 기반 컨테이너를 생성하는
container-builder
구성을 만듭니다. 시작하려면 /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4로 이동하고 다음을 사용하여ds_test4_container_builder_jetson.yaml
파일을 엽니다.cd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4 sudo vi ds_test4_container_builder_jetson.yaml
수정되지 않은
ds_test4_container_builder_jetson.yaml
파일의 내용은 다음과 같습니다.%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
참고
다음은 ds_test4_container_builder_jetson.yaml 파일을 편집할 때 vi 편집기를 사용하는 몇 가지 팁입니다.
- 삽입 모드로 전환하려면 i를 선택합니다. 그런 다음, 변경할 수 있습니다.
- 삽입 모드를 종료하고 표준 모드로 돌아가려면 Esc를 선택합니다.
- 파일을 저장하고 종료하려면 x를 선택한 다음, Enter를 선택합니다.
- 파일을 저장하려면 w를 선택한 다음, Enter를 선택합니다.
- vi를 종료하려면 Quit를 입력한 다음, Enter를 선택합니다.
수정이 필요하므로 이 파일의 마지막 줄을 기록해 둡니다.
image_name: <docker-container-registry>:deepstream-test4-jetson
이 섹션을 다음과 같이 업데이트합니다.
image_name: deepstream-test4-jetson
참고
이 섹션을 수정하지 않으면 이후 단계에서 플랫폼 간 이미지를 빌드하려고 하면 다음 오류가 발생합니다.
ConnectionResetError: [Errno 104] Connection reset by peer
이 사양은 nvcr.io의 기본 이미지를 사용하고
deepstream-test4.yaml
및parameters.yaml
파일에 복사합니다. 이미지 진입점은 deepstream-test4 그래프를 시작하고parameters.yaml
에 있는 값으로 재정의합니다. 따라서 컨테이너를 실제로 빌드하기 전에 이 파일도 업데이트해야 합니다.deepstream-test4 참조 그래프의 디렉터리로 돌아가서 parameters.yaml 파일을 편집합니다.
cd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test4 sudo vi parameters.yaml
msg-broker-proto-lib
의 값을/opt/nvidia/deepstream/deepstream/lib/libnvds_azure_edge_proto.so
로 변경합니다.또한
msg-conv-payload-type
의 값을1
로 변경합니다. 이 매개 변수는 결과 메시지 출력의 형식을 지정하는 방법을 제어합니다. 이 매개 변수를 변경하지 않으면 출력은 NVIDIA 샘플에 제공된 하드 코딩된 형식을 사용합니다.NvDsInferVideo
에서 사용된 모델을 업데이트하는 경우 형식이 개체 감지 클래스를 나타내지 않을 수 있습니다.parameters.yaml의 최종 내용은 다음 예제와 같습니다.
################################################################################ # 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
터미널에서 다음 명령을 실행하여 호스트 컴퓨터에서 플랫폼 간 이미지를 빌드합니다.
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
코드가 성공적으로 실행되면
Successfully tagged deepstream-test4-jetson:latest
메시지가 포함된 출력이 나타납니다.이제 이전 모듈에서 만든 컨테이너 레지스트리에 이 이미지를 게시할 준비가 되었습니다. 호스트의 터미널에서 다음 코드를 실행하여 이전에 사용한 형식을 따르는 이름으로 이미지에 태그를 지정합니다. <로그인 서버>의 경우 컨테이너 레지스트리의 URL을 사용합니다.
sudo docker tag deepstream-test4-jetson <Login Server>/deepstream_test4_jetson:v1
이제 이미지에 태그가 올바르게 지정되었으므로 호스트의 터미널에서 다음 명령을 실행하여 Azure의 컨테이너 레지스트리에 이미지를 푸시합니다. <로그인 서버>의 경우 컨테이너 레지스트리의 URL을 사용합니다.
sudo docker push <Login Server>/deepstream_test4_jetson:v1
이제 플랫폼 간 이미지가 Azure 컨테이너 레지스트리에 게시되었으므로 IoT Edge 런타임에 대한 NVIDIA 임베디드 하드웨어를 프로비전하고 이 워크로드를 IoT Edge 모듈로 배포할 준비가 되었습니다.