Ubuntu18.04.5安装驱动+Cuda+CuDNN+CMake+Yolov4环境
系统环境:ubuntu18.04.5
安装版本:
- 驱动 NVIDIA-Linux-x86-64-450.57.run
- cuda: cuda_11.0.2_450.51.05_linux.run
- cudnn: cudnn-11.0-linux-x64-v8.0.4.30.tgz
- cmake: 3.17.5
查看显卡版本:lspci | grep -i vga

一、安装显卡驱动
方法一
通过系统设置->软件和更新->附加驱动 来安装。但此法方法是下下策,里面的驱动不是最新的,在方法二装不上的时候可以用此方法。
在终端输入如下命令,会在驱动处显示驱动:
sudo add-apt-repository ppa:graphics-drivers/ppa && sudo apt update
若更新极其慢,换成 aliyun 源来安装。
方法二(此处使用方法二)
00.准备工作,选择版本
参考博文:https://blog.csdn.net/yinwangde/article/details/89439648
去官网找显卡对应的驱动版本,英伟达官网 http://www.nvidia.cn/Download/index.aspx?lang=cn
根据电脑配置选择相应的驱动程序,在此本系列选择GeForce GTX 1060 ,操作系统 Linux 64 bit ,如下图所示。
这里写图片描述
搜索推荐的版本:
所以此处安装显卡驱动450
01 禁用nouve
参考博客:
https://blog.csdn.net/new_delete_/article/details/81544438
https://www.jianshu.com/p/38e6be8efecf
ubuntu 18.04默认安装了第三方开源的驱动程序nouveau,安装nvidia显卡驱动首先需要禁用nouveau,不然会碰到冲突的问题,导致无法安装nvidia显卡驱动。
1.打开编辑配置文件
sudo gedit /etc/modprobe.d/blacklist.conf
在最后添加如下两行:
blacklist nouveau
options nouveau modeset=0
2.更新系统修改
sudo update-initramfs -u
//然后重启系统(一定要重启),确保到位。
sudo reboot
3 重启验证nouveau是否已禁用
lsmod | grep nouveau
后没有任何输出说明已禁用。
02 下载驱动文件并指令安装
1.若默认有安装的驱动,先卸载系统中已存在的驱动sudo apt-get remove --purge nvidia*
2. 按 Ctrl+Alt+F3 进入命令行界面:
//关闭图形界面,必须关闭:
sudo service lightdm stop
如果提示 unit lightdm.service not loaded
则先安装LightDm: sudo apt install lightdm 若执行这句话提示找不到lightdm包,换成阿里源。
安装完毕后跳出一个界面,选择 lightdm,再sudo service lightdm stop
//查看当前文件夹下的所有文件,有无下载的驱动包:
ls
//给驱动run文件赋予可执行权限:(下载的驱动文件名,按Tab键自动补全)
sudo chmod a+x NVIDIA-Linux-x86_64-390.25.run
//安装
sudo ./NVIDIA-Linux-x86_64-xxx.run --no-x-check --no-nouveau-check --no-opengl-files
其中:
-no-x-check:安装驱动时关闭X服务
-no-nouveau-check:安装驱动时禁用nouveau
-no-opengl-files:只安装驱动文件,不安装OpenGL文件
在安装过程中会出现:
1、he distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes (Continue installation) 继续。
2、Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later? 选择NO继续
3、Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up. 选择No 继续
4、gcc版本过高? 选择忽略ignore cc version check
5、问题 would you like to sign the Nvidia kernel module?:选择 install without signing
6、Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86_64(version:390.25) is now complete. Please update your XF86Config or xorg.conf file as appropriate;see the file
/usr/share/doc/NVIDIA_GLX-1.0/README.txt for details.
只有一个选项,选择Ok就行了。
然后会退回到命令行界面,键入重启即可
sudo reboot
安装成功后,在命令行输入:
sudo service lightdm start//重启图形界面, 按Ctrl+Alt+F2返回图形界面nvidia-smi//检测是否安装成功,出现nvidia信息成功
nvidia-settings//检测是否安装成功,弹出设置框成功
安装过程中的报错:
1.报错gcc
NVIDIA Software Installer for Unix/Linux
ERROR: Unable to find the development toolccin your path; please make sure that you have the package ‘gcc’ installed. If gcc is installed on your system, then please check thatccis in your PATH.
sudo apt-get update
sudo apt-get install gcc
2.报错 make (按报错提示查看/var/log/nvidia-installer.log)
NVIDIA Software Installer for Unix/Linux
ERROR: Unable to find the development toolmakein your path; please make sure that you have the package ‘make’ installed. If make is installed on your system, then please check thatmakeis in your PATH.
sudo apt-get update
sudo apt-get install make
3.kernel module failed to load
啥命令也没执行,当时好像OK,重跑了,还是将18.04.4换成18.04.5就没错误了。
二、安装CUDA
https://blog.csdn.net/weixin_42718092/article/details/86016973
nvidia与cuda需相匹配
CUDA提供两种安装方式:package manager安装和runfile安装, package manager 安装方式相对简单一些,但是我在阅读别人博客的过程中发现选择这种方式在安装过程中问题可能多一点,失败的概率较大。为了减少不必要的麻烦我选择runfile安装方式。
00.卸载旧版本的cuda
卸载原来的cuda8.0(注意:不需要卸载显卡驱动,不要给自己找麻烦)
sudo /usr/local/cuda-9.0/bin/uninstall_cuda_9.0.pl
卸载之后,会发现 /usr/local/cuda-8.0目录下任然有文件存在,这是cudnn文件,所以还需要将cuda-8.0文件删除干净:
sudo rm -rf /usr/local/cuda-9.0
01.下载与安装
下载cuda安装包:cuda官网下载(https://developer.nvidia.com/cuda-toolkit-archive),根据系统信息选择对应的版本,runfile安装的话最后一项要选择 runfile文件,如下图片。
当时网页无法下载,使用下面的两行命令下载的。
#下载,时间很长需要两小时(找别人拷贝)
wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux.run
#获取权限
sudo chmod a+x cuda_11.0.2_450.51.05_linux.run
#安装,等一小会
sudo sh cuda_11.0.2_450.51.05_linux.run
依次输入accept,进入下图,不选择driver驱动,将两个“X”按Enter键取消选择,然后install。如下

cuda11.0,直接就执行完了,如下:
结束,没有出现下面的流程。
下面的流程是之前安装记录的。
然后ctrl+c,接着按下面的步骤选择:
accept
n(不要安装driver)
一路y
y
y
安装完成后,设置环境变量。
02.设置环境变量
sudo gedit ~/.bashrc
将以下内容写入到~/.bashrc尾部:
export PATH=/usr/local/cuda-11.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH
保存后,更新文件使该配置生效:一定要执行啊 ,如果同时打开多个终端,执行过后,重新打开,否则后面的错误也是不断的.
source ~/.bashrc
03. 验证是否安装成功
终端输入:nvcc --version 会输出CUDA的版本信息
三、安装cmake3.17.5
cmake3.17不需要编译,没有编译的文件,下载好后移动到/opt下添加环境变量即可。
1.将下载好的安装包解压移动到opt下
sudo mv /home/jhf/cmake-3.17.5-Linux-x86_64 /opt
2.安装依赖库:
sudo apt-get install build-essential libssl-dev
可以换源
sudo gedit /etc/apt/sources.list
sudo apt update
3.添加环境变量
sudo gedit ~/.bashrc
将cmake路径添加至末尾:
export PATH=/opt/cmake-3.17.5-Linux-x86_64/bin:$PATH
source ~/.bashrc
4.查看cmake版本
cmake --version

成功安装cmake后,如果出现-bash: /usr/bin/cmake: No such file or directory,
则可以手动添加,找到安装的cmake文件,进入cmake3.x文件夹中,在进入bin文件夹,运行
cp ./cmake-3.17.2-Linux-x86_64/bin/cmake /usr/bin/
即可解决。
四、安装cuDNN
官网下载:https://developer.nvidia.com/rdp/cudnn-archive
下载的地方就会表明对应的cuda版本,如下图所示:
下载之后,可以直接手动解压即可。解压之后会有一cuda文件夹,然后在Downloads目录下(我是直接在下载目录下解压)打开终端输入:
cd cudnn-11.0-linux-x64-v8.0.4.30
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*
安装完成。
查看cudnn版本:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

cudnn8及以上版本版本信息放到了上面指令中路径的另一个cudnn_version.h中,因此在系统中安装了8及以上版本的终端输入上一条指令没有反应。
应输入如下指令:
//找到cudnn_version.h在哪里
find / -name cudnn_version.h 2>&1 | grep -v "Permission denied"
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
如图所示,此电脑安装的cudnn版本为8.0.4
然后我立马下载了darknet框架下的yolov4测试了下,没有问题。测试流程:gpu测试YOLOV4
五、gcc和g++版本
在make -j4 编译darknet-master时报错:gcc版本太高
降级gcc版本:
- 下载gcc和g++ 7
//gcc
sudo apt-get install -y gcc-7
//g++
sudo apt-get install -y g++-7
- 链接gcc和g++实现降级
cd /usr/bin
sudo rm gcc
sudo ln -s gcc-7 gcc
//g++
sudo rm g++
sudo ln -s g++-7 g++
确认版本降级成功
再次查看gcc版本,可以看到已经降级.
gcc --version
再次 make -j4 出现如下错误:
error trying to exec ‘cc1plus’: execvp: 没有那个文件或目录:
第一,你没有安装g++
第二,你的gcc的版本和g++版本不相符合
所以,此处不仅要降低gcc的版本,同时要降低g++版本。
2.Yolov4安装要求
参考链接:https://blog.csdn.net/qq_35451572/article/details/105921647
1.CMake >= 3.12
使用如下命令可以查看自己系统的CMke版本号。
cmake --version
2.CUDA >=10.0
//使用如下命令查看CUDA版本信息
cat /usr/local/cuda/version.txt
3.OpenCV >= 2.4
//使用如下命令查看OpenCV版本号
pkg-config opencv --modversion
4.cuDNN >= 7.0 for CUDA
//使用如下命令查看CUDA版本信息
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

如上图所示的cuDNN版本号为7.6.0。
- GPU with CC >= 3.0 但不能大于7
gcc --version
3.安装编译YOLOv4
参考博客:https://blog.csdn.net/zbr794866300/article/details/106409320
3.1 设置Makefile
打开darken根目录下的Makefile文件,如下表所示设置里边参数。
| 内容修改 | 不同情况 |
|---|---|
| GPU=1 | 用CUDA构建,用GPU加速(CUDA应该在/usr/local/CUDA中) |
| CUDNN=1 | 使用CUDNN v5-v7构建,使用GPU加速训练(CUDNN应在/usr/local/CUDNN中) |
| CUDNN_HALF=1 | 用于张量核(在泰坦V/Tesla V100/DGX-2及更高版本上)加速探测3x,训练2x |
| OPENCV=1 | 使用OPENCV 4.x/3.x/2.4.x构建-允许检测来自网络摄像机或网络摄像机的视频文件和视频流 |
| DEBUG=1 | 需要对YOLO进行调试 |
| OPENMP=1 | 使用OPENMP支持构建,使用多核CPU加速Yolo |
首先,打开darknet下的Makefile文件,将一些参数修改
- GPU=1,CUDNN=1,opencv=1,(CUDNN_HALF=1)以及
- 更改CUDA的路径: 69行NVCC改成自已的cuda路径。
//带cuda版本-10.0
NVCC=/usr/local/cuda-10.0/bin/nvcc
- 修改ARCH配置(工程是直接可以编译的,但是一运行yolo模型就会出现cuda error。各位同学应该紧密关注自己显卡的型号,并将arch配置成符合自己显卡型号的配置)
compute_30表示显卡的计算能力是3.0
如下所示:



3.2 编译
修改之后,和上面一样cd到darknet目录下,然后编译
cd darknet-master
make -j4
最后安装成功后会,尝试执行命令:
./darknet
会输出:
4. Demo测试
首先,下载yolov4.weights(官方链接),官方链接是从github中下载,速度较慢,可以从
百度云链接(提取码:ubee)中进行下载。
./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg
规则为:
# 测试图片,结果保存在darknet-master/predictions.jpg
./darknet detect [训练cfg文件路径] [权重文件路径] [检测图片的路径]
测试时报错:
- Error: dark_cuda.c

解决:将Makefiles中改为 :CUDNN_HALF = 0
运行结果如下图所示:
