Ubuntu16.04 caffe配置 GPU
Ubuntu16.04 安装配置Caffe GPU+cuda+Cudnn
caffe第二次安装配置,以前仅配置的是CPU所以不用安装cuda+cudnn,现在配置GPU版本的,踩的坑比较多,同时由于被其他事打扰,所以无法专心配置,现在特地写一博客,解决配置过程以及踩过的坑如何解决!!!!
caffe配置: Ubuntu16.04+GPU+cuda8.0+cudnn5.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
安装NVIDA驱动
注意ubuntu16.04可以利用软件驱动更新装载显卡驱动不需要以下的操作,可以直接在终端输入: sudo nvidia-smi
,若列出了如下GPU的信息列表则表示驱动安装成功,不用进行下面的配置操作。
(1)查询NVIDIA驱动
首先去官网 http://www.nvidia.com/Download/index.aspx?lang=en-us
查看适合自己的显卡驱动并下载:驱动文件后缀名应当是以.run结尾的。
输入显卡型号
显卡驱动搜索结果
(2)安装驱动
在终端下输入:
sudo gedit /etc/modprobe.d/blacklist.conf
输入密码后在最后一行加上
blacklist nouveau
,这是将Ubuntu自带的显卡驱动加入黑名单。在终端输入:
sudo update-initramfs -u
重启电脑~
这里要尤其注意,安装显卡驱动要先切换到文字界面,(按Ctrl+Alt+F1~F6).所以,启动电脑后,先进入文字界面。
然后,输入命令
sudo service lightdm stop
现在可以安装驱动了,先进入家目录
cd ~
,然后:sudo ./NVIDIA-Linux-x86_64-375.20.run
,按照提示一步步来~。完成后,再次重启电脑。
安装完成之后输入以下指令进行验证:
sudo nvidia-smi
,若列出了GPU的信息列表则表示驱动安装成功。如下图:安装CUDA
CUDA是NVIDIA的编程语言平台,想使用GPU就必须要使用cuda。
(1)下载CUDA
首先在官网上https://developer.nvidia.com/cuda-downloads
下载CUDA:
(2)下载后完成执行一下命令:
1 sudo chmod 777 cuda_8.0.61_375.26_linux.run
2 sudo ./cuda_8.0.61_375.26_linux.run
注意 cuda_8.0.44_linux.run 需对应自己下载的版本
执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装nvidia367驱动时,一定要选择否:Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 367.48?
因为前面我们已经安装了更加新的nvidia367,所以这里不要选择安装。其余的都直接默认或者选择是即可。
(3)环境变量配置
打开~/.bashrc文件:sudo gedit ~/.bashrc
将以下内容写入~/.bashrc尾部:
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
(4)测试CUDA的samples
1 cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
2 make
3 sudo ./deviceQuery
如果显示一些关于GPU的信息,则说明安装成功。
配置cuDNN
cuDNN是GPU加速计算深层神经网络的库。
首先去官网https://developer.nvidia.com/rdp/cudnn-download
下载cuDNN,需要注册一个账号才能下载。下载版本号如下图:
下载cuDNN5.1之后进行解压:(对应自己下载的版本)
sudo tar -zxvf ./cudnn-8.0-linux-x64-v5.1.tgz
进入cuDNN5.1解压之后的include目录,在命令行进行如下操作:
cd cuda /include
sudo cp cudnn.h /usr/local/cuda/include #复制头文件
再将进入lib64目录下的动态文件进行复制和链接:
cd ..
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 #生成软链接
画重点
此处sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5
中的libcudnn.so.5.0.5
文件需要与你电脑中/usr/local/cuda/lib64/
文件夹中的对应,如果不对应就会在编译caffe时make all 报如下错误:(原因是cudnn链接没有弄好)
错误如:
LD -O .build_release/lib/libcaffe.so.1.0.0
/usr/bin/ld:找不到 -lcudnn
collect2: error: ld returned 1 exit status
Makefile:573:recipe for target '.build_release/lib/libcaffe.so.1.0.0' failed
Make: *** [.build_release/lib/libcaffe.so.1.0.0] Error1
例如本人/usr/local/cuda/lib64/
文件夹对应的文件为:
所以sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5
需要改为sudo ln -s libcudnn.so.5.0.10 libcudnn.so.5
,否则会报错,谷歌百度,上都没有答案,仅此一家!
安装opencv 3.1
从官网http://opencv.org/downloads.html
下载Opencv,并将其解压到你要安装的位置,假设解压到了/home/opencv
。
1 unzip opencv-3.1.0.zip
2 sudo cp ./opencv-3.1.0 /home
3 sudo mv opencv-3.1.0 opencv
安装前准备,创建编译文件夹:
cd ~/opencv
mkdir build
cd build
配置:
1 sudo apt install cmake
2 sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
编译:
sudo make -j8
-j8表示并行计算,根据自己电脑的配置进行设置,配置比较低的电脑可以将数字改小或不使用,直接输make。
可能出现问题:
这是因为opecv3.0与cuda8.0不兼容导致的。解决办法:修改 ~/opencv/modules/cudalegacy/src/graphcuts.cpp文件内容,如图:
其中,#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)||(CUDART_VERSION>=8000)
是我们修改的。
以上只是将opencv编译成功,还没将opencv安装,需要运行下面指令进行安装:
sudo make install
配置caffe
(1) 使用Git直接下载Caffe非常简单,或者去https://github.com/BVLC/caffe
下载。由于我习惯去github上找代码,所以就直接去下载的源码。下载完成后,会在家目录下的下载里找到caffe-master.zip,用unzip命令解压到家目录下,然后重命名为caffe.
(2) 因为make指令只能make Makefile.config
文件,而Makefile.config.example
是caffe给出的makefile例子,因此,首先将Makefile.config.example的内容复制到Makefile.config:
sudo cp Makefile.config.example Makefile.config
(3) 打开并修改配置文件:
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. 下面的
1 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
2 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
1 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
2 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的位置,所以需要更改这一路径。
(4)修改makefile文件
打开makefile文件,做如下修改:
将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
(5) 编辑/usr/local/cuda/include/host_config.h 将其中的第115行(或119行)注释掉:
将
#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!
(6) 编译
make all -j8 #-j根据自己电脑配置决定 编译过程中可能会出现如下错误:
错误内容1:”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
错误内容2:
“libcudnn.so.5 cannot open shared object file: No such file or directory”
解决办法是将一些文件复制到/usr/local/lib文件夹下:
注意自己CUDA的版本号!
1 sudo cp /usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.so.8.0 && sudo ldconfig
2 sudo cp /usr/local/cuda-8.0/lib64/libcublas.so.8.0 /usr/local/lib/libcublas.so.8.0 && sudo ldconfig
3 sudo cp /usr/local/cuda-8.0/lib64/libcurand.so.8.0 /usr/local/lib/libcurand.so.8.0 && sudo ldconfig
4 sudo cp /usr/local/cuda-8.0/lib64/libcudnn.so.5 /usr/local/lib/libcudnn.so.5 && sudo ldconfig
(8)测试
make test
make runtest
如果运行之后出现下图,说明caffe配置成功。
到此caffe配置完毕!
MNIST数据集测试
配置caffe完成后,我们可以利用MNIST数据集对caffe进行测试,过程如下:
1.将终端定位到Caffe根目录
cd ~/caffe
2.下载MNIST数据库并解压缩
./data/mnist/get_mnist.sh
3.将其转换成Lmdb数据库格式
./examples/mnist/create_mnist.sh
4.训练网络
./examples/mnist/train_lenet.sh
训练的时候可以看到损失与精度数值,如下图:
到此OK,大家加油~