本次安装caffe是在新的笔记本上,感觉与之前在台式机上的安装还是有一定的区别。加之是在新的ubuntu16.04系统上安装的,可参考教程较少。而且其中添加了不少库,修改的一些错误,难免会有遗漏。如果发现本文未提及错误,欢迎一起讨论学习。另外,看到有的人说安装了半个多月,多次重装,希望有问题还是先把问题查清楚,不要盲目重装系统;其次,安装的时候最好记录自己安装的过程和内容,避免遗漏和重复,出问题了也可以与别人的教程相对比。
首先介绍安装条件和软件准备:
- 联想笔记本电脑Y700-15ISK,双显卡nvidia的GTX960M,内存16G
- Ubuntu16.04系统,选择该系统主要是能够完美支持新笔记本的所有硬件
- cuda7.5安装与配置,cudnn5.0安装与配置
- 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: 10