この記事のポイント
- DeepStream 7.1(CUDA 12.6)は
nvcr.io/nvidia/deepstream:7.1-samples-multiarchでそのまま動く — RTX 4090 + Ubuntu 22.04 で動作確認済み - NVIDIA Container Toolkit を先に入れると
--gpus allで GPU をコンテナに渡せる - パイプラインは
deepstream-app -c <設定ファイル>一行で起動できる - サンプル設定(
/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/)がそのまま使えて、動作確認に最適
「カメラ映像から人や車をリアルタイムで検出したい」という用途を、PC 1台で実現するのが NVIDIA DeepStream です。GPU デコード → AI 推論 → オブジェクト追跡 → 描画出力をパイプラインとして繋げるフレームワークで、GStreamer プラグインとして実装されています。
本記事では、RTX 4090 + Ubuntu 22.04.5 LTS の環境でコンテナ版 DeepStream 7.1 を動かすまでの手順を、実際のコマンド出力付きで解説します。
注意
DeepStream を GPU で動かすには NVIDIA Container Toolkit のインストールが必須です。本記事のコマンドは Ubuntu 22.04 LTS で検証しています。Ubuntu 24.04 や WSL2 環境ではパッケージ名やパスが異なる場合があります。
DeepStream とは何か
DeepStream は NVIDIA が提供する映像解析 SDK です。GStreamer というオープンソースのマルチメディアフレームワーク上に、GPU アクセラレーションされた専用プラグインを重ねた構成になっています。
「なぜ普通の Python + PyTorch じゃだめなの?」という疑問を持つ方も多いと思います。Python で映像をフレームごとに読んで推論する場合、デコード・前処理・後処理のすべてを CPU が担います。DeepStream はデコードから描画まで GPU 側に載せるため、同じ GPU スペックで 4〜8 本のカメラ映像を並列処理できます。実際に公式が出しているベンチマークでは、RTX 4090 相当の GPU で 1080p × 30fps のストリームを 16 本以上同時処理しています。

パイプラインの流れは上図の通りです。映像ソース(RTSP / USB カメラ / ファイル)を受けて GPU デコード(nvv4l2decoder)、複数ストリームをバッチ化(nvstreammux)、TensorRT でリアルタイム推論(nvinfer)、オブジェクト追跡(nvtracker)、検出枠の描画(nvdsosd)、最後に出力(ファイル / RTSP / 画面表示)という流れです。
動作確認済み環境


上の数値は nvidia-smi と docker run で実際に取得したものです。
| 項目 | 今回の環境 | DeepStream 7.1 最低要件 |
|---|---|---|
| OS | Ubuntu 22.04.5 LTS | Ubuntu 20.04 / 22.04 |
| GPU | NVIDIA RTX 4090 | Maxwell 世代以降(compute 5.0+) |
| ドライバ | 565.57.01 | 535 以上 |
| CUDA(ドライバ対応) | 12.7 | 12.x |
| DeepStream バージョン | 7.1.0 | — |
| GStreamer(Ubuntu 22.04) | 1.20.3 | 1.16 以上 |
ドライバと GStreamer のバージョンはどちらも要件を満たしています。RTX 2070 以降の GPU であれば基本的に問題ありません。RTX 4090 は compute capability 8.9 で、TensorRT での INT8 量子化が使えるため推論速度の面でも有利です。
前提条件:NVIDIA ドライバを確認する
DeepStream コンテナを使う前に、ホスト側に NVIDIA ドライバが入っていることを確認します。
NVIDIA GeForce RTX 4090, 565.57.01, 8.9
command not found と出た場合、まずドライバのインストールが必要です。Ubuntu 22.04 なら以下で入ります。
$ sudo apt-get install -y ubuntu-drivers-common
$ sudo ubuntu-drivers autoinstall
$ sudo reboot
再起動後に nvidia-smi が通ればドライバは OK です。
手順1:NVIDIA Container Toolkit をインストールする
DeepStream のコンテナを GPU で動かすには NVIDIA Container Toolkit が必須です。これは Docker に --gpus all を渡したときに GPU をコンテナに見せる仕組みを提供するパッケージです。
①GPGキーとリポジトリを追加する
| sudo gpg –dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
$ curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed ‘s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g’ \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
②パッケージをインストールして Docker を設定する
$ sudo apt-get install -y nvidia-container-toolkit
$ sudo nvidia-ctk runtime configure –runtime=docker
$ sudo systemctl restart docker
インストール後、docker info | grep nvidia で nvidia ランタイムが表示されれば成功です。
③動作確認
NVIDIA GeForce RTX 4090
GPU 名が表示されればコンテナ内から GPU を認識できています。
手順2:DeepStream コンテナをプルする
DeepStream の Docker イメージは NVIDIA GPU Cloud(NGC)から取得します。

7.1-samples-multiarch: Pulling from nvidia/deepstream
Status: Downloaded newer image for nvcr.io/nvidia/deepstream:7.1-samples-multiarch
nvcr.io/nvidia/deepstream:7.1-samples-multiarch
イメージサイズは数 GB あります。初回プルは通信速度次第で 10〜30 分かかることがあります。バージョンを確認するには以下を実行します。
bash -c “cat /opt/nvidia/deepstream/deepstream/version”
Version: 7.1.0
DATE: Fri Oct 4 14:25:35 UTC 2024
コンテナ内の CUDA は 12.6.0 です(ホスト側のドライバが 12.7 対応でも動きます)。
NGC ログインは不要(2026年時点)
nvcr.io/nvidia/deepstream はパブリックイメージのため、NGC アカウントなしでプルできます。ただし Triton Inference Server との組み合わせイメージなど一部は要ログインです。
手順3:GStreamer の動作を確認する
DeepStream はパイプラインの基盤として GStreamer を使います。コンテナ外で GStreamer をテストしたい場合、Ubuntu 22.04 では以下でインストールできます。

libgstreamer1.0-0 gstreamer1.0-tools \
gstreamer1.0-plugins-base gstreamer1.0-plugins-good
Setting up gstreamer1.0-tools (1.20.3-0ubuntu1.1) …
Setting up gstreamer1.0-plugins-base:amd64 (1.20.1-1ubuntu0.6) …
Setting up gstreamer1.0-plugins-good:amd64 (1.20.3-0ubuntu1.6) …
$ gst-launch-1.0 –version
gst-launch-1.0 version 1.20.3
GStreamer 1.20.3
Ubuntu 22.04 では GStreamer 1.20.3 が入ります。DeepStream 7.1 の要件(1.16 以上)を満たしています。
手順4:サンプルパイプラインを動かす
DeepStream コンテナには deepstream-app とサンプル設定ファイルが同梱されています。実際に動かしてみます。
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
nvcr.io/nvidia/deepstream:7.1-samples-multiarch \
deepstream-app -c \
/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt
Opening in BLOCKING MODE
NvMMLiteOpen : Block : BlockType = 261
Pipeline running
このサンプルは 4 本の 1080p 映像ファイルを同時デコードして、ResNet ベースの検出モデル(車・人・自転車・標識)を走らせます。画面付きの環境では Xorg へ映像が出力されます。
ヘッドレス環境(SSH)での実行
DISPLAY が設定されていないサーバーでは、設定ファイルの sink を [sink0] / type=3(ファイル出力)か type=5(FakeSink)に変更してください。そうしないと表示エラーで起動できません。
サンプル設定の一覧を確認するには以下を実行します。
ls /opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/
config_infer_primary.txt
config_infer_primary.yml
config_infer_secondary_vehiclemake.txt
config_infer_secondary_vehicletypes.txt
config_mux_source30.txt
config_mux_source4.txt
config_preprocess.txt
source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt
source30_1080p_dec_infer-resnet_tiled_display_int8.txt
source30_ で始まるものは 30 ストリームを同時処理するベンチマーク向けの設定です。source4_ の設定で試してから徐々に本数を増やすと GPU の限界を掴みやすいです。
GPU の Persistence Mode を確認する
DeepStream のように GPU を繰り返し呼び出すパイプラインでは、nvidia-persistenced が動いているかを確認します。このデーモンが GPU の Persistence Mode を有効にしておくことで、パイプライン起動のたびに発生する GPU 初期化遅延(数百ms)を排除できます。

● nvidia-persistenced.service – NVIDIA Persistence Daemon
Active: active (running) since Sun 2026-06-14 18:05:18 JST; 6 days ago
Main PID: 1184 (nvidia-persiste)
Memory: 1020.0K
私の環境では active (running) の状態を 6 日間維持していました。inactive と出る場合は sudo systemctl enable --now nvidia-persistenced で有効化できます。
Python から DeepStream を使う(pyds)
GStreamer パイプラインを Python で組む場合、DeepStream は pyds(Python bindings)を提供しています。コンテナ内に同梱されているため、インストール不要で使えます。
1.1.11
$ ls /opt/nvidia/deepstream/deepstream/sources/python/
apps bindings docs Makefile PYTHON_BINDINGS_INSTALL_GUIDE.md README.md
Python サンプルは sources/python/apps/ 以下にあります。deepstream-test1 が最も単純な単一ストリーム検出の例です。
deepstream-imagedata-multistream deepstream-test1 deepstream-test1-usbcam
deepstream-test2 deepstream-test3 deepstream-test3-on-triton deepstream-test4
deepstream-test5 deepstream-dewarper-test deepstream-nvdsanalytics-test
$ python3 deepstream-test1/deepstream_test_1.py <サンプル映像パス>
Creating Pipeline
Pipeline is running
よくあるエラーと解決策
①「WARNING: The NVIDIA Driver was not detected」
NVIDIA Container Toolkit が未設定の状態でコンテナを起動すると表示されます。GPU は使えません(デコード・推論がすべて CPU に落ちます)。手順1 に戻って nvidia-ctk runtime configure を実行してください。
②「Could not open display」
ヘッドレスサーバーで Xorg を持たない場合に出ます。設定ファイルの [sink0] セクションで type=3(EglSink 以外)に変えるか、type=5(FakeSink)を使って画面出力をスキップします。
③「No such file or directory: /dev/video0」
USB カメラを使う設定ファイルで、デバイスが認識されていないときに出ます。ls /dev/video* でデバイス番号を確認し、設定ファイルの camera-v4l2-dev-node を合わせてください。
④「TensorRT」関連エラー(エンジンファイルが見つからない)
DeepStream は初回起動時に TensorRT エンジンファイルを自動生成します。ファイルキャッシュが前回と GPU 世代が異なるときに起きます。--rm でコンテナを使い捨てにしていると毎回生成されて遅いため、ボリューム -v /tmp/deepstream_cache:/opt/nvidia/deepstream/deepstream/samples/models でキャッシュを外に出しておくと 2 回目以降が速くなります。
まとめ
DeepStream 7.1(CUDA 12.6)は nvcr.io/nvidia/deepstream:7.1-samples-multiarch をプルすれば、Ubuntu 22.04 + RTX 4090 の環境でそのまま動きます。GStreamer 1.20.3 はDeepStream の要件(1.16 以上)を満たしており、パッケージ管理も安定しています。
- NVIDIA Container Toolkit のインストール →
nvidia-ctk runtime configure --runtime=docker - コンテナプル →
docker pull nvcr.io/nvidia/deepstream:7.1-samples-multiarch - サンプル実行 →
deepstream-app -c <設定ファイル> - nvidia-persistenced が
active (running)なら GPU 初期化遅延を排除できる
映像解析を自前サーバーに乗せるなら、GPU 搭載の VPS を使うのも現実的です。VPS の選び方は https://linuxlab.jp/ubuntu-server-setup/ で解説しています。



コメント