本次安装caffe是在新的笔记本上,感觉与之前在台式机上的安装还是有一定的区别。加之是在新的ubuntu16.04系统上安装的,可参考教程较少。而且其中添加了不少库,修改的一些错误,难免会有遗漏。如果发现本文未提及错误,欢迎一起讨论学习。另外,看到有的人说安装了半个多月,多次重装,希望有问题还是先把问题查清楚,不要盲目重装系统;其次,安装的时候最好记录自己安装的过程和内容,避免遗漏和重复,出问题了也可以与别人的教程相对比。
首先介绍安装条件和软件准备:
- 联想笔记本电脑Y700-15ISK,双显卡nvidia的GTX960M,内存16G
- Ubuntu16.04系统,选择该系统主要是能够完美支持新笔记本的所有硬件
- BLAS安装与配置
- OpenCV3.1.0安装与配置
- Python安装与配置,选择的是anaconda2-4.0,即python2.7
- matlab2014a下载与安装,下载链接http://pan.baidu.com/s/1c2I6UTM ,密码jdit
- caffe官网下载与安装
参考博客与文章:
ubuntu16.04系统cuda7.5安装教程:https://www.pugetsystems.com/labs/hpc/NVIDIA-CUDA-with-Ubuntu-16-04-beta-on-a-laptop-if-you-just-cannot-wait-775/
caffe官网教程:http://caffe.berkeleyvision.org/installation.html
ubuntu16.04系统cuda7.5配置与caffe安装教程:http://blog.csdn.net/g0m3e/article/details/51420565
ubuntu14.04系统上caffe安装:http://www.cnblogs.com/platero/p/3993877.html
一、Ubuntu16.04系统安装
这一部分接触过ubuntu系统的应该比较熟悉,网上也有很多可以参考的例子,就不再赘述。另外,我是在一个SSD固态硬盘上单独安装的系统,之前在台式机上也是这么实现的,感觉这样和windows双系统故障会少些。
二、显卡驱动与cuda安装
1、显卡驱动安装
安装完ubuntu16.04系统之后,直接更新系统并重启。在多显卡的笔记本中,可能需要在BIOS系统里选择”自由选择显卡“,这样系统才能识别nvidia的显卡,并进行驱动更新。我这里是运用ppa更新的最新驱动,使用起来能够得到挺好的体验,并能够实现双显卡的自由切换。
首先,通过快捷键Ctrl+Alt+T打开终端,然后加入官方ppa源:
$ sudo add-apt-repository ppa:graphics-drivers/ppa
需要输入用户密码,并确认链接源。之后刷新软件库并安装最新的驱动,在命令行输入:
$ sudo apt-get update
$ sudo apt-get install nvidia-367 nvidia-settings nvidia-prime
由于联想笔记本的UEFI保护,会拒绝第三方的驱动,因此需要关闭该保护,关闭之后重启能够正常驱动nvidia,并能够进行双显卡的切换。
安装完成之后,可以通过系查看系统属性,看是否是nvidia的显卡。另外,也可以通过下面命令看是否安装成功:
$ nvidia-settings
如果出现的nvidia设置界面不是这样,驱动可能还是有问题。此处我出现的错误主要是是UEFI保护没注意到,导致重复安装了几遍。
2、cuda7.5 安装与配置
首先下载cuda7.5.run文件,如下图所示:
可以看到当前cuda7.5还不支持ubuntu16.04。参考别人的教程,主要是gcc版本的问题,实际是可以编译通过的。下载完15.04版本的run文件之后,一定要进行进行md5检验,校验码不对会出现安装之后重启不能进入界面的问题。
下载完成之后,cd进入文件所在目录,在终端进行如下操作
$ chmod 777 cuda_7.5.18_linux.run #获取文件权限
$ sudo ./cuda_7.5.18_linux.run --override #执行文件安装
注意后面的override是必须的,这样才能保证安装的过程中,不会出现编译器不支持的错误。另外,在选择条件的过程中,一定不要再次安装nvidia驱动,虽然cuda.run文件本身是包含又nvidia驱动的,但是本处直接安装会出错。下图是安装.run文件的配置:
安装完成之后会出现
============ Summary ============
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-7.5
Samples: Installed in /usr/local/cuda-7.5
之后更换cudnn动态库,可以获得更快的计算效率。下载完cudnn5.0之后进行解压,cd进入cudnn5.0解压之后的include目录,在命令行进行如下操作:
$ sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件
再将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 gedit /etc/profile
在打开的文件末尾加入:
export PATH = /usr/local/cuda/bin:$PATH
保存之后,创建链接文件:
$ sudo vim /etc/ld.so.conf.d/cuda.conf
按下键盘i进行编辑,输入链接库位置:
/usr/local/cuda/lib64
然后按esc,输入:wq保存退出。并在终端输入:
$ sudo ldconfig
使链接立即生效。
3、cuda用例安装与测试
在安装cuda.run文件时,我们已经选择安装了samples用例,还需要编译。因为当前的cuda还不支持gcc5.0以上的版本,在编译之前,我们需要修改配置文件,否则无法编译成功。在终端输入:
$ cd /usr/local/cuda-7.5/include
$ cp host_config.h host_config.h.bak #备份编译头文件
$ sudo gedit host_config.h
然后在115行修改编译其支持的版本:
# if GNUC > 4 || (GNUC == 4 && GNUC_MINOR > 9)
# error – unsupported GNU version! gcc versions later than 4.9 are not supported!
# endif /* GNUC > 4 || (GNUC == 4 && GNUC_MINOR > 9) */
将if后面连续两个4改为5即可,然后进入用例文件进行编译:
$ cd /usr/local/cuda/samples
$ sudo make all -j4
$ cd /usr/local/cuda/samples/bin/x86_64/linux/release
$ sudo ./deviceQuery
成功之后会出现下列信息:
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: “GeForce GTX 960M”
CUDA Driver Version / Runtime Version 8.0 / 7.5
CUDA Capability Major/Minor version number: 5.0
Total amount of global memory: 4044 MBytes (4240375808 bytes)
( 5) Multiprocessors, (128) CUDA Cores/MP: 640 CUDA Cores
GPU Max Clock rate: 1176 MHz (1.18 GHz)
Memory Clock rate: 2505 Mhz
Memory Bus Width: 128-bit
L2 Cache Size: 2097152 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes with 1 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 7.5, NumDevs = 1, Device0 = GeForce GTX 960M
Result = PASS
通过上述用例测试,就表明显卡驱动安装和cuda安装完全成功了。
二、BLAS安装与配置
BLAS(基础线性代数集合)是一个应用程序接口的标准。caffe官网上推荐了三种实现:ATLAS, MKL, or OpenBLAS。其中atlas可以直接通过命令行安装,在此不再介绍。我采用的是intel的mkl库,首先,通过上面链接在intel官网申请学生版的Parallel Studio XE Cluster Edition ,下载完成之后cd到下载目录进行安装:
$ tar zxvf parallel_studio_xe_2016_update3.tgz #解压下载文件
$ chmod 777 parallel_studio_xe_2016_update3 -R #获取文件权限
$ cd parallel_studio_xe_2016_update3/
$ sudo ./install_GUI.sh
安装完成之后,进行相关文件的链接:
$ sudo gedit /etc/ld.so.conf.d/intel_mkl.conf
在打开的文件中添加库文件:
/opt/intel/lib/intel64
/opt/intel/mkl/lib/intel64
添加完成之后,编译链接时lib文件立即生效:
$ sudo ldconfig
三、OpenCV3.1.0安装与配置
首先安装必要的库,有的依赖库我是已经安装过的,具体安装的先后关系已经忘了。如果出现有些依赖关系不满足的错误,可以再安装库:
$ sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev # 必要的基本库
根据上面的链接下载OpenCV3.1.0版本,并进行解压,解压之后进入安装文件目录:
$ cd opencv-3.1.0
$ mkdir build #创建build文件夹
$ cd opencv-3.1.0/build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ #生成的文件在bulid中,而生成的CMakeList.txt文件在上一级文件中
在configure过程中过程中,可能会出现下面的错误:
– ICV: Downloading ippicv_linux_20151201.tgz…
在直接下载该文件的过程中,会因为超时而失败,可以下载http://download.csdn.net/detail/yehuohan/9511463, 并替换掉 opencv-3.1.0/3rdparty/ippicv/downloads/linux-8b449a536a2157bcad08a2b9f266828b下的同名文件,然后再次cmake即可。生成编译文件之后,在opencv-3.1.0/build目录下,终端输入:
$ make -j4 #四核运算
$ sudo make install
此时,可能会出现另外一个错误:
/usr/include/string.h: In function ‘void* __mempcpy_inline(void*, const void*, size_t)’: /usr/include/string.h:652:42: error: ‘memcpy’ was not declared in this scope return (char *) memcpy (__dest, __src, __n) + __n;
这也是因为ubuntu16.04的个个g++版本太高的造成的,只需要在opencv-3.1.0目录下的CMakeList.txt 文件的开头加入:
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -D_FORCE_INLINES”)
添加之后再次进行编译链接即可。
4、python安装与配置
python的安装有两种方式:一种是系统自带的python,只需再安装相应的库即可;第二种是直接安装anaconda,很多相应的库已经包含了。第一种直接安装库文件比较简单,不需要修改相应的包含路径和库文件。本人因为习惯了anaconda,因此选择的是anaconda linux64 2.7版本(3.5版本我也试过,装caffe的时候可能会比较麻烦)。下载完成之后,最好也要进行md5sum的检验。完成之后,cd进入下载文件所在的目录,在命令行输入:
$ bash Anaconda2-4.0.0-Linux-x86_64.sh
安装完成之后,在.bashrc中添加Anaconda的库文件,一定不要在/etc/profile文件中添加。因为anaconda有几个链接库和系统链接库文件类似,如果添加到/etc/profile文件中,会出现电脑重启之后不能进入界面的情况
$ sudo gedit ~/.bashrc
然后加入库文件:
export PATH=”/home/lyndon/anaconda2/bin:PATH”exportLDLIBRARYPATH=”/home/lyndon/anaconda2/lib:LD_LIBRARY_PATH”
重启电脑之后,在命令行输入:
$ ipython
就可以看到python的版本,并进行运用了。
5、matlab的安装与配置
在网盘上下载安装包及Crack破解文件之后,解压两个压缩文件,并用Crack文件中的install替换matlab2014安装目录下/java/jar/下的install文件。然后在命令行cd进入matlab2014目录,输入:
$ sudo ./install
1、选择“不联网安装”;
2、当出现密钥时,随意输入20个数字12345-67890-12345-67890即可;
3、选择自己需要安装的工具;
4、需要激活时选择不要联网激活,运用Crack目录下的“license_405329_R2014a.lic”文件作为激活文件
安装完成之后,还要将Crack/linux目录下的libmwservices.so文件拷贝到/usr/local/MATLAB/R2014a/bin/glnxa64。在Crack/linux目录下的命令行输入:
$ sudo cp libmwservices.so /usr/local/MATLAB/R2014a/bin/glnxa64
安装完成之后,直接在命令行输入matlab,就能过进行使用了
6、caffe的安装与配置
首先,安装caffe必要的库文件:protobuf, glog, gflags, hdf5
$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
安装之后,anaconda应用时还是会出现错误。此时用anaconda的安装工具conda 再安装必要文件就行了,我安装了以下文件,后续ipython中就能够用caffe了。
$ conda install libprotobuf-dev libleveldb-dev
安装完成之后,进入caffe下载的文件目录,在命令行输入:
$ sudo cp Makefile.config.example Makefile.config # 备份配置文件
$ gedit Makefile.config # 修改编译文件
配置文件主要修改:
USE_CUDNN := 1 #取消注释,应用cudnn
OPENCV_VERSION := 3 #取消注释,应用opencv3
BLAS := mkl #BLAS库应用英特尔的mkl
ANACONDA_HOME := /home/lyndon/anaconda2
PYTHON_INCLUDE := (ANACONDAHOME)/include (ANACONDA_HOME)/include/python2.7 \
(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \ #选用anaconda作为python工具
INCLUDE_DIRS :=(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial #加入了 /usr/include/hdf5/serial,防止找不到hdf5.h错误
在make过程中可能 string.h ‘memcy’ was not declared in this scope的错误是,这也是因为ubuntu中gcc编译器版本太新,解决方法是打开Makefile文件,搜索并修改:
改 NVCCFLAGS += -ccbin=(CXX)?Xcompiler?fPIC(COMMON_FLAGS)
为 NVCCFLAGS += -D_FORCE_INLINES -ccbin=(CXX)?Xcompiler?fPIC(COMMON_FLAGS)
还可能出现:/usr/lib/x86_64-linux-gnu/libunwind.so.8: undefined reference to `[email protected]_5.0’,解决改问题只需要添加库文件路径就行,在home目录下的命令行输入:
$ sudo gedit ~/.bashrc
在文件中加入:
export LD_LIBRARY_PATH=”/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH”
在命令行输入:
sudo ldconfig #编译立即生效,然后进入caffe所在目录 cd /home/lyndon/lyndon/caffe/caffe-master
make all -j4 #编译文件 make test -j4 #编译测试文件
makeruntest make pycaffe
$ make matcaffe
如果编译都没报错,则表示基本成功,能够通过用例进行测试了。在运用anaconda和matlab时都需要修改相应的内容。
anaconda需要将caffe头文件进行链接:
$ sudo gedit ~/.bashrc
export PYTHONPATH=”/home/lyndon/lyndon/caffe/caffe-master/python:$PYTHONPATH”
之后编译链接库,打开ipython,输入:
$ import caffe
即可调用caffe相应模块了。matlab模块可以直接测试caffe/matlab/+caffe的用例。
7、总结
至此,ubuntu16.0下的caffe等相关文件全部安装完毕,其中问题最多的应该是双显卡问题中的nvidia驱动安装的问题,很有可能会驱动不起来,最好弄明白自己出错的原因,不然重装系统也没用。其次,在安装anaconda过程中,有些教程建议把库文件加入到/etc/profile环境中,这可能会造成电脑重启没法进入桌面的问题。其余的问题都应该不会造成电脑不能重启不能进入桌面的情况,可以直接google和百度解决。