기본기/MLOps

[MLOps] DeepStream 2 - 환경세팅(with docker)

dohyeon2 2025. 3. 26. 17:40

목차

    안녕하세요 윤도현입니다. 이번 글에서는 Ubuntu 서버에 DeepStream SDK를 docker로 설치하고 세팅하는 방법에 대해 정리해보겠습니다.
    2025년 3월 27일 기준 DeepStream SDK는 공식적으로 Linux(x86)와 Jetpack 운영체제만을 지원합니다.
     
    관련글
    [1] [MLOps] Deepstream 1 - 기본개념
    [2][MLOps] Deepstream 2 - 환경세팅(with docker)
    [3][MLOps] Deepstream 3 - 실습
     

     

    1. Pre-requirement

    DeepStream의 Pre-requirement를 정리해보면 다음과 같습니다.

    • 하지만 우리는 도커를 이용해서 이미 세팅된 환경(이미지)를 다운받을 것이기 때문에 도커 버전만 신경써주시면 됩니다.
    • Docker version >==20.10.13
    • DeepStream NVIDIA NGC 홈페이지에 나와있는 필수 구성요소 섹션 참조(링크)

    Case 1. 실행만 필요할 때

    2. Deepstream_dockers github repo clone

    git clone https://github.com/NVIDIA-AI-IOT/deepstream_dockers.git

     

    3. DeepStream SDK release 설치

    # clone한 repo 폴더안에 DeepStream SDK release 파일 다운로드(/deepstream_dockers/)
    wget --content-disposition 'https://api.ngc.nvidia.com/v2/resources/org/nvidia/deepstream/7.1/files?redirect=true&path=deepstream_sdk_v7.1.0_x86_64.tbz2' -O deepstream_sdk_v7.1.0_x86_64.tbz2
    
    # ./docker/ 폴더에 복사
    cp deepstream_sdk_v7.1.0_x86_64.tbz2 ./docker/

    자신에게 맞는 DeepStreamSDK release 파일을 설치하고 ./docker/ 폴더에 복사합니다.(링크)
     

    4. TensorRT, cuDNN 설치

    이 과정은 Deepstream x86-Triton 이미지를 실행할 경우 생략 가능합니다.
    저는 Deepstream x86-sample 이미지를 실행하기 때문에 필요합니다.

    # NVIDIA CUDA+TensorRT 패키지 설치
    wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.3.0/local_repo/nv-tensorrt-local-repo-ubuntu2204-10.3.0-cuda-12.5_1.0-1_amd64.deb
    # ./docker/ 폴더에 복사
    cp nv-tensorrt-local-repo-ubuntu2204-10.3.0-cuda-12.5_1.0-1_amd64.deb ./docker/
    
    # cuDNN 설치
    wget https://developer.download.nvidia.com/compute/cudnn/9.3.0/local_installers/cudnn-local-repo-ubuntu2204-9.3.0_1.0-1_amd64.deb
    # ./docker/ 폴더에 복사
    cp cudnn-local-repo-ubuntu2204-9.3.0_1.0-1_amd64.deb ./docker/

     

    5. x86 Build setup

    ./setup_x86_build.sh

     

    6.Building x86 DeepStream sample docker 이미지

    cd docker
    sudo docker build --network host --progress=plain -t deepstream:7.1.0-samples-local -f Dockerfile ..

    반드시 x86 Build setup command 이후 실행해야 합니다.
    (처음 실행하면 시간이 꽤 오래 걸립니다...)
     

    7. 샘플코드 실행

    앞선 과정을 마쳤다면 ubuntu 22.04 운영체제에 DeepStream SDK 환경세팅은 끝났습니다.
    잘 설치되었는지 샘플코드를 실행해보겠습니다.
     
    7.1 도커 컨테이너 실행

    sudo docker run --gpus all -it \
      --network=host \
      --privileged \
      -e DISPLAY=$DISPLAY \
      -v /tmp/.X11-unix:/tmp/.X11-unix \
      -v /dev:/dev \
      deepstream:7.1.0-samples-local

     
    7.2 멀티미디어 처리 패키지 추가 설치
    DeepStream 6.3 이후 버전부터 컨테이너에 기본적으로 일부 멀티미디어 라이브러리(cpu 인코딩/디코딩, 오디오 데이터 파싱)를 포함하지 않습니다. MP4 파일 등의 처리를 위해서는 컨테이너 내부에서 아래 스크립트를 실행해서 추가 패키지를 설치해야 합니다.

    /opt/nvidia/deepstream/deepstream/user_additional_install.sh

     
    7.3 도커 실행에 앞서 외부 애플리케이션이 Host 머신의 디스플레이에 연결하도록 허용

    export DISPLAY=:0.0 # Display 환경변수 설정
    xhost + # 외부 애플리케이션의 호스트머신 디스플레이 접속 허용

     
    7.4 샘플코드 실행

    cd /usr/bin

    컨테이너 내부에서 제공되는 샘플 애플리케이션은 /usr/bin 디렉토리에 위치해 있습니다.

    # 샘플 애플리케이션 실행
    ./deepstream-app -c <config_file>
    
    # 실행 예시
    ./deepstream-app -c /opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt

    빌드된 실행 파일을 사용하여 샘플 애플리케이션을 실행할 수 있습니다. 여기서 <config_file>은 해당 애플리케이션의 설정 파일 경로입니다. 기본 제공되는 설정 파일은 /opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app 디렉토리에 위치해 있습니다.

    저는 DeepStream sample 코드중에 4개의 video stream에서 Object Detection을 수행하는 예제를 실행했습니다. 실행결과 4개의 스트림에서 30FPS로 Object Detection이 성공적으로 진행됩니다!!
     
     

    각 스트림의 FPS는 log를 통해 확인할 수 있습니다 :)
     


    Case 2. 개발할 때(plugin 있는 모델 쓰거나 .cu 빌드 필요할 때)

    1. Docker image 다운(with nvcc)

    docker pull nvcr.io/nvidia/deepstream:7.1-gc-triton-devel

     

    2. 컨테이너 실행

    docker run --gpus all -it --network=host --privileged \
      -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \
      -w /opt/nvidia/deepstream/deepstream-7.1 \
      nvcr.io/nvidia/deepstream:7.1-gc-triton-devel

     
    2.1 멀티미디어 처리 패키지 추가 설치
    DeepStream 6.3 이후 버전부터 컨테이너에 기본적으로 일부 멀티미디어 라이브러리(cpu 인코딩/디코딩, 오디오 데이터 파싱)를 포함하지 않습니다. MP4 파일 등의 처리를 위해서는 컨테이너 내부에서 아래 스크립트를 실행해서 추가 패키지를 설치해야 합니다.

    /opt/nvidia/deepstream/deepstream/user_additional_install.sh

     
    2.2 nvcc, deepstream-app 설치여부 확인

    nvcc --version
    deepstream-app --version

     
     

    3. Python 바인딩 설치

    3.1 필수 패키지 설치

    # 필수 의존성 설치
    apt install python3-gi python3-dev python3-gst-1.0 python-gi-dev git meson \
        python3 python3-pip python3.10-dev cmake g++ build-essential libglib2.0-dev \
        libglib2.0-dev-bin libgstreamer1.0-dev libtool m4 autoconf automake libgirepository1.0-dev libcairo2-dev
        
    # PyPA 모듈 설치
    pip3 install build

     
    3.2 Initialization of submodules

    cd /opt/nvidia/deepstream/deepstream/sources/
    git clone https://github.com/NVIDIA-AI-IOT/deepstream_python_apps
    
    # Initialize
    cd /opt/nvidia/deepstream/deepstream/sources/deepstream_python_apps/
    git submodule update --init
    python3 bindings/3rdparty/git-partial-submodule/git-partial-submodule.py restore-sparse

     
    3.3 Gst-python 설치

    cd bindings/3rdparty/gstreamer/subprojects/gst-python/meson setup build
    cd build
    ninja
    ninja install

     
    3.4 바인딩 컴파일(for x86)

    cd /opt/nvidia/deepstream/deepstream/sources/deepstream_python_apps/bindings
    export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc)
    python3 -m build

     
    3.5 cuda 모듈 설치

    pip install nvidia-pyindex
    pip install nvidia-cuda-runtime-cu11

     
    3.5 (선택) No module named 'cuda" 오류 발생 시

    pip3 install cuda-python

     
    4. 샘플 코드 실행
    저는 multi-stream 4개를 동시에 inference 하는 예제를 실행해보겠습니다.

    cd /opt/nvidia/deepstream/deepstream/sources/deepstream_python_apps/apps
    cd deepstream-test3
    python3 deepstream_test_3.py <sample video path>
    
    # 예시
    python3 deepstream_test_3.py \
      -i file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_720p.h264 \
         file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_720p.h264 \
         file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_720p.h264 \
         file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_720p.h264 \
      -c dstest3_pgie_config.txt \
      -g nvinfer \
      --file-loop \
      --no-display

    각 스트림의 FPS는 log를 통해 확인할 수 있습니다 :)

     
    Reference
    [1] NVIDIA-AI-IOT github
    [2] NVIDIA NGC
    [3] NVIDIA-AI-IOT/deepstream_python_apps
    [4] https://rorsi.tistory.com/86