您的位置:首页 > Web前端

ubuntu16.0+cudn8.0+opencv3.1+caffe安装教程(步骤+问题解决)

2018-03-13 16:10 961 查看
大四狗毕业设计做图像语义方面的内容,看了些图像标注和深度学习方面的东西,最近准备装个caffe跑跑一些代码。当然这个安装过程也算是曲折,从装系统到跑第一个mnist例子,来来回回出了好多问题,不过最后还是顺利的搞定了。现在来给大家分享一下安装过程和可能遇到问题的解决办法。

第一步:安装相关的依赖包

这一步是要安装整个过程中需要的用到的依赖包,将下面的命令依次输入:sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler

sudo apt-get install --no-install-recommends libboost-all-dev

sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

sudo apt-get install git cmake build-essential运行结束后可以通过以下的命令来来检查是否已经安装成功:dpkg-query -l 包名

第二步:禁用nouveau

安装好以上的依赖包之后首先要禁用nouveau,方便以后能够顺利地安装nvidia显卡驱动,操作如下:
首先打开blacklist-nouveau.conf文件sudo gedit /etc/modprobe.d/blacklist-nouveau.conf打开后文件是空的,在里面写入如下内容:blacklist nouveau option nouveau modeset=0 保存后可能会出现提示,无视掉就好
然后再执行下面这条命令让以上的更改生效:sudo update-initramfs -u

第三步:配置一些环境变量

vim ~/.bashrc
或者
sudo gedit ~/.bashrc
在文件的末尾加上下面两句话、保存:export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

第四步:安装CUDA8.0

首先需要下载cuda8.0版本,网址(https://developer.nvidia.com/cuda-80-ga2-download-archive)





下载完成后就可以开始安装cuda了(我的cuda的安装文件放在home目录下,方便后面的查找,建议放在home目录下)
首先按ctrl+alt+f1进入系统的文本模式(ps:这里需要输入电脑的帐号和密码,ctrl+alt+f7可以切回图形界面),在登录进去后输入以下语句关闭桌面服务:sudo service lightdm stop接着可以按ctrl+alt+f7看看是否切的回去,如果切不回去则说明关闭成功了,一定要确保桌面服务已经关闭!
接下来在文本模式中通过sh命令直接安装cuda:
(注意:1.因为我的放在home目录下所以这样写,放在其他目录的需要加上地址  2.这里的cuda_8.0.61_375.26_linux.run是我下载的安装文件名,你需要根据自己的安装文件名进行修改)sudo sh cuda_8.0.61_375.26_linux.run --no-opengl-libs在执行这个语句时后会出现0%的提示,然后需要一直按回车键直到提示变成100%,后面按照提示的内容继续操作就好了,第一个是accept,第二个问你是否安装nvidia驱动,如果之前没有安装就输入y,如果之前安装过这里就输入n; 之后确认路径时直接回车按默认的路径就好了,在安装完成之后重启就好了:reboot可能遇到的问题
1.The driverinstallation is unable to locate the kernel source. Please make surethat the kernel source packages are installed and set up correctly.If you know that the kernel source packages are installed and set upcorrectly, you may pass the location of the kernel source with the'--kernel-source-path' flag.
查过网上的一些方法,也是众说纷纭,如果确定kernel source pakage没有问题还继续报错的话,可以在文本模式中先卸载掉可能存在的nvidia驱动:sudo apt-get --purge remove nvidia* 然后再安装你需要安装的版本,我安装的是nvidia347还是啥的忘了,你们根据情况安装合适的显卡驱动就好了:sudo apt-get install nvidia-347然后重启reboot参考的链接:http://blog.csdn.net/AutoRobot410/article/details/52862479
重启进入系统后,下面就开始配置cuda的环境变量,首先打开配置文件:sudo gedit ~/.bashrc然后将下面的两条语句写入文件中,保存退出。export PATH=/usr/local/cuda-8.0/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH使配置文件生效:source ~/.bashrc配置成功后,让我们来验证cuda8.0是否安装成功cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery

sudo make

./deviceQuery此时会看到gpu相关的信息,如果正常显示了,则说明没有问题



第五步:安装cudnn

去此官网下载相应版本的cudnn:https://developer.nvidia.com/rdp/cudnn-download,我装的是cuDNN v5.1 Library for Linux版本。
下载完成后解压缩,会出现一个cudn文件夹,命令行进入cufn/include路径下后,复制头文件:sudo cp cudnn.h /usr/local/cuda/include/ 然后进入cudn/lib64路径下进行如下操作:sudo cp lib* /usr/local/cuda/lib64/
cd /usr/local/cuda/lib64/sudo rm -rf libcudnn.so libcudnn.so.5
sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5
sudo ln -s libcudnn.so.5 libcudnn.so 这里需要注意第三行的命令,这个需要确定自己链接的是libcudnn.so.5.1.10还是libcudnn.so.5.1.5,否则之后编译caffe时会报错 /usr/bin/ld: 找不到 -lcudnn
以上命令运行结束后,可以用以下命令来验证是否成功:nvcc -V

第六步:安装opencv3.1

可以在opencv官网下载https://opencv.org/releases.html,如下图,下载第二项Sources



下载后解压到你要安装的位置,命令行进入opencv-3.1.0目录下,之后就可以一套操作猛如虎:mkdir build # 创建编译的文件目录

cd build

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

make -j8 #编译不过在编译的时候可能会出现问题:

modules/cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState’ has not been declaredtypedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppState, Npp8u* pDeviceMem);这是由于opencv3.1与cuda8.0不兼容导致的,解决办法是修改 /opencv/modules/cudalegacy/src/graphcuts.cpp文件内容如图:



修改完后继续编译,编译成功后安装:sudo make install

第七步:安装caffe

折腾了这么久终于可以开始装caffe了,然而这只是另一个大坑的开始。
首先从github上获取caffe:git clone https://github.com/BVLC/caffe.git进入caffe,将Makefile.config.example复制到Makefile.config里面(复制的原因是caffe编译的时候需要的是Makefile.config文件,而Makefile.config.example不能用来编译):sudo cp Makefile.config.example Makefile.config然后修改makefile.config文件,在caffe路径下打开该文件:sudo gedit Makefile.config修改的内容为:
1.如果使用cudnn加速的话,则:将
#USE_CUDNN := 1
修改成:
USE_CUDNN := 1这里可能会留下一个坑,之后再讲。
2.应用opencv版本:将
#OPENCV_VERSION := 3
修改为:
OPENCV_VERSION := 33.使用python接口:将
#WITH_PYTHON_LAYER := 1
修改为
WITH_PYTHON_LAYER := 14.修改python路径: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然后修改caffe目录下的makefile文件:将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
将:
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
然后修改 /usr/local/cuda/include/host_config.h 文件 如下:将
#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
改为
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!到此就可以开始编译啦: make all -j8 #-j8表示并行计算,根据自己电脑的配置进行设置,配置比较低的电脑可以将数字改小或不使用编译成功后可以用以下语句测试:sudo make runtest -j8 下面是测试成功的截图:



可能出现的问题
到这里大部分人在编译的时候都会出现一些问题,一下就是我在这个过程中出现的问题。
1.Check failed: status == CUDNN_STATUS_SUCCESS (6 vs. 0)  CUDNN_STATUS_ARCH_MISMATCH

这个问题的意思就是gpu的加速性能不够,CUDNN只支持CUDA Capability 3.0以上的GPU加速,所以这就是之前在修改Makefile.config时留下的一个大坑,如果自己电脑的性能不够,就将Makefile.config文件里的USE_CUDNN注释掉吧!然后再执行以下语句后重复以上的编译步骤:make clean2."libcudart.so.8.0 cannot open shared object file: No such file or directory"
解决的方法就是将以下的这些文件复制到/usr/local/lib文件夹里,具体操作如下:sudo cp /usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcublas.so.8.0 /usr/local/lib/libcublas.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcurand.so.8.0 /usr/local/lib/libcurand.so.8.0 && sudo ldconfig这里需要注意自己的cuda版本号!
3."waring nvcc"
这个警告可以忽略,如果有强迫症一定要去掉的话,参考以下链接的内容:
http://blog.csdn.net/10km/article/details/61619573

在caffe安装成功后就可以做个简单的测试了,我们可以用MNIST数据集对caffe进行测试:
进入caffe目录:cd ~/caffe下载mnist数据集并解压:./data/mnist/get_mnist.sh将其转换成lmdb格式:./examples/mnist/create_mnist.sh开始训练网络:./examples/mnist/train_lenet.sh训练的过程中可以看到训练的损失值和精度:



可以看到最后的精度值是0.9902

第八步:安装pycaffe

首先编译pycaffe:cd caffe

sudo make pycaffe -j8编译成功后可以在python中导入caffe看是否报错:python

>>>import caffe可能的错误 :
1."File "<stdin>", line 1, in <module>   ImportError: No module named caffe"
解决的办法是:sudo echo export PYTHONPATH="~/caffe/python" >> ~/.bashrc

source ~/.bashrc2."ImportError: No module named skimage.io"
解决的方法是:sudo apt-get install python-skimage3."Import error: No module named google.protobuf.internal"
解决方法是:sudo apt-get install python-protobuf4."ImportError: No module named numpy"
可能是numpy的版本过低或者没有安装:sudo apt-get install python-numpy

注意:较高的python版本和caffe不一定兼容,所以最好用ubuntu自带的2.7版本。以下是修改ubuntu的python默认版本号的方法:http://blog.csdn.net/xulingqiang/article/details/52494410

到此我的分享就结束了,在装caffe的过程中确实非常的曲折,也感谢网上的那些大佬们的分享,以下是主要参考的链接:
http://blog.csdn.net/yhaolpz/article/details/71375762

https://www.cnblogs.com/longmao-yiran/p/6832374.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息