Ubuntu16.04配置caffe步骤
参考博客:
http://blog.csdn.net/zouyu1746430162/article/details/54095807
http://blog.csdn.net/zouyu1746430162/article/details/54095807
http://www.cnblogs.com/dreamyphone/p/4508090.html
由于Ubuntu在UEFI下无法安装NVIDIA显卡驱动,所以在安装Ubuntu系统的时候,在Bios中的启动项中选择不带UEFI的选项作为启动盘安装系统。
安装过程
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
2.安装英伟达显卡驱动
(1)下载驱动
首先去官网(http://www.nvidia.com/Download/index.aspx?lang=en-us)查看适合自己显卡的驱动:记下版本号码,目前更新到375
(2)安装显卡驱动
卸载已经存在的版本驱动:
sudo apt-get remove –purge nvidia*
安装英伟达显卡驱动要关闭X-server:
sudo service lightdm stop
显卡驱动下载到电脑上执行离线安装未成功,故执行指令在线安装:
sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-get install nvidia-375 #注意在这里指定自己的驱动版本!本次安装的是375
安装完成后,输入指令查看是否安装完成:
sudo nvidia-smi
若显示GPU信息则显示安装完成
3.安装CUDA
(1)下载CUDA
首先在官网上(https://developer.nvidia.com/cuda-downloads)下载CUDA:
选择好版本,点击下载,大概1.4GB
(2)安装CUDA
sudo sh cuda_8.0.27_linux.run
注意:刚开始会有一个进度条来阅读相关条例,所以一定要从0%按回车到100%,光等着进度条是不会动的;还会有三选一的选项,选择accept即可。选择执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装nvidia361驱动时,一定要选择否:
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 361.62?
因为前面我们已经安装了更加新的nvidia367,所以这里不要选择安装。其余的都直接默认或者选择是即可。安装过程未遇到GCC版本过高问题,如若遇到请到原博客中查找。
(3)环境变量配置
打开~/.bashrc文件:
sudo vim ~/.bashrc
将以下内容写入到~/.bashrc尾部:
export PATH=/usr/local/cuda-8.0/bin
PATH:+:$PATHexportLDLIBRARYPATH=/usr/local/cuda8.0/lib64
{LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
(4)测试CUDA的sammple
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
make
sudo ./deviceQuery
若显示GPU相关信息,则安装成功:
4.配置cuDNN
首先去官网(https://developer.nvidia.com/rdp/cudnn-download)下载cuDNN,可能需要注册一个账号才能下载,选择的是V5.1版本,和博客中的相同。
下载cuDNN5.1之后进行解压,cd进入cuDNN5.1解压之后的include目录,在命令行进行如下操作:
sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件
再将cd进入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.0.5 libcudnn.so.5 #生成软衔接
sudo ln -s libcudnn.so.5 libcudnn.so #生成软链接
5.安装opencv3.1
从github(https://github.com/opencv/opencv/releases)下载OpenCV Source Code,并将其解压到你要安装的位置,本机解压到了/home/opencv-3.1.0。(opencv3.2装过,不能完成编译,就没有继续修改错误,换回opencv3.1继续安装)
安装前准备,创建编译文件夹:
cd ~/opencv-3.1.0
mkdir build
cd build
配置:(没有安装cmake只需按照提示安装即可)
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
编译:
make -j8
-j8表示并行计算8个线程,根据自己电脑的配置进行设置,配置比较低的电脑可以将数字改小或不使用,直接输make。(编译时间会很长)
以上只是将opencv编译成功,还没将opencv安装,需要运行下面指令进行安装:
sudo make install
安装时间很长,要耐心等待
出现的问题:本机编译出现了问题2,按照原博客顺利解决,附上博客中的图片。
6.配置caffe
(1)将终端cd到要安装caffe的位置。本机是放在/home下
(2)从github上获取caffe:
git clone https://github.com/BVLC/caffe.git
若没有安装git直接按照提示安装即可:
sudo apt-get install git
(3)因为make指令只能make Makefile.config文件,而Makefile.config.example是caffe给出的makefile例子,因此,首先将Makefile.config.example的内容复制到Makefile.config:
sudo cp Makefile.config.example Makefile.config
(4)打开并修改配置文件:
sudo gedit Makefile.config #打开Makefile.config文件
a.若使用cudnn,则
将#USE_CUDNN := 1
修改成:USE_CUDNN := 1
b.若使用的opencv版本是3的,则将#OPENCV_VERSION := 3
修改为: OPENCV_VERSION := 3
c.若要使用Python来编写layer,则
将
#WITH_PYTHON_LAYER := 1
修改为
WITH_PYTHON_LAYER := 1
d. 重要的一项 :
将
# 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的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径.
(5)修改makefile文件
打开makefile文件,做如下修改
将:(大概在409行)
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
(6)编辑/usr/local/cuda/include/host_config.h
将其中的第115行注释掉:
将
#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!
(7)编译
make all -j8 #-j根据自己电脑配置决定
编译错误
在编译过程中遇到”fatal error: hdf5.h: 没有那个文件或目录”,解决方法参照博客如下:
step1:在Makefile.config文件的第85行,添加/usr/include/hdf5/serial/ 到 INCLUDE_DIRS,也就是把下面第一行代码改为第二行代码。
将:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
替换为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
stept2:在Makefile文件的第173行,把 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
(8)测试
sudo make runtest
若完成运行,则caffe完成配置。
遇到的问题:
执行sudo make runtest可能会遇到libcudnn.so.5(因为安装的是v5.1版本,安装v6.0那就是libcudnn.so.6)无法打开或者是不存在,这种情况是因为没有将/usr/local/cuda/lib64放入LD_LIBRARY_PATH中,输入export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${ LD_LIBRARY_PATH}即可解决问题。
~/.bashrc文件末尾如下:
MNIST数据集测试
配置caffe完成后,我们可以利用MNIST数据集对caffe进行测试,过程如下:
1.将终端定位到Caffe根目录
cd ~/caffe
2.下载MNIST数据库并解压缩
./data/mnist/get_mnist.sh
3.将其转换成Lmdb数据库格式
./examples/mnist/train_lenet.sh
训练的时候可以看到损失与精度数值,如下图:
从图中可以看出,训练精度为0.991.