기본기/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