先说废话:在导师办公室2天+自己在家一天终于完成了caffe的配置,(上一篇随笔说好每天更新blog没有做到但我真的有在忙= =)整个过程掉坑无数,还好lucky enough配置完毕,趁着在跑cifar-10的train_full的时间整理一下整个流程,等导师的titanx到了以后还要再配置一次。
env:Alienware17-R3, Ubuntu16.04 64-bit, NVIDIA Geforce GTX 980m (导师科研经费买的titanx没到,我的外星人只好先充公了,哈哈)
配置了CUDA8.0, cuDNN5.0, opencv2.4.13
参考了一些内网和外网的资料,我会尽量全部自己写,实在遇到需要参考的内容会贴出网址。
首先你得有一些基本的linux基础,哪怕你在macOS上玩过terminal也可以,毕竟都是unix-based。
稍微提一下自行安装ubuntu16.04的流程:去ubuntu官网下一个镜像文件,用u盘自制系统盘,然后照着装就行,具体请看 http://www.linuxidc.com/Linux/2016-04/130520.htm。
首先先打开terminal,输入以下dependencies:
1 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler 2 sudo apt-get install --no-install-recommends libboost-all-dev 3 sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev 4 sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
I. Nvidia 驱动
ubuntu装好以后需要安装nvidia驱动,ubuntu默认驱动识别了intel的显卡肯定是不行的,这里请上nvidia官网http://www.nvidia.com/Download/index.aspx?lang=en-us查询你需要什么驱动,现在2017年1月30日基本上标配是375,但是还是查一下比较稳妥
安装方法网上有很多说法,有说要blacklist这个那个,要关闭xserver,lightdm之类的。我在这里花了两天时间,以上方法均造成了各种问题。最终我安装成功的方法是
1. Run sudo apt-get purge nvidia-*
2. Run sudo add-apt-repository ppa:graphics-drivers/ppa
and then sudo apt-get update
3. Run sudo apt-get install nvidia-375
4. Run sudo reboot
这里是一个非常tricky的点,我时间主要花在这里了,查了非常多资料,之前各种当机原因我只搞清了其中几个,这里稍微整理一下:
1. 用ubuntu里设置自带的additional drivers选择nvidia driver,失败,无法完全安装
2. blacklist了nouveau,使用alt+ctrl+f1,sudo service lightdm stop(关闭xserver),apt-get 手动下载的安装包,一样当机
3. 安装cuda8.0时第一个选项“是否安装nvidia驱动“选择了yes。。。这里一定要选择no。。虽然他default是yes,但是后来发现caffe官网上已经明确说因为cuda绑定的nvidia driver版本usually out-of-date所以要跳过这一步。。
只能说如果有特殊情况问题请留言,我会尽量帮你解决。博客我天天看,回复不会超过24小时
有两个方法check是否安装完成,一是输入sudo nvidia-smi,如果正确显示显卡信息则为安装成功
二是直接右上角查看this computer, 显卡显示的是不是n卡就行
II. cuda8.0
当你的ubuntu能正确识别nvidia显卡以后我们就可以开始安装cuda了(其实有资料说顺序随意,不过反正我是按这个顺序配置成功的,就这样写了)。
首先去cuda官网下载cuda8.0 https://developer.nvidia.com/cuda-downloads
一步步选择linux->x86_64->ubuntu->16.04->runfile(这里选择runfile是为了能跳过cuda自带的n卡驱动安装),然后就可以下载了,1.4个g,你可以趁现在喝杯茶。
下载好以后cd到你下载的地方,run"sudo sh cuda_8.0.44_linux.run",具体文件名自己check,一开始会有很多要读的霸王条款,直接q到最后,输入accept。后面会让你选择各种细节安装项,这里注意问你是否要安装nvidia driver一定要选择no, 我安装的时候是第一个。
安装好以后 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}}
然后测试一下cuda给的sample:
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
make
sudo ./deviceQuery
如果显示了你的GPU相关信息,说明安装成功
III. cuDNN
这里我cuDNN使用的是5.0版本for CUDA8.0.,在https://developer.nvidia.com/rdp/cudnn-download下载,需要先注册一个账号。选择cuDNN v5 Library for Linux.
下载好以后解压 sudo tar -zxvf ./文件名
然后
$ cd folder/extracted/contents
$ sudo cp -P include/cudnn.h /usr/include
$ sudo cp -P lib64/libcudnn* /usr/lib/x86_64-linux-gnu/
$ sudo chmod a+r /usr/lib/x86_64-linux-gnu/libcudnn*
IV. opencv
这里选择的版本是2.4.13。3.0,3.1均会出现一些兼容问题,所以选择了2016年release的2.4.13版本
http://opencv.org/downloads.html 这里下载
下载好以后
unzip opencv-2.4.13.zip 具体文件名自己看,会有出入
将其复制到准备安装的目录下,这里assume文件夹名为opencv
cd ~/opencv
mkdir build
cd build
sudo apt install cmake
sudo cmake -D CMAKE_BUILD_TYPE=Release -D
CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make
我的2.4版本直接配置完毕,如果是3.0和3.1可能会出现兼容问题,具体看个人选择自行查阅资料解决,这里我没装3.0
compile完以后
sudo make install
完成安装
V. caffe!
前戏这么多终于进入正题开始配置caffe了。。
从github上下载caffe: git clone https://github.com/BVLC/caffe.git
如果没有安装git,需要先: sudo apt-get install git
然后sudo cp Makefile.config.example Makefile.config
打开Makefile.config文件,这里需要权限不要忘了sudo。用getit或者nano都可以
如果你之前没有跳过cudnn,则需要将
#USE_CUDNN := 1的#去掉
如果你opencv版本是3你需要把opencv_version:=3的#也去掉
其他配置自行查看,根据之前的步骤只需要把cudnn那一行注释去掉即可
然后
将# 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
然后
(5)修改makefile文件
打开makefile文件,做如下修改:
将:
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!
最后 sudo make all
我遇到的问题:
"libcudart.so.8.0 cannot open shared object file: No such file or directory"
解决办法是将一些文件复制到/usr/local/lib文件夹下:
#注意自己CUDA的版本号!
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
完成之后测试:
sudo make runtest
运行完之后如果最后左下角显示绿色的passed,则caffe配置成功,大功告成!
VI. 小试牛刀
到这里caffe已经配置完毕,我们来找一组dataset测试一下,这里选用cifar-10.
具体流程caffe官网有http://caffe.berkeleyvision.org/gathered/examples/cifar10.html
我简单写一下
首先下载安装cifar-10,这里我assume你安装caffe的文件夹就叫caffe
cd caffe
./data/cifar10/get_cifar10.sh
./examles/cifar10/create_cifar10.sh
然后就好了,简单吧,来一组快速测试:
cd caffe
./examples/cifar10/train_quick.sh
泡杯茶的功夫他应该已经跑完了,设置的iteration只有5000,最后会显示Optimization done.
VII. 总结
不多说了,坑巨多,具体有问题请留言我尽量帮忙
reference:
http://www.2cto.com/kf/201610/552429.html
http://askubuntu.com/questions/767269/how-can-i-install-cudnn-on-ubuntu-16-04