yolov3的训练cuda和cudnn

Posted 卑微小熊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yolov3的训练cuda和cudnn相关的知识,希望对你有一定的参考价值。

提出的问题
https://ask.csdn.net/questions/7771526

参考的教程
https://blog.csdn.net/zhaoxueqi666/article/details/120333153


##################################
同学们,这个系列的文件不要直接就跟着我操作了,因为这个是踩坑的记录,不是教程,我只是将整个流程记录下来,让后面的同学操作的时候能够避开这些坑,希望你能将整个系列的操作流程看了一遍斟酌后进行操作
##################################


根据在csdn和网上其他大神的指导
初次怀疑是机器的cuda和cudnn的版本过低
所以首先尝试对cuda和cudnn进行升级
其实图片这里反映了另一个重大的问题,只是当时眼挫没注意到,后面注意到了并修复

nvidia-smi



现阶段CUDA的版本是10.2

升级为11.1
进入到官网
https://developer.nvidia.com/cuda-downloads

选择对应的版本,然后选择runfile的下载方式,nvidia会给出命令行的下载方式

如果要选择其他版本的cuda,可以在页面下端选择

然后找到需要的版本,点击进去

执行nvidia给出的安装命令

wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run


然后查看nouveau驱动

lsmod | grep nouveau

无输出则代表nouveau没有加载,有的话要禁用nouveau
Nouveau是由第三方为NVIDIA显卡开发的一个开源3D驱动,如果需要用nvidia自己的驱动的话就要先禁止

到下载cuda的位置,然后执行安装脚本
sudo sh cuda_11.1.0_455.23.05_linux.run


中间参考的文件
重装cuda报错“Error installing Cuda toolkit: Existing package manager installation of the driver found”


然后等待一下,可以先尝试直接选择continue,之后安装的时候不在装driver就好,顺利的话也可以直接成功安装,记得之后修改.bashrc文件

然后就是用户许可协议
在终端输入accept同意协议

由于我之前已经安装了Nvidia的显卡驱动,这里不安装driver,那么只需要移动到Driver,按enter键,将"[]"中的X去掉即是不选择.
然后移动到install回车即可

选择升级全部

然后选择yes

稍等片刻后,安装完成

然后添加环境变量

sudo gedit ~/.bashrc 

将原本的cuda注释或删除
根据终端的提示,然后添加以下语句

export PATH=$PATH:/usr/local/cuda-11.1/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.1/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-11.1/lib64

然后刷新环境变量,使其生效

sourec .bashrc

接着查看cuda的版本,可以看到环境变量已经生效

nvcc -V



中途参考的资料
cuda版本nvidia-smi和nvcc -V显示不同

然后查看GPU的使用情况

nvidia-smi



那么cuda安装完成了,接下来就安装cudnn
根据官网,和CUDA11.1配套的是CUDNN8.0.4
https://developer.nvidia.com/rdp/cudnn-archive#a-collapse804-111


进入到下载页面,nvidia要求下载cudnn需要登陆账号

然后查找

点击CUDNN8.0.4,进去有很多的版本

添加链接描述
如果不知道电脑的版本可以查看

uname -a

完成后会下载
由于网络比较卡,所以我是在Win10下载,然后使用filezilla发送过去

中途参考的资料
解压 .solitairetheme8 文件

然后下载的是.solitairetheme8类型的文件,需要转换成tgz然后解压

cd NVIDIA_CUDA-11.1_Samples/
cp cudnn-11.1-linux-x64-v8.0.4.30.solitairetheme8 cudnn-11.1-linux-x64-v8.0.4.30.tgz
tar -xvf cudnn-11.1-linux-x64-v8.0.4.30.tgz

解压之后得到一个cuda文件夹

将解压缩的文件放入对应cuda项目下,但是发现终端报错

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/

终端报错,移动到路径,发现文件名称不一样

进行对应的修改,将将解压缩的文件放入对应cuda项目下

sudo cp cuda/include/cudnn.h /usr/local/cuda-11.1/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.1/lib64/

并设上只读权限

sudo chmod a+r /usr/local/cuda-11.1/include/cudnn.h
sudo chmod a+r /usr/local/cuda-11.1/lib64/libcudnn*

然后为了查看安装的版本号,可以将cudnn_version.h文件放到usr/local/cuda/include目录下

将 /home/heying/NVIDIA_CUDA-11.1_Samples/cuda/include/cudnn_version.h文件移动到/usr/local/cuda-11.1/include/路径下

sudo mv cudnn_version.h /usr/local/cuda-11.1/include

查看版本号,可以看到cudnn版本为8.0.4

cat /usr/local/cuda-11.1/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

在完成修改后对darknt进行编译



初步怀疑是版本不对应

首先将下载的cudnn的修改文件进行删除

然后重新下载一个

重新移动

sudo cp include/cudnn.h /usr/local/cuda/include/
sudo cp 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

没有输出

sudo cp include/cudnn_version.h /usr/local/cuda/include/
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

流程失败

以上是关于yolov3的训练cuda和cudnn的主要内容,如果未能解决你的问题,请参考以下文章

YOLOv3配置(win10+opencv3.40+cuda9.1+cudnn7.1+vs2015)

Tensorflow 在训练 yolo 时报告了 CUDA_ERROR_ILLEGAL_ADDRESS 错误

Ubuntu系统---安NVIDIA 驱动后 CUDA+cuDNN 安装

经验分享让caffe-cudnn8支持yolov3

YOLO 训练环境搭建(Ubuntu18.04+Cuda9.0+Cudnn7.1)

win10 vs2017 opevcv3.4 yolov3