목차
안녕하세요 윤도현입니다. 이번 글에서는 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
'기본기 > MLOps' 카테고리의 다른 글
[MLOps] Deepstream 3 - 실습(Multi-stream Pose Estimation) (0) | 2025.03.27 |
---|---|
[MLOps] Deepstream 1 - 기본개념 (0) | 2025.03.26 |
[MLOps] Airflow 3 - 실습(ML 모델 학습/실험 자동화) (0) | 2025.03.25 |
[MLOps] Airflow 2 - 환경세팅(with docker) (0) | 2025.03.25 |
[MLOps] Airflow 1 - 기본개념 (0) | 2025.03.25 |