0 项目背景
- 接手他人的项目,全过程重头梳理下。
- 7台服务器,其中6台GPU服务器(GPU:2*2080Ti,CPU:2*Xeon Gold 5118(12核24线程)),一台调度服务器,Ubuntu 18.04系统。
- 100+摄像头(基本是1920*1080)。
- 视觉技术:目标检测、目标跟踪、分类、GPU视频编解码、tensorRT等。
- 开发环境:Ubuntu18.04内使用VS code(全过程C++部署)。
通用性备注:
- 关于bashrc:Ubuntu中,配置文件有多种,用的最多的就是bashrc这个,需要注意的是,每次修改bashrc后,除了要source更新一下bashrc,其他所有之前已打开的终端都需要关闭重新打开后,才会加载最新的bashrc配置文件。原因是:终端在启动时会读取一次bashrc这个配置文件。
- VS code中,debug重新编译启动程序时,如果发生问题,也要注意可能是VSCODE内终端启动bashrc问题。
1 GPU服务器环境部署
OpenCV编译
OpenCV版本要3.0以上,这里我们以最新的4.5.1+contrib为例子,搞定这种最难的。
步骤:
- 安装依赖项:sudo apt-get install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev build-essential qt5-default ccache libv4l-dev libavresample-dev libgphoto2-dev libopenblas-base libopenblas-dev doxygen pylint libvtk6-dev
- 解压OpenCV:sudo unzip opencv-4.5.1.zip
- 解压contrib包:sudo unzip opencv_contrib.zip
- 将contrib文件夹移动到OpenCV文件夹内:sudo cp -r opencv_contrib opencv-4.5.1
- cd opencv-4.5.1
- sudo mkdir build
- cd build
- sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/ym/dream2021/OpenCV4.5/opencv-4.5.1/opencv_contrib/modules/ ..
- sudo make -j8
- sudo make install
- 让动态链接库为系统所共享:sudo ldconfig -v
有用的备注:
- /home/ym/dream2021/OpenCV4.5是我创建的一个临时文件夹,里面存放解压后的opencv-4.5.1文件夹和opencv_contrib文件夹。
- 执行地8步后,几乎必定会遇到的问题(我今年在不同机器上编译了4次OpenCV4.5.1+contrib全是这问题...):fatal error: boostdesc_bgm.i: No such file or directory。
- 原因: boostdesc_bgm.i等文件无法翻墙下载,需要手动下载这些文件放到制定位置。
- 下载地址:https://github.com/opencv/opencv_contrib/issues/1301(我的百度网盘有备份)
- 11个文件的摆放位置:放在/home/ym/dream2021/OpenCV4.5/opencv-4.5.1/opencv_contrib/modules/xfeatures2d/src/ 路径下。
- 第8步,不同机器上有可能遇到的其他问题:
- 问题1:fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory
- 解决办法:将/home/ym/dream2021/OpenCV4.5/opencv-4.5.1/modules/features2d文件夹,复制到/home/ym/dream2021/OpenCV4.5/opencv-4.5.1/build文件夹内。
- 问题2:Package opencv was not found in the pkg-config search path.
- 问题1:fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory
TensorFlow C++ api
安装CUDA 10.1
- 先下载axel(解决官网推荐的wget方法下载包不稳定问题(翻墙问题))
- sudo apt install -y axel
- 使用axel下载cuda 10.1:
- 输入:axel -n 50 https://developer.download.nvidia.cn/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
- 安装cuda:
- 输入:sudo sh cuda_10.1.243_418.87.00_linux.run
- 注意:安装过程中,终端会显示一些信息,并需要你确认或勾选。唯一要注意的是,需要取消显卡驱动项的安装。其他信息很简单,具体细节可见:https://blog.csdn.net/sss_369/article/details/94591280
- 输入:sudo sh cuda_10.1.243_418.87.00_linux.run
- 设置cuda环境变量:
- 打开bashrc文件:sudo gedit ~/.bashrc
- 将如下3行信息放到bashrc文件最后(不要前面的序号):
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.1/lib64
- export PATH=$PATH:/usr/local/cuda-10.1/bin
- export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-10.1
- 使配置生效:source ~/.bashrc
- 检查cuda安装是否成功
- 输入:nvcc --version(如果弹出10.1相关信息,则表示整个过程OK了)
备注1:ubuntu中可以随意安装多个CUDA版本,切换CUDA版本的方法如下:
- 在bashrc文件中配置信息改成如下:
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
- export PATH=$PATH:/usr/local/cuda/bin
- export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
- 安装了多个CUDA后,它们默认安装在/usr/local/文件夹内,/usr/local/cuda这个文件夹是一个动态链接文件夹,里面的内容链接的是具体某个CUDA-XX.X实体文件夹。因为我们在系统配置文件内将CUDA指定为这个动态链接文件夹,所以,如果要修改系统默认调用的CUDA版本,只要修改这个CUDA动态链接文件夹链接的CUDA实体版本文件夹即可,切换方法如下:
- 删除原有的CUDA动态链接文件夹:sudo rm -rf /usr/local/cuda
- 重新生成一个指定CUDA版本的链接文件夹:sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda
- 查看是否切换成功(有时候可能需要重新打开终端才会显示切换成功):nvcc --version
备注2:TensorFlow版本对应的CUDA版本https://blog.csdn.net/qq_37653019/article/details/109956083
安装cuDNN 7.6.5
先下载cudnn-10.1-linux-x64-v7.6.5.32.tgz(我网盘有备份),然后解压,在终端中cd到解压得到文件夹内(里面就一个cuda文件夹),然后终端中依次输入如下命令:
- sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
- sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
- sudo chmod a+r /usr/local/cuda/include/cudnn.h
- sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
执行上述指令后就安装完成了,输入下面指令验证是否正确安装:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
如果终端中显示相关信息,则表示这部分OK了!
tensorRT
TensorRT官网下载:TensorRT-6.0.1.5.Ubuntu-18.04.x86_64-gnu.cuda-10.1.cudnn7.6.tar.gz(我网盘有备份),然后解压,之后再配置下tensorRT的环境变量即可,操作如下:
- 打开bashrc文件:sudo gedit ~/.bashrc
- 将如下2行信息放到bashrc文件最后(不要前面的序号):
- export LIBRARY_PATH=$LIBRARY_PATH:"/home/ym/dream2021/project_rongchuang/other/TensorRT-6.0.1.5/lib"
- export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:"/home/ym/dream2021/project_rongchuang/other/TensorRT-6.0.1.5/lib":$LD_LIBRARY_PATH
- 使配置生效:source ~/.bashrc
Video_Codec_SDK
这是英伟达用于视频解码加速的NVDECODE API。NVIDIA Video Codec SDK包括一整套API,示例和文档,用于在Windows和Linux上进行硬件加速视频编码和解码。(即将默认CPU编解码视频操作放到GPU上执行,在深度学习项目中,此非常有用,第一提高GPU利用率,第二省去CPU解码视频流后再挪到GPU中,直接GPU自己解码后直接给模型使用)
好像这个东西不是必须要单独下载,有可能在装CUDA10.1时,如果选择安装显卡驱动,那么相关cuda路径内可能会包含Video_Codec_SDK中的编解码.h文件和.so文件,具体没去测试。
步骤:
- 在英伟达官网先下载 Video_Codec_SDK_10.0.26.zip(我网盘有备份)(版本一定要对,不然项目里面相关编解码语法会报错)。
- 然后解压即可。(项目中会在CMakeLists.txt中指定该文件夹内的Interface和Lib子文件)