對于熟悉 C++ 的開發(fā)人員來說,前一篇文章將 DeepStreamSamples 版容器的范例搬到本機上,再搭配 Docker 路徑映射方式就能輕松搭建開發(fā)環(huán)境。但這種方式只適用于 C / C++ 范例,并不適用于 DeepStream 的 Python 環(huán)境,因為還需要安裝 Gstreamer 的 Gst-Python 與 DeepStream 的 PyBinding 與兩個元件。
我們可以在容器內安裝這兩個元件,但是前面提供的 Docker 指令中使用 “--rm” 參數,一旦退出容器之后就會銷毀這個調試好的環(huán)境,這對于使用來說是非常不方便的,因此必須做出調整,將調試好的環(huán)境保留下來,甚至于存成一個獨立的鏡像文件,就能方便日后的重復使用或移植工作。
1、將容器調整為 “后臺運行” 執(zhí)行:
在 NGC 官方提供的指令中使用 “--it” 與 “--rm” 是為了能快速啟用容器,并且在使用完畢后刪除容器以避免占用不必要的資源,現(xiàn)在我們來做以下調整:
-
將 “-it” 參數改成 “-id”參數:這樣雖然不會第一時間進入容器內執(zhí)行,但是會讓這個容器在后臺運行,并且打印容器 ID,后面在使用 “dockerexec” 指令來進入容器操作,這是個非常實用的方式,大家可以好好學習使用方法;
-
去除 “--rm” 參數:退出容器之后自動移除;
-
添加 “--name” 參數:為了便于管理,不需要去面對長達 12 碼的容器編號,我們可以用這個參數去指定容器名稱,方便后面的操作;
-
為了配合Python的iot應用范例,建議選擇iot版容器的適用性會比較高。
現(xiàn)在試著執(zhí)行以下指令,創(chuàng)建一個要配置 Python 開發(fā)環(huán)境的 DeepStream 容器:
docker run -id --name=ds_python --net=host --runtime=nvidia -e DISPLAY=$DISPLAY
-w /opt/nvidia/deepstream/deepstream -v /tmp/.X11-unix/:/tmp/.X11-unix
-v ~/deepstream/sources:/opt/nvidia/deepstream/deepstream/sources
-v ~/deepstream/samples:/opt/nvidia/deepstream/deepstream/samples
nvcr.io/nvidia/deepstream-l4t:6.1-iot
執(zhí)行之后,會發(fā)現(xiàn)命令終端并未進入容器里面,依舊在本機(容器外)的狀態(tài),現(xiàn)在執(zhí)行 “docker ps” 指令,會看到如以下的狀態(tài):
這里顯示有個名為 “ds_python” 的容器處于運行狀態(tài),但是我們還沒有進入這個容器的操作環(huán)境中。
2、使用 docker exec 指令進入容器:
現(xiàn)在以 deepstream-l4t:6.1-iot 創(chuàng)建的 ds_python 容器已經在后臺啟動,我們只要使用 “docker exec” 指令就能進入容器內操作,請執(zhí)行以下指令:
docker exec -it ds_python bash
這樣就能進到容器里面。現(xiàn)在試試在容器內做些事情,例如創(chuàng)建一個目錄、添加一個文件,然后執(zhí)行 “exit” 退出容器,然后再執(zhí)行前面的指令重新進入容器內,檢查看看剛剛所做的修改應該還存在,這樣就能確保我們?yōu)槿萜靼惭b的內容可以保留。
3、重啟系統(tǒng)之后的容器啟動:
這種容器創(chuàng)建的方式,在系統(tǒng)重啟之后還能保留前面的設定嗎?重啟一次系統(tǒng)就知道了,然后執(zhí)行 “docker ps” 指令檢查狀態(tài),發(fā)現(xiàn)看不到前面所創(chuàng)建的 ds_python 容器了,怎么辦呢?
不用緊張,現(xiàn)在執(zhí)行 “docker ps -a” 指令,就會發(fā)現(xiàn)這個容器依舊存在于背景資源中,只是沒有啟動而已,現(xiàn)在執(zhí)行以下指令:
docker start ds_python
dockerps
現(xiàn)在再重新執(zhí)行下面指令,就能進入容器里:
docker exec -it ds_python bash
再檢查看看前面所做的修改是否依然存在?現(xiàn)在就能確認這種方式能將容器的修改長期保留,是一種更加實在的用法。
4、為容器安裝 Python 開發(fā)環(huán)境:
現(xiàn)在可以在容器內按照 <https://github.com/NVIDIA-AI-IOT/deepstream_python_apps>的 “HOW-TO Guide” 安裝步驟,調試 DeepStream 的 Python 開發(fā)環(huán)境:
-
安裝依賴庫:
如果 Jetson 的操作系統(tǒng)是 Ubuntu 20.04(JetPack 5.0 以上),請執(zhí)行以下的依賴庫安裝步驟:
apt install python3-gi python3-dev python3-gst-1.0 python-gi-dev git python-dev
python3 python3-pip python3.8-dev cmake g++ build-essential libglib2.0-dev
libglib2.0-dev-binlibgstreamer1.0-devlibtoolm4autoconfautomakelibgirepository1.0-devlibcairo2-dev
-
從 GITHUB 倉下載源碼到指定目錄:
cd sources
git clone https://github.com/NVIDIA-AI-IOT/deepstream_python_apps
cd deepstream_python_apps
gitsubmoduleupdate--init
-
安裝 Gst-Python
apt update
apt-get install -y apt-transport-https ca-certificates -y
update-ca-certificates
cd 3rdparty/gst-python/
./autogen.sh
make&&makeinstall
-
安裝PyBinding:
請參照如下鏈接:
現(xiàn)在就完成了 Python 環(huán)境的配置。
5、測試 Python 范例
要驗證環(huán)境是否調試完成的最簡單方法,就是執(zhí)行一個最基礎的 deepstream-test1 范例,請在容器內執(zhí)行以下指令:
cd /opt/nvidia/deepstream/deepstream/
cd sources/deepstream_python_apps/apps/deepstream-test1
./deepstream_test_1.py../../../../samples/streams/sample_720p.h26
正常運行會看到如下圖的執(zhí)行結果。
這樣就表示 DeepStream 容器的 Python 開發(fā)環(huán)境已經安裝成功。
6、重復使用調試好的容器:
接下來就是要將前面調試好的容器環(huán)境存儲起來,以后就不需要每次調試一次環(huán)境。這部分分成三個階段:
(1)臨時性保存:
事實上前面使用 “-id” 指令之后,這個容器就會一直保留在背景中執(zhí)行,即便重啟系統(tǒng)后也是存在的,如同前面所提供的,只要執(zhí)行以下指令就能重新進入這個容器:
sudo xhost +si:localuser:root
dockerstartds_python&&dockerexec-itds_pythonbash
(2)儲存成 Docker 鏡像:
現(xiàn)在需要在打開一個命令終端,使用 “docker commit <容器名> <鏡像名>” 指令,將目前執(zhí)行的容器存成一個鏡像,請執(zhí)行以下指令:
docker commit ds_python deepstream-l4t:6.1-python
現(xiàn)在執(zhí)行 “docker images” 指令,可以看到多了一個 “deepstream-l4t:6.1-python” 鏡像,如下圖所示:
只要不重裝系統(tǒng)或者刪除這個鏡像,那么這個鏡像就會一直保留在系統(tǒng)里面,以后如果需要再次使用,只要執(zhí)行以下指令即可:
sudo xhost +si:localuser:root
sudodockerrun-it--rm--net=host--runtimenvidia-eDISPLAY=$DISPLAY-w/opt/nvidia/deepstream/deepstream-v/tmp/.X11-unix/:/tmp/.X11-unix-v~/nvme/deepstream/sources:/opt/nvidia/deepstream/deepstream/sources-v~/nvme/deepstream/samples:/opt/nvidia/deepstream/deepstream/samplesdeepstream-l4t:6.1-python
或者可以同時啟動多個獨立的 Python 環(huán)境 DeepStream 容器,如下指令:
sudo xhost +si:localuser:root
sudodockerrun-id--name=ds_python2--net=host--runtimenvidia-eDISPLAY=$DISPLAY-w/opt/nvidia/deepstream/deepstream-v/tmp/.X11-unix/:/tmp/.X11-unix-v~/nvme/deepstream/sources:/opt/nvidia/deepstream/deepstream/sources-v~/nvme/deepstream/samples:/opt/nvidia/deepstream/deepstream/samplesdeepstream-l4t:6.1-python
(3)導出成文件:
最保險的方式,就是將這個 deepstream-l4t:6.1-python 鏡像導出成文件,自行保存好,這樣即便系統(tǒng)重新安裝后,也能直接從這個文件載入鏡像,然后開啟工作容器:
# 將鏡像導出成文件
sudo docker save deepstream-l4t:6.1-python -o jp50dp_ds61_python
# 將文件載入成鏡像
sudodockerload-ijp50dp_ds61_python
現(xiàn)在,這個導出的 jp50dp_ds61_python 壓縮文件,也能部署到其他 JetPack5.0 DP 所安裝的 Jetson 設備上使用,不需要在每臺機器上重復調試 Python 開發(fā)環(huán)境。
-
NVIDIA
+關注
關注
14文章
4986瀏覽量
103055 -
容器
+關注
關注
0文章
495瀏覽量
22061 -
python
+關注
關注
56文章
4797瀏覽量
84688
原文標題:NVIDIA Jetson 系列文章(7):配置DS容器Python開發(fā)環(huán)境
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論