caffe配置(Ubuntu16.04+CUDA8.0+cudnn5.1+opencv3.1.0)

经过2天的奋战,终于在Ubuntu16.04的电脑上配置好了caffe,并且完美的编译成功了!作为一个新手安装caffe是痛苦的,虽然网上的教程有很多,但是一个萝卜一个坑,么有一个你能完全适配的,因为电脑系统版本的不同,你的网速的好坏以及是否细心都将对caffe的配置产生极大的影响!
在第一次安装的时候,由于我的电脑的显卡是TeslaM40的,所以我安装了推荐的CUDA9.2+cudnn7.1,到这时候都能成功,但是在编译无论哪个版本opencv的时候发现就怎样都不行,显示找不到相关的文件,这时候才知道已经入坑了,必须得从头再来了,在一个同学的提醒下开始卸载安装好的CUDA和cudnn,开始重新安装!然后由于网速的原因花了一下午才安装好了,正常网速3小时差不多,就是安装opencv费时间,如果切换到阿里源的话,网速会快一点!
下面是具体步骤外加错误可能及其弥补方案!

由于Ubuntu在UEFI下无法安装NVIDIA显卡驱动,所以在安装Ubuntu系统的时候,在Bios中的启动项中选择不带UEFI的选项作为启动盘安装系统。
安装过程未遇到GCC版本过高问题,如若遇到请看这个博客中查找https://www.jb51.net/article/112468.htm,遇到了请警惕。
1. 安装相关依赖项

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

这只要复制粘贴即可,基本不会有错的,错了就是出奇了!如果要验证是否安装成功只要运行上面的最后一条命令就行!只要没有显示error就行!

2. 禁用 nouveau以及配置环境变量

安装好依赖包后需要禁用 nouveau,只有在禁用掉 nouveau 后才能顺利安装 NVIDIA 显卡驱动,禁用方法就是在 /etc/modprobe.d/blacklist-nouveau.conf 文件中添加一条禁用命令,首先需要打开该文件,通过以下命令打开:

sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

打开后发现该文件中没有任何内容,写入:

blacklist nouveau option nouveau modeset=0 

保存时命令窗口可能会出现以下提示:

** (gedit:4243): WARNING **: Set document metadata failed: 不支持设置属性 metadata::gedit-position

无视此提示~,保存后关闭文件,注意此时还需执行以下命令使禁用 nouveau 真正生效:

sudo update-initramfs -u

3. 配置环境变量

同样使用 gedit 命令打开配置文件:

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 

保存退出。

4. 安装英伟达显卡驱动

1.这一步是用来安装你的显卡驱动的,首先你要确认你的显卡型号以及确保你不是AMD的显卡就行,不然就搞笑了!然后去英伟达官网下载对应显卡的驱动!

实例
安装驱动之前确保你在之前没有安装任何显卡驱动,查看是否安装显卡驱动输入

nvidia-smi

如果显示以下所示图片则为已经安装好驱动了!
这里写图片描述
如果需要卸载驱动,请输入一下命令:

sudo apt-get remove --purge nvidia*

在安装驱动之前要确保关闭桌面服务,也就是图形界面,通过 Ctrl + Alt + F1 进入文本模式,输入帐号密码登录(注意:在进入文本模式的时候一旦账号或者密码有数字的时候不要按小键盘,也就是右边的键盘,因为它是乱码的,直接按上面一排的数字键就行,千万注意,这是走过的坑,还是个大坑,不要怀疑你的密码有错),通过 Ctrl + Alt + F7 可返回图形化模式,在文本模式登录后首先关闭桌面服务:

sudo service lightdm stop #开启桌面服务:sudo service lightdm start

安装驱动输入命令行:

sudo dpkg -i  nvidia-diag-driver-local-repo-ubuntu1604-396.37_1.0-1_amd64.deb(后面的驱动名是你下载的驱动名)
apt-get update
apt-get install cuda-drivers 
reboot

安装完之后输入nvidia-smi查看是否安装成功,前面有介绍!

安装失败了可以看以下步骤
2.注意:如果你下载驱动安装失败了,还有在线安装的方法,但是你要弄清楚你要安装的驱动版本我的就是396,就是你刚刚下载的驱动的名字的那个三位数!步骤如下

首先也要关闭桌面服务和上面步骤一样;然后输入

sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update 
sudo apt-get install nvidia-396   #这个396是驱动版本,注意了

安装成功,输入nvidia-smi,查看!

3.如果这都失败了,只能上绝招了!
可以利用系统设置自己安装显卡驱动!

安装到这里可能会出现找不到nvidia driver的错误,说明显卡驱动安装失败了,这时候可以尝试让Ubuntu帮你自动安装显卡驱动:
先卸载之前安装的驱动
sudo apt-get remove --purge nvidia*
打开系统设置(System Settings),点击Software&Updates

这里写图片描述
弹出下面窗口,点击Additional Drivers,稍等一会,就会显示需要安装的驱动,这时候选择显示Nvidia驱动版本的那一行(下图第一行),然后点击Apply Changes等待下载完成,下载完成后点击Revert重启后即可输入nvidia -smi验证驱动是否安装成功。
这里写图片描述

5. 安装 CUDA 8.0

(1)在官网https://developer.nvidia.com/cuda-downloads下载CUDA8.0,推荐的9.2不要睬他!

这里写图片描述
(2)下载完之后运行命令:

sudo sh cuda_8.0.44_linux.run

注意:**刚开始会有一个进度条,一分钟之后会到0%,但是一定要从0%按回车到100%,如果你就傻乎乎的等着基本可以等一年;**而且还会有三选一的选项,选择accept即可。之后有个让你选择是否安装nvidia驱动时,一定要选择否:
Install NVIDIA Accelerated Graphics Driver for(安装的驱动名)
因为前面我们已经安装了更加新的驱动,所以这里不要选择安装。其余的就是yes或者按回车就行!
安装结束输入重启命令:

sudo reboot

(3)重启后登录进入系统,配置 CUDA 环境变量,使用 gedit 或者vim(毕竟ssh远程登录时需要vim)命令打开配置文件:

sudo gedit ~/.bashrc

在该文件最后加入以下两行并保存:

export PATH=/usr/local/cuda-8.0/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

注意:在vim下查找关键字需要进入命令行模式,也就是依次按:Esc+:(冒号)+/关键字,不懂的百度
使该配置生效:

source ~/.bashrc 

(4)验证 CUDA 8.0 是否安装成功
依次输入以下命令

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery

sudo make

./deviceQuery

一旦显示GPU信息就是成功了!

6. 安装cudnn

登录官网:https://developer.nvidia.com/rdp/cudnn-download ,下载对应 cuda 版本且 linux 系统的 cudnn 压缩包,注意官网下载 cudnn 需要注册帐号并登录!
这里写图片描述
下载完成后解压,得到一个 cudn 文件夹,该文件夹下include 和 lib64 两个文件夹,命令行进入 cudn/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 #生成软链接

只要没有出现error就OK!
7. 安装 opencv3.1

http://opencv.org/releases.html 下载OpenCV Source 并将其解压到你要安装的位置!
这里写图片描述
本人装过3.2的和3.4的都失败了,特别心酸!都在编译的时候GG了!一旦发现了如下情况,仔细看看你的CUDA版本是不是又自作主张装的太高了,或者opencv版本装的高了!
这里写图片描述
解压到你要安装的位置,命令行进入已解压的文件夹 opencv-3.1.0 目录下,执行:
解压命令可以百度 sudo unzip -n opencv-3.1.0.zip -d/(解压目录),自己百度搜索,我要写完急着回宿舍了!

mkdir build # 创建编译的文件目录

cd build

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

make -j8  #-j8表示并行计算8个线程,根据自己电脑的配置进行设置,配置比较低的电脑可以将数字改小或不使用,直接输make。(编译时间会很长)

在执行 make -j8 命令编译 时可能会出现以下错误:

modules/cudalegacy/src/graphcuts.cpp:120:54: error: 
‘NppiGraphcutState’ has not been declared
typedef NppStatus (*init_func_t)(NppiSize oSize, 
NppiGraphcutState** ppState, Npp8u* pDeviceMem);

这是由于opecv3.1与cuda8.0不兼容导致的。解决办法:

修改 /opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp 文件内容,如图:
这里写图片描述
以上只是将opencv编译成功,还没将opencv安装,需要运行下面指令进行安装:(会很久的,慢慢等)

sudo make install

安装完成后通过查看 opencv 版本是否正确!

pkg-config --modversion opencv

8. 安装caffe

首先在你要安装的路径下 clone :

git clone https://github.com/BVLC/caffe.git

进入 caffe ,将 Makefile.config.example 文件复制一份并更名为 Makefile.config ,也可以在 caffe 目录下直接调用以下命令完成复制操作 :

sudo cp Makefile.config.example Makefile.config

复制一份的原因是编译 caffe 时需要的是 Makefile.config 文件,而Makefile.config.example 只是caffe 给出的配置文件例子,不能用来编译 caffe。

然后修改 Makefile.config 文件,在 caffe 目录下打开该文件:

sudo gedit Makefile.config

修改 Makefile.config 文件内容:

1.应用 cudnn

将
#USE_CUDNN := 1
修改成: 
USE_CUDNN := 1

2.应用 opencv 版本

将
#OPENCV_VERSION := 3 
修改为: 
OPENCV_VERSION := 3

3.使用 python 接口

将
#WITH_PYTHON_LAYER := 1 
修改为 
WITH_PYTHON_LAYER := 1

4.修改 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     

这里贴出 我的Makefile.config文件 方便大家参考

然后修改 caffe 目录下的 Makefile 文件:

将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS) //在415行
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
将:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 ////在79行似乎,忘了,可以查找关键字,上面我有写
改为:
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!

OK ,可以开始编译了,在 caffe 目录下执行 :

make all -j8

这是如果之前的配置或安装出错,那么编译就会出现各种各样的问题,所以前面的步骤一定要细心。

编译成功后可运行测试:

sudo make runtest -j8

在这一步如果出现以下情况,没有更好!
这里写图片描述
原因是cuda路径错误,解决方法是使路径生效,输入以下命令行:

sudo ldconfig /usr/local/cuda/lib64

然后再试试

sudo make runtest -j8

出现以下图片即为成功!(它需要跑会)
这里写图片描述

到这里了,就恭喜你了,至于下面对pycaffe notebook 和matlab的接口环境歇会奉上!

参考博客:https://blog.csdn.net/yhaolpz/article/details/71375762/

猜你喜欢

转载自blog.csdn.net/qq_36501027/article/details/81489614