はじめに
家にあるASUSのゲーミングPCがWeb閲覧専用機となりつつあるのですが
せっかくついているGPUを使ってみたくなったのでお正月の宿題として動作確認を行うことにしました。
キーワード
- docker
- GPU
- ubuntu20.04
- nvidia deepstream SDK 6.1.1
参考
環境
- ASUS TUF DASH F15 (Intel Corei5-11300H + Nvidia GeForce RTX 3060 Laptop GPU)
- Ubuntu 20.04.5 LTS
- docker ver.20.10.22
- NVIDIA Driver 515.86.01
- nvcr.io/nvidia/deepstream:6.1.1-devel
手順
Winodows11からUbuntu20.04へ変更
ざっくりWindowsを消してUbuntuを入れても良いのですがさすがに。。。
裏ブタを開けて新しいSSDを入れ替えました。元のSSDは大切に取っておきます。
UbuntuのインストールはデフォルトのままUSBメモリからインストールしました。
nvidia driverインストール
コマンドラインからインストールしても良いのですがubuntu20.04ではGUIでインストールできるようなのでインストールしてみました。
設定→このシステムについて→ソフトウェアのアップデート
→追加のドライバータブを選択しお好きなNvidiaDriverを選択→変更の適用を押します。
※ちなみに私はnvidia-driver-515をインストールしました。
終わったら再起動します。
内臓グラフィックドライバからnvidiaGPUへ変更(必要に応じて)
インストール直後、GPUが複数あるシステムの場合、NVIDIA以外のグラフィックドライバが選択されていることがあります。
ここでNVIDIA以外の(例えばIntel)グラフィックが選択されているときは切り替えが必要です。
コンソールで
sudo prime-select nvidia
dockerインストール
↓こちらの手順を拝借しました。
dockerインストール
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install -y docker-ce
dockerの動作確認
$ sudo docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
docker実行ユーザの追加
いちいちsudoを使うのは面倒なので現在んもユーザでdockerが使えるように権限を付与します。
# sudo usermod -aG docker ${USER}
nvidia-docker2のインストール
dockerからGPUが使えるよう設定します。
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update && sudo apt-get install -y nvidia-docker2
$ sudo systemctl restart docker
dockerでGPUが使えるか確認
$ docker run --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
Unable to find image 'nvidia/cuda:11.6.2-base-ubuntu20.04' locally
11.6.2-base-ubuntu20.04: Pulling from nvidia/cuda
846c0b181fff: Pull complete
b787be75b30b: Pull complete
40a5337e592b: Pull complete
8055c4cd4ab2: Pull complete
a0c882e23131: Pull complete
Digest: sha256:9928940c6e88ed3cdee08e0ea451c082a0ebf058f258f6fbc7f6c116aeb02143
Status: Downloaded newer image for nvidia/cuda:11.6.2-base-ubuntu20.04
Mon Jan 16 04:43:49 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.86.01 Driver Version: 515.86.01 CUDA Version: 11.7 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A |
| N/A 47C P8 13W / N/A | 415MiB / 6144MiB | 14% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
NVIDIA DeepStream SDKを実行
実行結果を画面に描画するためdocker内からGUI表示ができるよう設定します。
$ xhost +
access control disabled, clients can connect from any host
NVIDIAのリポジトリからdockerimageをPullして実行します。
「-v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY」でホストOSのGUIリソースが利用できるようにします。
$ docker run --gpus all -it --rm \
> -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \
> -w /opt/nvidia/deepstream/deepstream-6.1 \
> nvcr.io/nvidia/deepstream:6.1.1-devel
・・・・
root@5ecfcfbbc8c5:/opt/nvidia/deepstream/deepstream-6.1#
dockerが起動してコンソールが出てきたら動画認識のサンプルプログラムを起動してみます。
最初モデルの変換が行われるので起動に時間がかかります。
root@5ecfcfbbc8c5:/opt/nvidia/deepstream/deepstream-6.1# deepstream-app -c sampl
es/configs/deepstream-app/source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt
(gst-plugin-scanner:10): GStreamer-WARNING **: 04:51:23.265: Failed to load plugin '/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstchromaprint.so': libavcodec.so.58: cannot open shared object file: No such file or directory
(gst-plugin-scanner:10): GStreamer-WARNING **: 04:51:23.413: Failed to load plugin '/usr/lib/x86_64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_inferserver.so': libtritonserver.so: cannot open shared object file: No such file or directory
(gst-plugin-scanner:10): GStreamer-WARNING **: 04:51:23.413: Failed to load plugin '/usr/lib/x86_64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_udp.so': librivermax.so.0: cannot open shared object file: No such file or directory
WARNING: ../nvdsinfer/nvdsinfer_model_builder.cpp:1482 Deserialize engine failed because file path: /opt/nvidia/deepstream/deepstream-6.1/samples/configs/deepstream-app/../../models/Secondary_CarMake/resnet18.caffemodel_b16_gpu0_int8.engine open error
・・・
0:01:22.940566209 9 0x5647876d7f90 INFO nvinfer gstnvinfer_impl.cpp:328:notifyLoadModelStatus:<primary_gie> [UID 1]: Load new model:/opt/nvidia/deepstream/deepstream-6.1/samples/configs/deepstream-app/config_infer_primary.txt sucessfully
Runtime commands:
h: Print this help
q: Quit
p: Pause
r: Resume
NOTE: To expand a source in the 2D tiled display and view object details, left-click on the source.
To go back to the tiled display, right-click anywhere on the window.
**PERF: FPS 0 (Avg) FPS 1 (Avg) FPS 2 (Avg) FPS 3 (Avg)
**PERF: 0.00 (0.00) 0.00 (0.00) 0.00 (0.00) 0.00 (0.00)
** INFO: <bus_callback:194>: Pipeline ready
こんな感じでGUI上にWindowが生成され、認識結果が表示されます。
終わりに
次回はAtomCamとの連携を行ってみようと思います。