ubuntu22.04萌新快速容器化部署deepstream指南

本文檔用于在已安裝好Ubuntu22.04LTS的基礎(chǔ)上
且顯卡驅(qū)動(dòng)已配置好的環(huán)境中開始教程
#注意,在參考之前的NVIDIA顯卡驅(qū)動(dòng)安裝中,安裝顯卡驅(qū)動(dòng)時(shí)后面不要加任何參數(shù)
#之前的教程后面加的例如-no-opengl-files 去掉?。?!
#不然會(huì)禁用系統(tǒng)的OpenGL功能,影響docker使用
#接下來開始教程
?
一 檢查是否有docker舊版本殘留并清理干凈
#remove docker
sudo apt-get autoremove docker docker-ce docker-engine? docker.io? containerd runc
dpkg -l | grep docker
查看有哪些docker包之后,按照下面依次移除掉
sudo apt-get autoremove docker-ce-*
........
?
?
二 安裝Docker
#依次執(zhí)行下列命令
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
?
?
echo \
? "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
? $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
?
sudo apt-get update
?
sudo apt-get install docker-ce docker-ce-cli containerd.io
?
三 添加非root用戶使用docker,很重要
Docker守護(hù)程序綁定到Unix套接字而不是TCP端口。默認(rèn)情況下,Unix套接字由用戶擁有root,其他用戶只能使用sudo來訪問它。Docker守護(hù)程序始終以root用戶身份運(yùn)行。
如果你不想在前言docker與命令sudo,創(chuàng)建一個(gè)名為UNIX組docker和用戶添加到它。Docker守護(hù)程序啟動(dòng)時(shí),它會(huì)創(chuàng)建一個(gè)可由該docker組成員訪問的Unix套接字。
?
1.創(chuàng)建用戶組
?
sudo groupadd docker
?
2.將您的用戶添加到該docker組。
?
sudo usermod -aG docker $USER
如果沒用的話請(qǐng)嘗試下面的命令
sudo gpasswd -a ${USER} docker
然后
systemctl restart docker
給目錄加權(quán)
sudo chmod a+rw /var/run/docker.sock
?
四 安裝nvidia-container-toolkit
按順序執(zhí)行
---------------------------------------------------
$ 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-container-toolkit
$ sudo systemctl restart docker
?
-----------------------------------------------------
拉取cuda鏡像檢查是否安裝成功
###sudo docker run --rm --gpus all nvidia/cuda:11.7.0-base-ubuntu22.04 nvidia-smi
?
五 登錄NGC平臺(tái),獲得權(quán)限方便拉取鏡像
-----------------------------------------------------
docker login nvcr.io
登錄NGC獲得權(quán)限
?
六 拉取鏡像
#這里配置的是stream6.1版本,理論上其他版本同理
docker pull nvcr.io/nvidia/deepstream:6.1-triton
?
?
七 創(chuàng)建容器
#這里以拉取的6.1鏡像為準(zhǔn),其他版本同理
docker run --gpus all -itd --net=host --privileged -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -w /opt/nvidia/deepstream/deepstream-6.1 nvcr.io/nvidia/deepstream:6.1-triton
#具體各個(gè)參數(shù)可以參考docker文檔,這里不深究
#在下面我會(huì)給出nvidia官方的創(chuàng)建示例,和上方不同的地方我會(huì)標(biāo)紅做解釋為什么更改或刪掉
docker run --gpus all -it(創(chuàng)建容器后沒加d,無法后臺(tái)持續(xù)運(yùn)行) –rm(停止容器后會(huì)刪掉該容器) --net=host --privileged -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -w /opt/nvidia/deepstream/deepstream-6.1 nvcr.io/nvidia/deepstream:6.1-triton
?
八 允許容器訪問系統(tǒng)圖形界面,并運(yùn)行samples
?
Linux常用命令xhost命令是X服務(wù)器的訪問控制工具,用來控制哪些X客戶端能夠在X服務(wù)器上顯示,運(yùn)行xhost命令時(shí)要求啟動(dòng)本地X-window的圖形界面后,在圖形界面下的命令行中輸入
?
xhost +
?
顯示已開啟所有訪問權(quán)限后
再進(jìn)入容器
Docker exec -it 容器id /bin/bash
?
進(jìn)入容器后在deepstream6.1/samples/config/deepstream-app/下
隨便運(yùn)行一個(gè)示例即可,例如
deepstream-app -c source4……………….txt
接下來就會(huì)彈出運(yùn)行實(shí)例,到這里容器部署成功
?
?
九(非必要)如果想推理自定義的源
在剛剛的目錄下,我們可以在啟動(dòng)的文件中用vim打開,比如source4開頭的那個(gè)
打開后里面有一個(gè)【source0】或者【source1】
這下面就是配置推理流的地方,很方便,具體的每個(gè)參數(shù)參考該分類下deepstream配置文件解析.doc,這里舉兩個(gè)例子
[source0]
enable=1 #啟用該源
#Type - 1=CamerAV4L2 2=URI 3=MultiURI 4=RTSP 5=CSI camera
type=3 #啟用本機(jī)目錄下多路復(fù)用源
uri=file://../../samples/streams/sample_1080p_h264.mp4num-sources=2 #文件地址
gpu-id=0 #第一顆GPU
cudadec-memtype=0
?
[source1]
enable=1 #啟用該源
type=1 #啟用本機(jī)USB攝像頭
camera-width=1280 #攝像頭分辨率寬
camera-height=720 #攝像頭分辨率高
camera-fps-n=30 #分?jǐn)?shù)的分子部分,指定攝像機(jī)請(qǐng)求的幀速率,以幀/秒為單位
camera-fps-d=1 #分?jǐn)?shù)的分母部分,指定攝像機(jī)請(qǐng)求的幀速率,以幀/秒為單位