ubuntu16.04 + cuda9.1 + cudnn7.0.5 + opencv3.4.1 + anaconda2 + caffe-ldl 安装过程

作者电脑配置是win10+ubuntu16.04双系统,gtx1070,因为需要学习深度神经网络用到了caffe,在windows下苦装了一个多星期都没有成功,而又不满虚拟机下只能使用cpu的尴尬速度和内存问题,因此决定安装双系统并在ubuntu上配置caffe,没想到ubuntu下的配置也一路深坑,于是特此记录。

在做准备工作之前参考了不少博客,发现各博主关于caffe应配对的各cuda、opencv版本莫衷一事,因此作者自己尝试调配自己的caffe环境,虽然一路波折但最后也总算成功。希望能帮到有需要的同学。

------------------------------------------------------------------------------------------

ubuntu16.04系统安装


0、

主要参考【最新图文讲解如何在win10环境下安装ubuntu双系统】https://blog.csdn.net/ajay666/article/details/75208509,这里不展开说明。


-------------------------------------------------------------------------------------------

CUDA9.1安装

ps:最开始作者在百度上搜了许多教程,但都把系统搞崩了三四次,因此在这里提个醒,不是每篇博客教程都适合每台机器,要根据官方文档进行调配!

http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html


1、

首先,将以下链接作为CUDA安装的主要参考流程(链接中的一些也是同样需要大家注意的):【Ubuntu 16.04 上安装 CUDA 9.0 详细教程】https://blog.csdn.net/qlulibin/article/details/78714596

对显卡版本、gcc、kernel等做检验,查看是否需要apt-get install 缺少的依赖库等,直到第四步1)完成后


2、

在第四步1)完成后,作者发现重新输入lsmod | grep nouveau依然有输出信息,检查后发现该完成的操作都完成了,于是在禁用nouveau后sudo reboot(不清楚加不加sudo有无影响,但一般情况下许多操作只有获得权限才能进行,因此顺手加上去),重启后可能会发现分辨率变成800x600,这时请不要惊慌或着急重装系统(你猜我怎么准确把握到你们的心思的...),猜测大概是禁用该功能后导致驱动没有连接上之类的原因,作者后来选择无视这种情况,重新输出lsmod指令,发现已无信息。接下来继续根据主要参考流程,直到步骤四3)完成后


3、

步骤四3)完成后,作者使用与步骤四4)不同的指令进行安装(结合网上其他教程和官方文档提供的命令表格),输入sudo sh cuda9.1_xxx.run --no-opengl-libs ,其中xxx为具体cuda版本,根据之前下好的run文件输入。这里加了选项no opengl主要是因为不加可能会引起装完cuda后循环登陆或黑屏的情况(但实际上还有其他原因导致这种情况,后面会提到)。等待十多秒,cuda冗长的安装说明文档会出现,可以按z或回车读完,读完后会有几条安装提示,决定是否安装,这里作者的所有选项都选择安装,输入y或accept或回车默认路径。然后!这里作者就遇到了神坑:

"the driver installation is unable to locate the kernel source..." 

为了解决这个问题,作者主要参考了:

【ubuntu14.04.5装cuda7.5记录(解决unable to locate the kernel source,装cuda黑屏问题,装cuda循环登录问题)】https://blog.csdn.net/AutoRobot410/article/details/52862479 中的方法二。

再次强调,该方法不一定对所有人适用,我遇到了两次该问题,第一次试用其他指令,没有解决,重装系统。第二次,作者首先根据上述博客,卸载已存显卡驱动,然后安装了最新版本nvidia驱动(应该是385),reboot后发现分辨率恢复正常,此时再重新安装cuda,发现循环登陆,然后我选择只卸载了已存在的显卡驱动(其实就是刚刚装的最新版本的385),然后就直接重新安装cuda,发现成功安装!但回到图形界面的同时发现分辨率又变为800x600,此时作者猜测就是显卡驱动没有安装的问题导致的,于是随便安装了个显卡驱动(为什么是随便,因为刚刚装最新的驱动之后仍然无法安装cuda,猜测太新的版本可能不适应,所以折中选择了352版本,后面会提到应该如何选择安装显卡驱动),reboot后成功恢复分辨率!

总结:直接sudo apt-get --purge remove nvidia*,然后重新安装cuda。(或者试着和作者一样进行迷之操作,说不定弄着弄着就好了...)


4、

然后继续跟着主要参考流程进入步骤四5),完成后续操作。但是在进行步骤五2)和3)的时候,作者发现Result=failed,并且提示有"cuda driver version is insufficient for cuda runtime version",出现该问题的原因在于上一步没有安装好对应的显卡驱动版本!因此,参考【Ubuntu16.04安装CUDA9.1、cuDNN7详细教程】https://blog.csdn.net/jonms/article/details/79318566 步骤3)安装合适的驱动,完美解决!再次验证./deviceQuery和./bandwidthTest,成功通过!至此,CUDA安装完成。


-------------------------------------------------------------------------------------------

Cudnn7.0.5安装


5、

注意,要在nvidia官网上下载cudnn的话需要先注册帐号再登录,不知道作者这是不是因为校园网问题无法登录进官网,后来翻墙才下了下来,有需要的同学可以评论我,我有时间可以将这个版本放在云盘上。

然后参考【 Ubuntu16.04 Caffe 安装步骤记录(超详尽)】https://blog.csdn.net/yhaolpz/article/details/71375762 的第7步,这里注意在#删除原有动态文件及后面几行指令中,需要根据当前你安装的版本来删除,例如作者的是libcudnn.so.7,可以通过tabtab来查看当前存在什么版本。


-------------------------------------------------------------------------------------------

OpenCV3.4.1安装



6、

继续使用步骤5的教程,到第8步,只是将版本换成3.4.1而已,其他指令都相同。这里作者并没有出现cuda和opencv不兼容问题,因此也不需要修改源文件。一路顺畅,成功安装。


-------------------------------------------------------------------------------------------

anaconda2安装


7、

到官网下载anaconda2的linux版本(好像是因为caffe有一些代码不支持python3),下下来之后bash Anaconda2-xxx.sh,其中xxx是对应版本文件名。这里需要注意的是在安装过程中有一项是否将anaconda2添加到系统环境中的选项,默认是no,作者懒得后面重新在bashrc文件中设置这里就选择了yes,安装程序就会自动帮我们添加anaconda2的路径。安装完成之后重新打开一个终端,输入conda list,如果找到命令就说明安装成功,输入python也能看到有anaconda2版本的显示。如果不成功则需要手动添加路径,网上有教程,这里不多说。


-------------------------------------------------------------------------------------------

Caffe-ldl安装


8、

这里作者使用的caffe版本不是原版,而是经过修改的版本:https://github.com/zeakey/LDLForests ,该代码的作者重构了caffe的框架,适应其项目的需求( Label Distribution Learning Forest,感兴趣的同学可以看看论文),具体修改了什么我也没有去研究,个人认为是大同小异,以后有需要装其他caffe也不会有太大问题,毕竟配置已经基本落实。

根据github上原项目的readme,按顺序输入指令:

git clone https://github.com/zeakey/LDLForest --recursive
cd LDLForest/caffe-ldl
cp Makefile.config.example Makefile.config

到这里,我们需要修改Makefile.config配置文件,作者主要参考【Ubuntu16.04+cuda8.0+opencv3.1+anaconda2.7+caffe安装教程】https://zhuanlan.zhihu.com/p/25709284 ,修改了以下部分:

a)将#USE_CUDNN := 1去掉注释,因为需要使用cudnn。

b)将#OPENCV_VERSION := 3去掉注释,因为需要使用opencv,而且版本是3开头的。

c)将#WITH_PYTHON_LAYER := 1去掉注释,因为需要使用python接口。

d)修改python路径,因为我们使用到了anaconda2,所以将第一个python_include注释掉,后面的anaconda_home和第二个python_include去掉注释,并且修改为anaconda2的根目录位置,这里需要注意的是要看清楚需要注释的代码是否有多行,不要漏掉第二三行

# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
# PYTHON_INCLUDE := /usr/include/python2.7 \
#		/usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda2
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
		 $(ANACONDA_HOME)/include/python2.7 \
		 $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
# We need to be able to find libpythonX.X.so or .dylib.
# PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib

e)

将# Whatever else you find you need goes here.下面的
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
(因为ubuntu16.04的文件包含位置发生了变化)

f)在Makefile文件中:

将(大概409行的样子):
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
这里写图片描述

在Makefile文件的第大概181行,把 hdf5_hl和hdf5修改为hdf5_serial_hl 和 hdf5_serial,即
将:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial


9、

修改完毕后,接着刚刚的终端输入指令:

make -j$(nproc) && make pycaffe && cd ..

这里,作者遇到了nvcc fatal : Unsupported gpu architecture 'compute_20'

解决方法:在Makefile.config中,在CUDA_ARCH设置中去掉前两行,也就是包含compute_20的两行。


10、

等待编译完成之后,需要将caffe产生的python文件夹路径放入系统变量中,否则在import caffe时可能会报no module named caffe错误。输入指令:

sudo gedit ~/.bashrc

在文件末尾加上:

export PYTHONPATH=~/caffe/python:$PYTHONPATH

其中,路径根据python真实存放位置修改,然后保存文件并关闭,继续在终端输入指令:

source ~/.bashrc

系统变量正式生效,然后测试caffe是否能被成功import,在终端输入python,然后import caffe,发现出现No module named google.protobuf.internal的报错,解决办法是安装相应依赖库,在终端中输入conda install protobuf。

至此,caffe正式编译完成!

最后感谢各位参考博客教程的作者!T.T谢谢!

-------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值