연습 - 플랫폼 간 DeepStream 컨테이너 이미지 빌드 및 게시

완료됨

DeepStream 6.0 container-builder 패키지는 플랫폼 간 컨테이너 이미지를 빌드할 수 있습니다. 이 기능을 사용하여 대상 NVIDIA 임베디드 디바이스에서 ARM64 CPU와 호환되는 컨테이너를 빌드해야 합니다.

Docker가 설치된 DeepStream 6.0 Graph Composer가 있는 x86 기반 호스트 시스템에서 다음 단계를 완료합니다. 이 단계에서는 NVIDIA DeepStream 개발 환경 설정 및 구성Azure를 사용한 NVIDIA DeepStream Graph Composer 소개에서 설명한 단계를 완료했다고 가정합니다.

  1. 시작하려면 qemu-user-staticbinfmt-support 패키지를 설치해야 합니다. 패키지는 Docker에서 플랫폼 간 지원에 필요한 종속성입니다. 이 단계를 수행하려면 호스트의 터미널에서 다음 명령을 실행합니다.

    sudo apt install qemu-user-static binfmt-support
    
  2. 설치가 완료되면 호스트에서 다음 명령을 실행하여 Docker에서 플랫폼 간 지원을 구성합니다.

    sudo docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes --credential yes 
    
  3. 다음으로 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.yamlparameters.yaml 파일에 복사합니다. 이미지 진입점은 deepstream-test4 그래프를 시작하고 parameters.yaml에 있는 값으로 재정의합니다. 따라서 컨테이너를 실제로 빌드하기 전에 이 파일도 업데이트해야 합니다.

  4. 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
    
  5. 터미널에서 다음 명령을 실행하여 호스트 컴퓨터에서 플랫폼 간 이미지를 빌드합니다.

    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 메시지가 포함된 출력이 나타납니다.

  6. 이제 이전 모듈에서 만든 컨테이너 레지스트리에 이 이미지를 게시할 준비가 되었습니다. 호스트의 터미널에서 다음 코드를 실행하여 이전에 사용한 형식을 따르는 이름으로 이미지에 태그를 지정합니다. <로그인 서버>의 경우 컨테이너 레지스트리의 URL을 사용합니다.

    sudo docker tag deepstream-test4-jetson <Login Server>/deepstream_test4_jetson:v1
    
  7. 이제 이미지에 태그가 올바르게 지정되었으므로 호스트의 터미널에서 다음 명령을 실행하여 Azure의 컨테이너 레지스트리에 이미지를 푸시합니다. <로그인 서버>의 경우 컨테이너 레지스트리의 URL을 사용합니다.

    sudo docker push <Login Server>/deepstream_test4_jetson:v1
    

이제 플랫폼 간 이미지가 Azure 컨테이너 레지스트리에 게시되었으므로 IoT Edge 런타임에 대한 NVIDIA 임베디드 하드웨어를 프로비전하고 이 워크로드를 IoT Edge 모듈로 배포할 준비가 되었습니다.