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

本文档用于在已安装好Ubuntu22.04LTS的基础上
且显卡驱动已配置好的环境中开始教程
#注意,在参考之前的NVIDIA显卡驱动安装中,安装显卡驱动时后面不要加任何参数
#之前的教程后面加的例如-no-opengl-files 去掉!!!
#不然会禁用系统的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
#依次执行下列命令
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守护程序绑定到Unix套接字而不是TCP端口。默认情况下,Unix套接字由用户拥有root,其他用户只能使用sudo来访问它。Docker守护程序始终以root用户身份运行。
如果你不想在前言docker与命令sudo,创建一个名为UNIX组docker和用户添加到它。Docker守护程序启动时,它会创建一个可由该docker组成员访问的Unix套接字。
1.创建用户组
sudo groupadd docker
2.将您的用户添加到该docker组。
sudo usermod -aG docker $USER
如果没用的话请尝试下面的命令
sudo gpasswd -a ${USER} docker
然后
systemctl restart docker
给目录加权
sudo chmod a+rw /var/run/docker.sock
四 安装nvidia-container-toolkit
按顺序执行
---------------------------------------------------
$ 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平台,获得权限方便拉取镜像
-----------------------------------------------------
docker login nvcr.io
登录NGC获得权限
六 拉取镜像
#这里配置的是stream6.1版本,理论上其他版本同理
docker pull nvcr.io/nvidia/deepstream:6.1-triton
七 创建容器
#这里以拉取的6.1镜像为准,其他版本同理
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
#具体各个参数可以参考docker文档,这里不深究
#在下面我会给出nvidia官方的创建示例,和上方不同的地方我会标红做解释为什么更改或删掉
docker run --gpus all -it(创建容器后没加d,无法后台持续运行) –rm(停止容器后会删掉该容器) --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
八 允许容器访问系统图形界面,并运行samples
Linux常用命令xhost命令是X服务器的访问控制工具,用来控制哪些X客户端能够在X服务器上显示,运行xhost命令时要求启动本地X-window的图形界面后,在图形界面下的命令行中输入
xhost +
显示已开启所有访问权限后
再进入容器
Docker exec -it 容器id /bin/bash
进入容器后在deepstream6.1/samples/config/deepstream-app/下
随便运行一个示例即可,例如
deepstream-app -c source4……………….txt
接下来就会弹出运行实例,到这里容器部署成功
九(非必要)如果想推理自定义的源
在刚刚的目录下,我们可以在启动的文件中用vim打开,比如source4开头的那个
打开后里面有一个【source0】或者【source1】
这下面就是配置推理流的地方,很方便,具体的每个参数参考该分类下deepstream配置文件解析.doc,这里举两个例子
[source0]
enable=1 #启用该源
#Type - 1=CamerAV4L2 2=URI 3=MultiURI 4=RTSP 5=CSI camera
type=3 #启用本机目录下多路复用源
uri=file://../../samples/streams/sample_1080p_h264.mp4num-sources=2 #文件地址
gpu-id=0 #第一颗GPU
cudadec-memtype=0
[source1]
enable=1 #启用该源
type=1 #启用本机USB摄像头
camera-width=1280 #摄像头分辨率宽
camera-height=720 #摄像头分辨率高
camera-fps-n=30 #分数的分子部分,指定摄像机请求的帧速率,以帧/秒为单位
camera-fps-d=1 #分数的分母部分,指定摄像机请求的帧速率,以帧/秒为单位