深度学习C++部署环境搭建(Ubuntu)

本篇是总目录的其中一个分支,欢迎查阅总目录 https://www.cnblogs.com/xixixing/p/18501624

 

本文以cuda11.8版本为例,cuda11.8的官方安装教程参见 https://docs.nvidia.com/cuda/archive/11.8.0/cuda-installation-guide-linux/index.html#pre-installation-actions

本文系统为Ubuntu20.04.6

安装前的准备:

1、支持cuda的GPU

lspci | grep -i nvidia

样式如下图

 2、支持cuda的系统

uname -m && cat /etc/*release

样式如下图

 官方安装教程里列出了支持的系统和版本

Table 1. Native Linux Distribution Support in CUDA 11.8
DistributionKernel1Default GCCGLIBCGCC2,3ICC3NVHPC3XLC3CLANGArm C/C++
x86_64
RHEL 9.0 5.14.0-70.13.1 11.2.1 2.34 11 2021 22.3 NO 14.0 NO
RHEL 8.y (y <= 6) 4.18.0-372.9.1 8.5.0 2.28
RHEL 7.y (y <= 9) 3.10.0-1160 6.x 2.17
CentOS 7.y (y <= 9) 3.10.0-1160 6.x 2.17
OpenSUSE Leap 15.y (y <= 4) 5.14.21-150400.22 7.5.0 2.31
Rocky Linux 9.0 5.14.0-70.13.1 11.2.1 2.34
Rocky Linux 8.y (y<=6) 4.18.0-372.9.1 8.5.0 2.28
SUSE SLES 15.y (y <= 4) 5.14.21-150400.22 7.5.0 2.31
Ubuntu 22.04 LTS 5.15.0-25 11.2.0 2.35
Ubuntu 20.04.z (z <= 4) LTS 5.13.0-30 9.3.0 2.31
Ubuntu 18.04.z (z <= 6) LTS 5.4.0-89 7.5.0 2.27
Debian 11.4 5.10.0-16 10.2.1 2.31
Fedora 35 5.14.10 11.2.1 2.34
KylinOS V10 SP2 4.19.90-25.14.v2101.ky10 7.3.0 2.28
Arm64 sbsa
RHEL 9.0 5.14.0-70.13.1 11.2.1 2.34 11 NO 22.3 NO NO 21.1
RHEL 8.y (y <= 6) 4.18.0-372.9.1 8.5.0 2.28
SUSE SLES 15.y (y <= 4) 5.14.21-150400.22 7.5.0 2.31
Ubuntu 22.04 LTS 5.15.0-25 11.2.0 2.35
Ubuntu 20.04.z (z <= 4) LTS 5.4.0-100 9.3.0 2.31
Arm64 Jetson (dGPU)
L4T4 20.04.z (z <= 4) 5.10.65-tegra 9.4.0 2.31 NO NO NO NO NO NO
Arm64 Jetson (iGPU)
L4T4 20.04.z (z <= 4) 5.10.104-tegra 9.4.0 2.31 NO NO NO NO NO NO
POWER 9
RHEL 8.y (y <= 6) 4.18.0-372.9.1 8.5.0 2.28 11 NO 22.3 16.1.x 14.0 NO

3、gcc版本

gcc --version

样式如下图

 如果未安装,执行安装(一般这些都会用到,就直接一起装了)

//安装gcc编译器
sudo apt-get install gcc 
//安装g++编译器
sudo apt-get install g++ 
//安装make构建套件
sudo apt-get install make 
//安装OpenGL核心库
sudo apt-get install libgl1-mesa-dev

4、系统的内核版本

uname -r

样式如下图

 以防万一,再执行下(如果因为安装驱动或升级改动了内核版本,建议执行下,防止不匹配当前内核的内核头文件和开发包)

sudo apt-get install linux-headers-$(uname -r)

5、删除过期的签名密钥

sudo apt-key del 7fa2af80

 

 正式开始

跨大版本不推荐,到处是坑、坑、坑~。tensorrt10、cuda12、cudnn9是目前最新的大版本,但是对于一般的老显卡(1050等),太新可能提醒一些错误(主要是tensorrt太新导致的)。为了不折腾,使用如下版本:tensorrt8.6.1、cuda11.8、cudnn8.9.7

系统推荐Ubuntu20.04和Ubuntu22.04。Ubuntu24.04目前较旧的包没有这个版本,强制装也可能碰到问题。linux装东西一般不会一帆风顺、步步惊奇、别轻易upgrade、也别追求最新。

1、安装英伟达显卡驱动

查看已安装的驱动版本,如果在520.00版本以上,就不用再装了,跳过此步骤即可。别手痒更新(一不小心wifi和蓝牙都不见了😒)

nvidia-smi

如果报错 NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver. 那就重新装下驱动,进行如下3步操作:

(1)查看本机显卡能够配置的驱动信息(其实就是“软件和更新”——“附加驱动”里的信息)

sudo apt update
ubuntu-drivers devices

 

 (2)安装最新的nvidia驱动(也可以从上图选择后——应用更改)

sudo apt install nvidia-driver-535

 (3)然后重启电脑。

如果下载很慢,可以进行如下2步操作:

 (1)添加源(在“软件和更新——其他软件”里可以看到)

sudo add-apt-repository ppa:graphics-drivers/ppa

 (2)然后把 http://ppa.launchpad.net 替换为 https://launchpad.proxy.ustclug.org 

2、cuda 11.8

下载11.8 deb包(必须用deb包,因为tensorrt也安装的deb包,否则会出现一些问题)。直接浏览器粘贴下载,也可以去官网下载:CUDA Toolkit Archive | NVIDIA 开发者

https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb

解压,默认在/var

sudo apt install ./cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb

解压后会提示cp操作,即拷贝gpg文件到指定目录

sudo cp /var/cuda-repo-ubuntu2204-11-8-local/cuda-D95DBBE2-keyring.gpg /usr/share/keyrings/

 安装,默认安装在/usr/local/cuda-11.8/

sudo apt-get update
sudo apt-get -y install cuda

若报错 未安装libtinfo5.

修改镜像源文件

sudo vim /etc/apt/sources.list.d/ubuntu.sources

添加

Types: deb
URIs: http://archive.ubuntu.com/ubuntu/
Suites: lunar
Components: universe
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

更新下,安装

sudo apt-get update
sudo apt install cuda -y

 添加环境变量

code ~/.bashrc

粘贴如下后保存

# >>> cuda >>>
export PATH="/usr/local/cuda-11.8/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH"
# <<< cuda <<<

生效下

source ~/.bashrc

查看cuda版本

nvcc -V 

 3、zlib

Zlib是cuDNN所需的数据压缩软件库。

没有找到离线包,只能在线安装。参见官方安装文档

sudo apt-get install zlib1g

4、cudnn 8.9.7

下载地址:cuDNN Archive | NVIDIA Developer

安装,由于下载的是Deb包,所以只需要按照官网要求安装、验证即可,即下图两部分内容

官网步骤如下:

sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.7.29/cudnn-local-8AE81B24-keyring.gpg /usr/share/keyrings/
sudo apt update
sudo apt install libcudnn8=8.9.7.29-1+cuda11.8
sudo apt install libcudnn8-dev=8.9.7.29-1+cuda11.8
sudo apt install libcudnn8-samples=8.9.7.29-1+cuda11.8

验证安装是否成功

cp -r /usr/src/cudnn_samples_v8/ $HOME
cd $HOME/cudnn_samples_v8/mnistCUDNN/
make clean && make
./mnistCUDNN

成功样式如下

 

若报错误:fatal error: FreeImage.h: 没有那个文件或目录

sudo apt-get install libfreeimage3 libfreeimage-dev
make clean && make

若报错误:error: #error -- unsupported GNU version! gcc versions later than 11 are not supported!

把gcc降到11版本

gcc --version
sudo apt install gcc-11 g++-11

然后更改链接

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 10
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30

然后选择gcc 11版本

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

查看版本

gcc --version

继续编译运行

make clean && make
./mnistCUDNN 

 

5、tensorrt 8.6

下载地址:TensorRT Download | NVIDIA Developer

GA是稳定版

按照官网安装deb包 ,具体如下

sudo dpkg -i nv-tensorrt-local-repo-ubuntu2204-8.6.1-cuda-11.8_1.0-1_amd64.deb
sudo cp /var/nv-tensorrt-local-repo-ubuntu2204-8.6.1-cuda-11.8/nv-tensorrt-local-0628887B-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get install tensorrt

 

至此,可以删除/var中解压的文件夹了,一共3个

sudo rm -r /var/cuda-repo-ubuntu2004-11-8-local/
sudo rm -r /var/cudnn-local-repo-ubuntu2004-8.9.7.29/
sudo rm -r /var/nv-tensorrt-local-repo-ubuntu2004-8.6.1-cuda-11.8/

然后清理下 /etc/apt/sources.list.d 目录里的3个list文件,否则update提示“不再含有Release文件”错误

cd /etc/apt/sources.list.d
ls
sudo rm cuda-ubuntu2004-11-8-local.list cudnn-local-ubuntu2004-8.9.7.29.list nv-tensorrt-local-ubuntu2004-8.6.1-cuda-11.8.list

update确认下无报错

sudo apt update

 

 6、opencv

需要自己编译,源码下载(zip压缩包)地址:

Releases · opencv/opencv

Tags · opencv/opencv_contrib

之后按官方文档操作,也可以直接按如下操作安装

鼠标右键,解压这两个压缩包。然后创建build文件夹,目录样式如下。打开build文件夹,鼠标右键打开终端。

先安装一些依赖

sudo apt update
sudo apt-get install -y build-essential
sudo apt-get install -y cmake-gui git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libcanberra-gtk-module
sudo apt-get install -y libtbb-dev libjpeg-dev libpng-dev
#安装cmake和g++
sudo apt install -y cmake g++
#安装项目构建工具,有两个选择,make或ninja, ninja自动支持多线程,make得自己加-j选项,这里先全安装上
sudo apt install -y make ninja-build

配置

cmake -GNinja \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D CMAKE_BUILD_TYPE=RELEASE \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.10.0/modules ../opencv-4.10.0 \
-D WITH_GTK=ON \
-D WITH_TBB=ON \
-D WITH_OPENGL=ON \
..

开始编译

ninja

安装,其实就是将build里的文件放到默认位置

sudo ninja install

默认位置如下:

将/usr/local/include/opencv4里的opencv2剪切出来,然后删除opencv4。这样就变成了习惯的 #include "opencv2/opencv.hpp"

sudo mv /usr/local/include/opencv4/opencv2/ /usr/local/include/
sudo rm -rf /usr/local/include/opencv4/

 CLion创建个c++程序,测试下

#include "opencv2/opencv.hpp"

int main()
{
    cv::Mat img=cv::Mat::zeros(200,600,CV_8UC3);
    cv::putText(img,"Show my text",cv::Point(100,100),cv::FONT_HERSHEY_TRIPLEX,1.5,cv::Scalar(0,0,255),2);
    cv::imshow("Window Title",img);
    cv::waitKey();
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.27)
project(untitled)

set(CMAKE_CXX_STANDARD 17)

#>>>opencv
#set(OpenCV_DIR "/usr/local/lib/cmake/opencv4/opencv2")
find_package(OpenCV REQUIRED)
#include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(untitled main.cpp)
target_link_libraries(untitled ${OpenCV_LIBS})

问题参考 

fatal error: opencv2/opencv_modules.hpp: No such file or directory(linux系统,opencv4)-CSDN博客

Ubuntu20.04软件安装大全_ubuntu 20.04-CSDN博客

 

~~~~~~~~~~~~~~~~~ 以上是部署模型要用的,以下是训练模型要用的~~~~~~~~~~~~~~~~~~~

以下内容参考我的另一篇博客,不再赘述 cuda、cudnn、zlib 深度学习GPU必配三件套(Windows)

7、minconda3+pyhton3.10+pytorch

8、训练yolo

9、部署yolo

posted @ 2024-11-06 14:53  夕西行  阅读(155)  评论(0编辑  收藏  举报