Ubuntu16.04安装cuda cudnn,配置YOLOv3,以及遇到的坑
前两天在windows上装好YOLOv3,然后就想着给Ubuntu也装一个,我全都要。然而不得不说,版本没弄对,装个cuda都难。我的系统是Ubuntu20.04的系统,由于YOLOv3需要配置cuda和cudnn等,于是乎就把Anaconda给卸载了,重新开始安装cuda和cudnn等。悲剧也从这里开始了。先是显卡驱动跟cuda版本对不上,后面又是gcc版本太高不支持,各种删显卡驱动重装,卸载cuda重装,删系统重装,然并卵。装系统,下软件,找资料,几天下来掉了不少头发。于是乎放弃了Ubuntu20.04,重新安装Ubuntu16.04版本。好家伙,不试不知道,一试吓一跳,从头到尾安装下来一气呵成,就没失败的地方,搞了这么久原来是版本问题,可惜掉了这么多头发。
安装cuda
cuda我是参照下面这篇博客装的:
https://blog.csdn.net/wf19930209/article/details/81879514
一定要从头到尾一步一步安装,里面没提到的,还有我碰到的坑,在下面解释一哈子:
1、首先系统最好还是弄成能跟cuda适配的,怎样装Ubuntu16.04我写在博客中了,cuda9.0下载地址https://developer.nvidia.com/cuda-90-download-archive?target_os=Linux&target_arch=x86_64。不要下上面博客中的那个,那是11.0的
2、显卡驱动可以直接在Ubuntu16.04的 设置->软件和更新->附加驱动 中安装,选择相应驱动,点击应用更改就开始下载了,下载完重启一下。如果不安装显卡驱动,在禁用nouveau以后分辨率会变小。选择的cuda的安装包就要根据这个驱动的版本来选择,因为都是大于等于,你安装的驱动版本不能低于你选择的cuda对应表上驱动的版本。注意,你是linux这一栏。
3、禁用nouveau可以参考:
https://blog.csdn.net/littlehaes/article/details/103051674
vim 需要用apt-get install vim下载,或者也可以用gedit来修改文本代码。
我在安装vim时碰到镜像源连接不上的问题,后来把镜像源换成阿里云的镜像再下东西,速度是真香啊。换镜像源的教程百度上很多,可以搜索一下,改完镜像源以后记得update一下,有些文章中没有提。
vim打开文本以后,按Insert键进入插入模式,就能对代码进行编辑了,编辑完以后按Esc退出插入模式,输入“:”冒号,在冒号后面输入,q表示不保存退出,wq表示保存并退出,后面加个感叹号就变成强制执行。(q!,wq!)
4、安装gcc通过apt-get似乎只能获取一个适合当前系统的版本,无法指定版本,Ubuntu20.04只能下载gcc9.3.0,这个版本的gcc对于cuda10.0来说版本太高了,这就是我重新下载Ubuntu16.04的理由,而Ubuntu16.04对应的是5.4.0。可以自己上百度搜一下cuda和gcc,cuda和显卡驱动对应的关系表。cuda9.0的表上已经指出支持Ubuntu16.04和gcc5.3了。
5、alt + ctrl + F1如果进不了tty,可以试试alt + ctrl + F2,alt + ctrl + F3等。
6、sudo ./cuda_9.2_linux.run --no-opengl-libs 不能跑的话加个sh在中间。
7、Toolkit没装起来在最后加个 -override试试。
8、安装cuda时,opengl不要装,显卡驱动如果之前已经装好,也不要装。
9、改完环境变量最好用 source <修改的环境变量文件> 立即生效一下。
安装cudnn
安装cudnn的博文很多,基本都一样,我是按照下面这篇博文来的,一步一步按照上面来就可以。
https://www.cnblogs.com/liuwenhua/p/11521668.html
darknet 配置和测试
下载darknet并运行Makefile:
git clone https://github.com/pjreddie/darknet
cd darknet
make
如果没有指定路径的话,dark的文件夹会被下载到主目录 /home 下。
下载YOLO模型权重文件:
wget https://pjreddie.com/media/files/yolov3.weights
如果下载的太慢可以去网上找资源,有很多已经下好的放在网盘中的。
下载完以后,将下载好的 yolov3.weights 文件移动至darknet文件夹中,接着终端输入:
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
运行了20秒才出的预测结果,因为这是cpu跑的,跑的比较慢。
改成GPU:
打开darknet目录下,Makefile:
degit Makefile
改成:
GPU=1
CUDNN=1
OPENCV=1 (如果安装了opencv,可以设置为1。因为我还没安装opencv,所以我没有改成1)
NVCC=/usr/local/cuda-9.0/bin/nvcc (按自己的cuda版本和路径来填)
改完保存,然后终端进入darknet文件夹,重新make。
再次终端输入:
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
发现这次预测很快就完成了,可见gpu的高效。
预测结果会出现在darknet文件夹中,打开predictions.jpg:
由于这个图片是darknet自带的,所以不太放心,自己又去百度上找了张图片来预测,图片放到data文件夹,把上面那段程序改一下运行:
牛逼!