这两天帮教研室大博士给工作站安装caffe,据说这玩意是加州伯克利分校一个中国学生开发的给神经网络做训练的东东,超好用,全世界都在用,还开源免费!
就是说不太好装,说一般都得装个三天以上,实际上我大概也花了这么多时间,不过装下来才发现走了好些弯路,下面就让我来分享一下我的经验!
1 Ubuntu14.04(64位)安装cuda7.5
写在前面:在安装cuda之前,最好保证系统没有更新显卡驱动,如果已经更新,最好先卸载显卡驱动后在安装cuda。
首先验证你是否有nvidia的显卡(http://developer.nvidia.com/cuda-gpus这个网站查看你是否有支持gpu的显卡):
$ lspci | grep -i nvidia
查看你的
linux
发行版本(主要是看是
64
位还是
32
位的):
$ uname -m && cat /etc/*release
我的linux版本是Ubuntu 14.04 LTS
看一下gcc的版本:
$ gcc --version
我用的版本是 gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
首先下载nvidia cuda的仓库安装包,下载地址:
注意上面的网址虽然显示到是cuda6.5但实际下载的是cuda7.5版本,如想装6.5或其他版本需要在https://developer.nvidia.com/cuda-downloads里面找,此处环境变量均根据cuda7.5设置,若cuda本版不同请根据自身情况修改!
下载完成之后,得到一个文件名为cuda-repo-ubuntu1404_7.5-18_amd64.deb 到deb安装包,可以使用如下命令安装它:
$ sudo dpkg -i cuda-repo- ubuntu1404_7.5-18_amd64.deb
安装完deb包后,需要安装cuda以及显卡所需到驱动(安装cuda的同时就会把显卡驱动也全部安装好,这个真的很方便。但是下载的时间有点长。)
$ sudo apt-get install cuda
使用apt-get时注意/etc/apt/sources.list里的更新源可用,并确保电脑可以链接互联网。
安装完之后你需要设置环境变量:
可以加在/etc/bash.bashrc或者/etc/profile的文件末尾。
$ sudo gedit /etc/bash.bashrc
在结尾处添加内容:
export PATH=/usr/local/cuda-7.5/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
然后source一下
$ source /etc/bash.bashrc
接下来设置动态链接用到的路径
$ sudo gedit /etc/ld.so.conf.d/cuda.conf
在cuda.conf输入下面内容
/usr/local/cuda-7.5/lib64
执行下列命令使之立刻生效
$ sudo ldconfig
设置完毕之后,你还可以选择是否安装cuda附带的示例代码(<dir>表示你要安装的位置,你可以将<dir>替换成~):
$ cuda-install-samples-6.5.sh <dir>
接下来做一些验证工作:
查看显卡的驱动版本
$ cat /proc/driver/nvidia/version
查看nvcc编译器的版本,验证cudatoolkit是否成功。
$ nvcc -V i
编译cuda的示例代码:
$ cd ~/NVIDIA_CUDA-7.5_Samples
然后make一下编译代码。
$ sudo make
进入bin路径运行devicequery
$ cd ~/NVIDIA_CUDA-7.5_Samples/bin/x86_64/linux/release
$ ./deviceQuery
具体的安装过程可以参考http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/index.html 。这里必须要强调的是:一定要是新的ubuntu14.04 在安装后先不要更新显卡驱动,因为sudo apt-get install cuda会安装所需驱动,提前安装可能导致cuda安装失败。此外需要提一点,在没有安装显卡驱动前,启动ubuntu可能会在通过grub后直接黑屏(未进入开机登录界面),这是由于没有显卡驱动的原因导致gnome没有正常启动,可以在grub里通过恢复模式启动(启动后可能屏幕分辨率也很渣),待cuda帮你安装好驱动后就会正常了。
2 安装Caffe
2.1 安装opencv 2.4.11
本人是手动安装,不过网上很多人是使用从github上下载的现成的安装脚本,我没有试过,不保证一定可用,也在这里贴出(照顾懒人:-):
https://github.com/jayrambhia/Install-OpenCV,下载后解压,然后进去该目录,选择自己的操作系统,然后执行下面命令,大概需要二三十分钟。
$ chmod a+x *.sh #给脚本增加可执行权限
$ sudo ./dependencies.sh #安装所需依赖
$ sudo ./open2_4_9.sh #安装opencv
中途可能会报错
opencv-2.4.9/modules/gpu/src/nvidia/core/NCVPixelOperations.hpp(51): error: a storage class is not allowed in an explicit specialization
解决方法在此:http://code.opencv.org/issues/3814
下载 NCVPixelOperations.hpp 替换掉opencv2.4.9内的文件, 重新build。
下面介绍下我自己的安法(当然可能没有上面脚本那么方便,但实测可行)
安装到opencv版本为2.4.11,请确保准备好gcc和cmake等工具
1 安装所需依赖
使用apt-get 安装的依赖有:
build-essential | libgtk2.0-dev | libjpeg-dev | libtiff4-dev |
libjasper-dev | libopenexr-dev | python-dev | python-numpy |
python-tk | libtbb-dev | libeigen2-dev | yasm |
libfaac-dev | libopencore-amrnb-dev | libopencore-amrwb-dev | libtheora-dev |
libvorbis-dev | libxvidcore-dev | libx264-dev | libqt4-dev |
libqt4-opengl-dev | sphinx-common | texlive-latex-extra | libv4l-dev |
libdc1394-22-dev | libavcodec-dev | libavformat-dev | libswscale-dev |
2下载并安装opencv源文件
从下载地址http://opencv.org/downloads.html 中选择我们使用到opencv 2.4.11 for linux/Mac下载zip压缩包,将压缩包考入安装目录然后解压:
$ unzip opencv-2.4.11.zip -d .
进入解压后的文件夹中,然后创建一个build目录用于cmake
$ mkdir build
$ cd build
进入
build
目录后执行
cmake
命令
$ sudo cmake ..
之前在自己到桌面机上安装时没有遇到问题,这次在工作站上遇到报错了,增加如下参数就通过了(如果没报错就不用加这个参数了)
$ sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..
cmake成功以后,执行:
$ sudo make
$ sudo make install
途中应该不会遇到报错,接下来设置动态链接用到的路径
$ sudo gedit /etc/ld.so.conf.d/opnecv.conf
在opnecv.conf里面添加
/usr/local/lib
<dir>/opencv-2.4.11/build/lib/ #其中<dir>为你opencv的实际安装路径
再执行
$ sudo ldconfing
最后再添加一个所需到环境变量
$ sudo gedit /etc/bash.bashrc
在末尾添加内容
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
然后source一下
$ source /etc/bash.bashrc
到此应该安装完成,测试:
进入opencv文件夹下的sample/c目录
$ cd samples/c
$ ./build_all.sh
$ ./facedetect lena.jpg
参考 http://blog.sina.com.cn/s/blog_6e71624c0100n5f1.html
2.2 BLAS的安装
BLAS(Basic Linear Algebra Subprograms,基础线性代数程序集)是一个应用程序接口(API)标准。他的实现有很多,caffe用的是其中的三种实现ATLAS, MKL, or OpenBLAS.选择其一安装就可。
其中atlas和mkl我都安装了并且经测试均可用,原则上只需选择一个就行,不过听说从caffe实际体验效果上看,mkl>OpenBLAS>atlas。
(1)安装mkl:
首先下载并安装英特尔数学内核库 Linux* 版MKL,下载链接是:https://software.intel.com/en-us/intel-education-offerings, 请下载Student版,需要使用教育网的邮箱注册(如邮箱名里带.edu.cn的),然后下载student免费版本(否则需要付费使用,如果没有教育网邮箱又不想付费请使用atlas或者openbals),有网友说会收到一个序列号用于下载和安装,然而我并没有收到,注册后就直接就能下载了,下载到的安装包为parallel_studio_xe_2016.tgz,3.8个G,慢慢等待吧。
接下来是安装过程,先授权,然后安装:
$ tar zxvf parallel_studio_xe_2016.tgz
$ chmod a+x parallel_studio_xe_2016 -R #给文件里到脚本增加可执行权限
$ cd parallel_studio_xe_2016 #进入解压后目录
$ sudo ./install_GUI.sh #启动图形界面安装mkl
下面的步骤就是一步步点next了(若警告说缺少lib32库,忽略即可)
MKL与CUDA的环境设置:
$ sudo gedit /etc/ld.so.conf.d/intel_mkl.conf
添加:
/opt/intel/lib/intel64
/opt/intel/mkl/lib/intel64
然后完成lib文件的链接操作,执行:
$ sudo ldconfig –v
(2)安装atlas:
直接通过apt-get下载即可:
$ sudo apt-get install liblapack-dev
$ sudo apt-get install libatlas-base-dev
$ sudo apt-get install libatlas-dev
2.3 安装其他依赖项安装
使用sudo apt-get install安装以下依赖项
libprotobuf-dev | libleveldb-dev | libsnappy-dev | libopencv-dev |
libboost-all-dev | libhdf5-serial-dev | libgflags-dev | liblmdb-dev |
libgoogle-glog-dev | protobuf-c-compiler | protobuf-compiler |
经实际测试以上依赖均可通过apt-get完成安装(也可到http://pkgs.org下载对应到deb安装包,不过需要注意版本,deb包的使用方法见http://www.cnblogs.com/TankXiao/p/3332457.html#removeY),需要注意的是,网上有些网友提供教程也提供了下载独立的安装包通过make install的方式安装其中某些依赖,如protobuf、gflags、google-glog,我的建议是如果以上依赖可以通过atp-get或者下载deb包的方式顺利安装并且在后面安装caffe的时候没有报有关这些依赖的错误的话,尽量不要从github或其他网站下载安装包手动安装。
再次强调,如果以上依赖已经通过apt-get成功安装,就不要去其他网站下载安装包手动安装了,具体原因我会在后面进行解释。由于我在以下这四个依赖项上纠结的时间比较长,所以有必要特别说明一下,此处若没有遇到问题可以跳过,后面若遇到问题再回来看看。
(1)protobuf
放在开头提一下:如果你之前已经下载并安装过这个包,但是在安装caffe的时候总是报与protobuf有关的错误,那么请参考后面我提到的方法卸载该安装包。
从https://github.com/google/protobuf 可以下到安装包,注意他提供了几个版本,亲测可用到是名叫protobuf-master的这个zip包(版本为libprotoc 3.0.0)。对应的apt-get安装的是protobuf-c-compiler、protobuf-compiler这两个依赖。安装方法为
先将protobuf-master.zip解压,解压后进入该目录,然后打开autogen.sh这个脚本文件,我们需要进行一下修改。
$ gedit autogen.sh
用#将curl $curlopts -O https://googlemock.googlecode.com/files/gmock-1.7.0.zip 注释掉,如图
保存退出,然后去csdn下载一个gmock-1.7.0.zip包放到该目录下,再执行这个脚本。
$ ./autogen.sh#运行这个sh脚本
如果提示./autogen.sh: 40: ./autogen.sh: autoreconf: not found这个错误,说明没装automake工具,运行命令:
$ sudo apt-get install autoconf automake libtool
然后在执行autogen.sh就应该OK了,然后依次执行:
$ ./configure
$ sudo make
$ sudo make check #检查一下make到效果,可以跳过
$ sudo make install
安装完成后在命令行输入
$ protoc --version
可以看到版本为libprotoc 3.0.0
需要注意到是,除了上面protobuf-c-compiler和protobuf-compiler这两个依赖,其他以lib开头的依赖库仍需通过apt-get或者到http://pkgs.org下载deb包安装(针对64位ubuntu 14.04对应的为amd64版本的deb)。
安装包的卸载:
然而我特别强调的是,我之所以不推荐这样安装protobuf,是因为,第一是这样安很麻烦,第二是事实上,我只这样成功安装过一次caffe,之后总之会遇到protoc: error while loading shared libraries: libprotoc.so.10: cannot open shared object file: No such file or directory这样到问题。如果你也遇到这个问题,那就果断把进入protobuf-master然后
$ sudo make uninstall
然后用apt-get重新安装以上依赖,包括protobuf-c-compiler和protobuf-compiler。如果安装了依赖仍然出现相关得问题,如找不到对应到头文件,则先将这些依赖移除:
$ sudo apt-get remove protobuf-c-compiler protobuf-compiler libgoogle-glog-dev libgflags-dev libprotobuf-dev
再重新安装一次:
$ sudo apt-get install protobuf-c-compiler protobuf-compiler libgoogle-glog-dev libgflags-dev libprotobuf-dev
注意这样安装上的protobuf版本为libprotoc 2.5.0
(2)gflags
其实sudo apt-get install libgflags-dev(注意是开头是libgflags )就好了,这里我主要想说下如果不幸手动安装却在安装caffe的时候有相关且莫名奇妙错误的时候该怎么办,比如我手动安装(同时也用apt-get安装了)就了导致最后在caffe make runtest的时候居然报错说libflags库既被动态链接,又被静态链接这种奇葩错误,最后想删除的时候发现还不支持make uninstall这样的命令,如果你也遇到这种情况,可以这样(如果遇见可以无视):
$ sudo find /usr-name “*gflags*” #查找与gflags有关的库和头文件
然后将找到的/usr/*/include/google/gflags、usr/*/include/gflags里的头文件以及/usr/local/lib/libgflags*的库文件(如果有的话)都手动删除。再使用apt-get将libgflags移除重新安装
$ sudo apt-get remove libgflags-dev
$ sudo apt-get install libgflags-dev
(3)glog
和前面一样其实sudo apt-get install libgoogle-glog-dev(注意这里是libgoogle开头的)就好了,然而,我一开始也是通过下载手动安装包来make install,当然实测手动安装也是可以的(倒没有protobuf和gflags那么坑),安装包在csdn就可以下到glog-0.3.3.tar.gz。
2.4 安装caffe并测试
前面准备工作都做好了,开始进入正题,首先需要在https://github.com/Yangqing/caffe下载安装包caffe-master。
切换到Caffe的下载文件夹,然后执行:
$ cp Makefile.config.example Makefile.config
caffe-master目录下到Makefile会根据Makefile.config的内容执行编译(而Makefile.config.example作为备份),用户根据需求修改相应的配置即可(文件中的注释写的很清楚了),原则上不要轻易直接修改Makefile里的内容,虽然我之前由于遇到问题也去动过,但后来所有直接对Makefile的改动都是没必要的。
$ gedit Makefile.config
修改“BLAS := mkl”,如果安装的是Atlas,则不需要更改(默认就是atlas).
好了,一切就绪,开始编译caffe-master!!!
$ sudo make all -j8
$ sudo make test -j8
$ sudo make runtest -j8
这里的"-j8"是使用CPU的多核进行编译,可以极大地加速编译的速度,建议使用。理论上你计算机有几核心就可以-j?,如果4核就-j4。但是太高超出是有可能出现奇怪错误的(我们教研室工作站的cpu是E5 2650所用-j8没问题:-D)。
如果仍然有错,你需要根据报错的内容判断前面是否有哪部没有做对,确保所有的依赖均正确安装,对前面的步骤进行修改后,回到caffe-master目录下,记得先sudo make clean再重新编译。上一节后半段解释了一些我主要遇到的问题,可以回去参考下。
如果通过不报错,那么恭喜你安装成功了,赶紧下一个demo跑跑吧。
在此展示下runtest的结果:
2.5 小结
总的来说,安装caffe要搞清楚所需的依赖库都有哪些,因为基本上在编译caffe的时候如果遇到报错,肯定是跟找不到某个库有关,这是需要仔细阅读下报错的提示信息,在跟前文表格中提到的依赖库对比一下,看看是不是漏装了哪个库,或者虽然装上了,但是由于版本原因或者其他问题实际并没正确安装这些库,如果是ubuntu平台的话,可以apt-get remove一下再重新install试试。另外注意不要同时使用apt-get和其他方式把一个依赖库重复安装,因为可能会出现奇怪的问题。
如果你当初是用deb包的方式安装的,并且在安装后出现了依赖关系错乱的情况,那么恭喜你,你遇见了跟我当初一样的问题,这种情况的出现可能导致你连apt-get都无法使用(他会提示你说apt-get所需要的依赖也不满足),这种时候你就要回忆一下你当时用deb包装了什么了,很可能是跟gcc有关的包,并且这个包本身是gcc需要的依赖,而你改变了这个依赖的版本,那么你必须想办法再把这个依赖恢复回来,最好的做法是下载一个符合当前gcc版本的deb覆盖掉之前的安装。
在一点就是gcc的版本问题,我用的是gcc-4.8,如果最后查不出问题出哪了,试下gcc-4.7
最后强调一下,本文主要介绍的是caffe在64位ubutun 14.04 LTS下的安装,请在安装前确认自己的操作系统是否适用此方法。
参考1 http://weibo.com/p/2304189db078090102vdvx
参考2 http://blog.csdn.net/kuaitoukid/article/details/40395617
参考3 http://www.cnblogs.com/platero/p/3993877.html
参考4 http://www.cnblogs.com/cj695/p/4498270.html