深度学习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
样式如下图
官方安装教程里列出了支持的系统和版本
Distribution | Kernel1 | Default GCC | GLIBC | GCC2,3 | ICC3 | NVHPC3 | XLC3 | CLANG | Arm 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压缩包)地址:
之后按官方文档操作,也可以直接按如下操作安装
鼠标右键,解压这两个压缩包。然后创建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