这段日子,一直在折腾caffe, 试跑了一下CNN、测试了一个FCN(Fully Convolutional Networks)。
下面纪录一下自己的配置过程(Ubuntu+Driver+MKL+CUDA+cuDNN+python),我在OS X、Ubuntu(14.04、15.04、15.10以及15.10 Kylin版本)上都折腾安装过。可谓战斗经验丰富,目的是给大家做个参考,因为每个人都会遇到各种不同的问题。如果能给读者一丝的帮助,那真是太好了!
一开始我在自己的MacBook pro上配置,不过由于MacBook没有显卡。之后训练了一个160M的数据,笔记本跑了20多个小时,都没跑完。风扇“呼呼“地转,心疼。强制停止了,也说明了折腾深度学习这东西,别折腾笔记本了,当个终端就好。于是在一台装有Ubuntu + Titan X的电脑上配置,跑数据。Ubuntu的配置相对OS X还是简单多的,OS X因为默认编译器是Clang,会麻烦一些。
至于Windows版本的caffe,倩姐折腾了一个星期多才搞定……我选择狗带……不过好像用微软编译好的也很快,不过少了一个配置的过程,感觉不是那么完整,哈哈。
caffe依赖的库很多,这一点原作者贾扬清也承认。我在一开始配置的过程中,经常需要编译错误后停下来,安装缺失的库。
配置的第一步,就是把caffe所依赖的通用包直接用sudo apt-get install ***
来解决。以下是依赖的包,参考caffe官网配置教程:
$ 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 libgflags-dev libgoogle-glog-dev liblmdb-dev
这里补充一点,由于每个人的电脑环境情况不一样,所以在后面很多时候用caffe的python接口的时候。在import caffe
的时候,会出现No module named lmdb
之类的情况,这时候试一下用pip
或者’easy_install’来安装缺失的库,如lmdb
:
$ pip install lmdb
or
$ easy_install lmdb
最好加上sudo
,赋予权限,因为要将这些库安装到/usr/local
目录下:
$ sudo pip install lmdb
然后是安装BLAS,是为了让CPU计算时速度更快,可以用ATLAS:
$ sudo apt-get install libatlas-base-dev
当然了,也可以用OpenBLAS或者Intel MKL。
MKL是需要进行学生身份认证,并申请秘钥,并且安装包比较大,末尾我传一份我下载到的MKL。安装MKL后,如果不配置MKL路径与库,编译caffe会报错。配置方法:
$ sudo gedit /etc/ld.so.conf.d/intel_mkl.conf
在新建的intel_mkl.conf
中添加intel
与mkl
的路径:
/opt/intel/lib/intel64
/opt/intel/mkl/lib/intel64
之后, 下载并安装CUDA。下载到*.deb
文件后,推荐用命令行的安装方式,直接用Ubuntu的Software Center安装之后,貌似/usr/local/
文件夹下并不会出现关键的cuda
这个文件,我试验了几次,都是这样的情况,所以推荐命令行(以我自己的CUDA7.5版本为例):
$ sudo dpkg -i cuda-repo-ubuntu1504-7-5-local_7.5-18_amd64
$ sudo apt-get update
$ sudo apt-get install -y cuda
完成后,记得配置CUDA的/usr/local/cuda-7.5/bin
到PATH
、/usr/local/cuda-7.5/lib64
到LD_LIBRARY_PATH
。执行bash
:
$ sudo vim ~/.bashrc
添加路径:
export PATH=/usr/local/cuda-7.5/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
可以Terminal中用以下命令查看CUDA版本:
$ nvcc --version
对于我这台新的工作站,我这台机器的主板是没有集成显卡的,只有Nvidia Titan X独显。所以安装完Ubuntu之后,由于没有显卡驱动,屏幕分辨率不能直视。但安装Nvidia显卡驱动中,各种折腾,吃尽了苦头。
一开始我按照网上的教程:
$ sudo apt-get remove --purge nvidia
或安装指定版本:
$ sudo add-apt-repository ppa:xorg-edgers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-352
安装后Logout,重新进入调整屏幕分辨率。发现最大只能到 1360×768 ,我以为我的显卡驱动没有安装好,因为我看我们组的服务器以及倩姐的电脑,都能达到1080的分辨率。这块至少折腾了我一个星期,最后得出结论:
只要是含有集成显卡的,都可以调节为1080的分辨率。而只含有Nvidia独显de机器,比如说我的机器只含有Titan X这一个显卡,就不可能调节成1080的分辨率,当然这是在系统是Ubuntu系统的情况下。对于Windows系统,发现分辨率可以支持的很高,要看你的显示器支持多大的分辨率了。
而且,这块安装显卡驱动过程中,得到教训是,Nvidia的闭源驱动真的是Linux不稳定因素的主要原因,不光难装(有的还需要按ALT+Ctrl+F1
进入控制台界面,用run文件进行安装),而且在安装之后,系统会经常性的崩溃!
所以,如果对命令行不熟悉的,我推荐可以用新立得安装包管理器(Synaptic)安装Nvidia驱动,很方便。而且,对于自己不熟悉的命令,不要乱敲进Terminal!
更新真的跟快,我之前下载的时候还是v4版本,现在都到v5了。不过提醒的是,如果你的深度学习框架,如caffe,由于版本问题,有些caffe的版本只支持cuDNN6.5版本,有些,只支持7.0及更高版本。编译的时候出现cuDNN的报错,十有八九是cuDNN的版本不对导致,所以这一块按需下载,并进行正确连接。
下面我纪录下cuDNN v2版本,cuDNN v4版本的配置链接过程。
cuDNN v4,下载文件名称: cudnn-7.0-linux-x64-v4.0-prod.tgz
//安装cuDNN
$ sudo tar xvf cudnn-7.0-linux-x64-v4.0-prod.tgz
$ cd cuda/include
$ sudo cp *.h /usr/local/include/
$ cd ../lib64
$ sudo cp lib* /usr/local/lib/
$ cd /usr/local/lib
$ sudo chmod +r libcudnn.so.4.0.7
//链接cuDNN的库文件
$ sudo ln -sf libcudnn.so.4.0.7 libcudnn.so.4
$ sudo ln -sf libcudnn.so.4 libcudnn.so
$ sudo ldconfig -v
cuDNN v2,下载文件名称: cudnn-6.5-linux-x64-v2.tgz
//安装cuDNN
$ sudo cp cudnn.h /usr/local/include
$ sudo cp libcudnn.so /usr/local/lib
$ sudo cp libcudnn.so.6.5 /usr/local/lib
$ sudo cp libcudnn.so.6.5.48 /usr/local/lib
//链接cuDNN的库文件
$ sudo ln -sf /usr/local/lib/libcudnn.so.6.5.48 /usr/local/lib/libcudnn.so.6.5
$ sudo ln -sf /usr/local/lib/libcudnn.so.6.5 /usr/local/lib/libcudnn.so
$ sudo ldconfig -v
现在,基本把caffe所需要的各种环境及依赖安装好了,下面就是要Git caffe源码了:
$ git clone https://github.com/BVLC/caffe.git
再cd
进caffe目录下,按照官网上的教程:
$ cp Makefile.comnfig.example Makefile.config
再修改Makefile.config文件,前方高能!这里坑太多……
第一步,因为我是有GPU的,所以,不需要CPU_ONLY的,如果没有的话,需要把这行取消注释,用CPU跑。
我也配置了cuDNN库,所以取消注释:
USE_CUDNN := 1
这里坑太多是因为每个人的电脑的配置、环境都不一样,所以需要根据自己的实际去判断、选择、修改Makefile.config里的环境。所以,这地方需要细心、耐心,加油!
我还修改的地方是:
//This is required only if you will compile the MATLAB wrapper
//MATLAB directory should contain the mex bin
MATLAB_DIR := /usr/local/MATLAB/R2015b
这里,我需要配置Matlab wrapper,所以需要提供Matlab的环境位置。
接下来就是:
$ make all
或者:
$ make all -j8
我推荐后面一种编译方式,编译速度快很多,意思是用电脑的8个线程来编译。caffe官网上建议根据自己计算机的实际情况合理分配线程。
之后:
$ make test -j8
$ make runtest -j8
这里,如果之前的CUDA没有安装好,或者CUDA的库没有配置好,会出现如下错误:error while loading shared libraries: libcudart.so.7.5: connot open shared object file: No such file or directory,如下图:
这里要使得编译通过,得加上如下语句:
$ export PATH = /usr/local/cuda-7.5/bin:$PATH
$ export LD_LIBRARY_PATH = /usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
我比较奇怪,我在之前一台机子上编译的时候并没有出现这种问题,但这里却碰到很多次了。仔细Google一下,碰到这种问题的还挺多。
之后,make runtest -j8
完成,对于我编译的版本的caffe,出现了如图的警报:YOU HAVE 2 DISABLED TESTS
我跑了两遍,都出现了这种情况。Google之,发现caffe作者之一的Shelhamer在Github上有解答:
所以,这不是我编译出了问题,而是这个版本caffe自己本身的问题。
最后一部分就是编译caffe的python wrapper,与编译Matlab的wrapper。
$ make pycaffe
$ make matcaffe
这里一个问题是,经常当我们编译好python的接口后,进入python控制台,想import caffe
导入caffe模块的时候,会出现如下的错误:
No Module named caffe
解决办法是,export
导入编译好的python借口的路径:
$ export PYTHONPATH=/home/chenxp/caffe/python:$PYTHONPATH
根据我的实践,只要是成功编译好python wrapper的情况下,这种方法还没有不成功过。
/home/chenxp/caffe/python
是我的路径,这个根据自己的路径正确填写即可。
之后,就可以import caffe
啦~^_^
至此,caffe的配置、编译、安装已经完成,enjoy…Y(^_^)Y…
再强调一次,每个人的环境都不一样,每个人遇到的问题也会不一样,所以解决方法不能一概而论,没有完全的通解。所以,在遇到实际的报错时,还需要自己去探索解决。加油,希望你能体会到这种解决问题的快乐!
最后,附上我配置过程中的各种库与包,但还是强烈建议去官网下载自己对应的包。
1. Nvidia CUDA: http://pan.baidu.com/s/1gfwlb31 (key: gmxf)
2. Intel Parallel Studio XE: http://pan.baidu.com/s/1miEiN0G (key: ax67)
3. Nvidia cuDNN: http://pan.baidu.com/s/1o7Di4P0 (key: dyyk)