(一)videopipe环境配置

一、nvidia驱动安装:nvidia-smi

bug: could not communicate to nvidia driver 无法链接到驱动

原因:

  1. linux内核升级了,导致nvidia-drivier安装时的内核和当前内核版本不一致;需要重新安装驱动; uname -r 查看当前内核;
    1. ubuntu需要关闭内核更新 apt-mark hold linux-headers-xxx-gerneric linux-image-xxx-generic 这两个模块是内核相关的 再 /usr/src文件夹下
  2. 主机的secure boot没有disable,务必确保关闭。

二、opencv+contrib+cuda源码编译:

  • gstreamer环境安装: apt install   一串串 参考videopipe的env.md
  • linux opencv>4.6 需要安装4.6的版本,且要findpackage可以识别

教程:https://blog.csdn.net/weixin_54435584/article/details/126981559

2.1 opencv源码编译安装

要求:opencv>4.6 带cuda
因为网络推理使用的是opencv dnn的接口

  • cache文件,直接放在opencv-4.6.0文件下即可,名称为.cache,解压之后,就直接编译就可以了。 我已经上传到资源了,需要自取https://download.csdn.net/download/weixin_64735714/89530489
    • 百度网盘链接:链接:https://pan.baidu.com/s/1T5-zU7TQyaVpRWHonRP9rg?pwd=zebx 提取码:zebx 
    • 太省事了;opencv根据不同的显卡架构,选择编译选项;这里面是要有gstreamer的。
    • 之后会将nvcc(cuda)、opencv460、videopipe的环境,打包为一个docker image镜像和一个docker container直接使用的,上传到百度云盘。TODO
# 先安装依赖
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev  



cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D WITH_CUDA=ON \
-D BUILD_opencv_cudacodec=OFF \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_BIN=6.1 \ # cuda显卡算力,这里需要修改,7.0 7.5 8.6 算力需要针对性修改
-D WITH_V4L=ON \
-D WITH_QT=OFF \
-D WITH_OPENGL=ON \
-D WITH_GSTREAMER=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_PC_FILE_NAME=opencv.pc \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.6.0/modules \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D WITH_FREETYPE=ON \
-D BUILD_EXAMPLES=OFF ..                                                                                                                                                                                                                                                                                                                                                                                                                                               

 最后要在环境中找到:需要make install 

2.2 超级大坑:无freetype.hpp的解决办法,apt install libfreetype6-dev libharfbuzz-dev

  • 最重要的是:要让opencv的CMake模块,也就是opencv_contrib/modules/freetype/CMakeLists.txt中FIND freetype harfbuzz,只有在found的情况下,才会编译libopencv_freetype.so库,所以这里要确保found很重要;最简单的就是apt的install安装,直接安装到环境中,pkg-config可以直接找到。所以关键的是要找到apt install的具体的包名是啥。
  • opencv4.6.0编译成功之后,就可以去cmake videopipe工程了。

 apt install libfreetype6-dev Building HarfBuzz: HarfBuzz Manual

git clone https://github.com/harfbuzz/harfbuzz.git

有用的就只有这两条,然后opencv下面重新CMake,直到确认有了freetype found harfbuzz found就算OK了,才有可能去编译freetype的contrib module模块,才有可能生成linbopencv_freetype.so库,我靠,太烦了。

sudo apt install gcc g++ libfreetype6-dev libglib2.0-dev libcairo2-dev
apt install libharfbuzz-dev
sudo apt install gcc g++ libfreetype6-dev libglib2.0-dev libcairo2-dev
sudo apt-get install meson pkg-config gtk-doc-tools
meson build
meson compile -C build

三、其他环境依赖解决办法

3.1 cuda_runtime_api.h no such file 解决办法:cuda的环境变量,头文件/库文件/可执行文件,路径要加入到环境变量中去;但这里都是临时加入

永久加入,需要vim /etc/profile 是所有的用户;vim ~/.bashrc是当前用户;将export命令写入到这两个文件中,是永久生效的。

ERROR: cuda_runtime_api.h: No such file or directory_cuda-runtime-api.h error-CSDN博客

export CUDA_HOME = /usr/local/cuda-10.1

export CPATH=/usr/local/cuda-10.1/targets/x86_64-linux/include:$CPATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/targets/x86_64-linux/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.1/bin:$PATH

3.2 找不到NvInfer.h  解决办法:Tensorrt的头文件加入到库中

echo CPATH=/.../TensorRT/include:$CPATH

export CPATH=/usr/local/include/opencv4:$CPATH # opencv老是识别不了,吐血

加入到环境变量中就可以了

3.3 vscode debug:要修改launch.json里面的program名称为自己的bin下面的可执行文件

需要gdb有,才可以debug

apt-get install gdb

3.4 CMake warning no CUDA_ARCHITECTURES

cmake工程出现“CMAKE_CUDA_ARCHITECTURES must be non-empty if set.“的解决方法_failed to detect a default cuda architecture-CSDN博客

cmake -DCMAKE_CUDA_ARCHITECTURES=86 -DCMAKE_CUDA_COMPILER=“/usr/local/cuda/bin/nvcc” 添加一个编译选项

 3.5 no libnvinfer.so.8

库里面是Libnvinfer.so 所以创建软连接

ln -s libnvinfer.so libnvinfer.so.8

3.6 编译报错Could NOT find TBB (missing: TBB_INCLUDE_DIRS TBB_LIBRARIES)

在camke 里面添加:-D BUILD_TBB=ON 就会从github下载Tbb源码来编译,就OK了;要科学上网才能下在成功 2.6M左右。

用下面的没成功

编译一个工程的时候报错Could NOT find TBB (missing: TBB_INCLUDE_DIRS TBB_LIBRARIES)如下图:

解决办法:
sudo apt-get update
sudo apt-get install libtbb-dev

四、终极解决办法:docker images docekr container

将好不容易配好的环境打包为docker镜像和容器,下次直接使用。

  • 2024年7月17日17:03:51 更新
    • docker建立失败,感觉是tensorrt不能使用doceker的方式。——docker里面使用tensorrt,我有C++项目是成功推理实现了的。感觉路径是可行的。
    • 这个videopipe的项目在docker中确实是失败了,同样的编译过程,同样的代码。拿到linux物理机中,就可以跑通。
    • 但在docker中,就一直出现segmentation fault, tensorrt老挂在REGISTER_TENSORT_PLUGIN这里,老是段错误。跟tensorrt有关,不知道为啥。所以这个docker基本无法运行,只有放弃。
    • 不知道编译好的opencv之后能否直接拿来make install。未知,这样可以少一个步骤。

  • 打包容器和镜像的办法
docker save -o xxx.tar 镜像ID # docker镜像导出
# 不要使用docker save > xxx.tar 不好使,load的时候导入不了,会失败,亲测
docker load -i xxx.tar # docekr从tar包导入镜像


# docker将容器打包为镜像,最好将容器的建立命令也一起说明
docker export > xxx.tar
docker import < xxx.tar


# 容器中需要使用显卡时,需要使用nvidia-docker表面里面有显卡服务
NV_GPU=0 nvidia-docker run -it --name=zzz -v /local_data:/workspace -p 8000:22 --shm-size 8G --privileged=true  image_name /bin/bash


# 容器打包为惊喜那个
docker commit 容器ID bevlane:v1.o # 容器ID bevlane是镜像名称 可能需要几分钟时间

apt配置环境

在 GPU 上运行 nvinfer1::createInferBuilder 时 TensorRT 8.5.3 分段错误:驱动器 AGX ORIN ·问题 #3507 ·英伟达/TensorRT (github.com)

sudo apt-get install cuda-toolkit-11-8 libcudnn8=8.8.0.121-1+cuda11.8 libnvinfer8=8.5.3-1+cuda11.8 libnvinfer-plugin8=8.5.3-1+cuda11.8 libnvonnxparsers8=8.5.3-1+cuda11.8libnvparsers8=8.5.3-1+cuda11.8

4.1 Tensorrt版本要8.5,否则trt_yolo8不支持,一加载就挂

ubuntu下使用TensorRT,deb包本地安装,会安装到操作系统中,但这样只能安装一个版本的TensorRT,不可以多版本共存,想要同时使用不同的版本的话,需要tar包的方式安装。

NVIDIA TensorRT 8.x 下载 |NVIDIA 开发人员

4.1.1 查看cuda tensorrt cudnn的版本之间的依赖关系/支持关系

Support Matrix :: NVIDIA Deep Learning TensorRT Documentation

4.1.2 TensorRT8.5.3环境依赖

Support Matrix :: NVIDIA Deep Learning TensorRT 文档

  • cuda: 10.2, 11.0~11.8
  • cudnn:cudnn 8.6.0
  • cuBLAS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值