为了使用caffe,特地装了linux系统,版本:Ubuntu14.04 X64 可参照 http://www.cnblogs.com/platero/p/3993877.html
这个博客写的更好http://www.haodaima.net/art/2823705
第一步:第一部分 Linux安装
Linux的安装,如果不是Linux粉,只是必须,被迫要用它来作作科研什么的,建议安装成双系统,网上方法很多,这里我就不详细写了,安装还算是傻瓜式的,和windows的过程类似,至于语言,如果觉得难度还不够大的话,完全可以装E文版的,我是装的简体中文版,我总共用分出的100G的空间来安装Ubuntu 14.04,这个版本是最新的版本,有个好处是,可以直接访问Windows8.1的NTFS分区,不用做额外的操作,而且支持中文,例如:$ cd /media/yourname/分区名字/文件夹名,当然GUI就更方便了
我的分区设置如下:
根分区: \ 50G,
Swap交换分区:16G ,这里,我设置和我的内存一样,据说小于16G的内存,就设置成内存的1.5-2倍
Home分区:剩余的34G
装好之后,重启电脑,有的人会直接进Linux,有的会直接Windows,谷歌或者百度解决方法
PS: 其实到现在感觉空间可能小了, 想想Imagenet 137G的训练文件,觉得应该把Home设置成300-500G以上,会更合适吧。下次安装的时候,再改了,现在暂时不想动了。
PS:今天还是重新装了,把home分区扩大到500G。所以建议真的要大数据实验的小伙伴,也趁早考虑。
PS: Ubuntu下访问网页总是很慢,让我深感它和Windows的差距,可是为什么还是有那么多人向往它呢?下面的办法可以解决部分访问的问题,特别是国外的网站,但是遇到一些调用了被墙的网站的东西,比如google的字体,还是没办法,仍然会在哪里转圈圈。这里似乎是操作系统的机制引起,Windows的浏览器会忽略那些错误,而Ubuntu下的浏览器会不停尝试。废话少说,部分问题的解决办法:
$ sudo apt-get install dnsmasq
$ sudo gedit /etc/dnsmasq.conf
找到 # resolv-file=
修改为:resolv-file=/etc/resolv.dnsmasq.conf
$ sudo cp /etc/resolv.conf /etc/resolv.dnsmasq.conf
$ sudo gedit /etc/resolv.conf
删除所有域名服务器,保留:nameserver 127.0.0.1
第二部分:nVidia驱动和CUDA Toolkit的安装和调试
PS:这里其实可以参考nVidia 官方提供的CUDA安装手册。https://developer.nvidia.com/rdp/cuda-65-rc-toolkit-download#linux。一般要输入你的用户名和密码,就是下载6.5的那个账号。
一、Verify You Have a CUDA-Capable GPU
执行下面的操作,然后验证硬件支持GPU CUDA,只要型号存在于https://developer.nvidia.com/cuda-gpus,就没问题了
$ lspci | grep -i nvidia
二、Verify You Have a Supported Version of Linux
$ uname -m && cat /etc/*release
重点是“x86_64”这一项,保证是x86架构,64bit系统
三、Verify the System Has gcc Installed
$ gcc --version
没有的话就先安装吧,这个是必须的用来编译CUDA Toolkit,不过Ubuntu 14.04是默认有的
四、Download the NVIDIA CUDA Toolkit
下载地址:https://developer.nvidia.com/cuda-toolkit
验证地址:https://developer.nvidia.com/rdp/cuda-rc-checksums
$ md5sum
例如:md5sum cuda_6.5.11_rc_linux_64.run ,这个文件的正确 md5 = a47b0be83dea0323fab24ca642346351
这个感觉蛮重要,我第一次安装的时候md5就没通过,强制安装,结果就有问题,后面重新下载了再安装了一次
五、Handle Conflicting Installation Methods
根据官网介绍,之前安装的版本都会有冲突的嫌疑,所以,之前安装的Toolkit和Drievers就得卸载,屏蔽,等等
六、Graphical Interface Shutdown
退出GUI,也就是X-Win界面,操作方法是:同时按:CTRL+ALT+F1(F2-F6),切换到TTY1-6命令行模式。
关闭桌面服务:
$ sudo stop lightdm
七、Interaction with Nouveau
Nouveau是一个开源的显卡驱动,Ubuntu 14.04 默认安装了,但是它会影响nVidia驱动的安装,所以只有请他回老家了,sorry!
将nouveau添加到黑名单,防止它启动
$ cd /etc/modprobe.d
$ sudo vi nvidia-graphics-drivers.conf
写入:blacklist nouveau
保存并退出: wq!
检查:$ cat nvidia-graphics-drivers.conf
对于:/etc/default/grub,添加到末尾。
$ sudo vi /etc/default/grub
末尾写入:rdblacklist=nouveau nouveau.modeset=0
保存并退出: wq!
检查:$ cat /etc/default/grub
官网提供的操作:
$ sudo mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
然后重新生成initrd文件
$ sudo dracut /boot/initramfs-$(uname -r).img $(uname -r)
$ sudo update-initramfs -u
上面那条是nVidia官方提供的命令,不知道为什么在我这里会提示dracut是不存在的命令,也许是版本问题,或者少了什么包,不过无所谓,第二条命令也可以搞定,应该是一样的功能。(如果我理解错误,欢迎小朋友们指教,我会改正)
PS:其实,这一连串的工作,有点没搞懂,因为有的命令和文件不存在。原理理解了,但是步骤还是有点模糊,不过,我是照上面的操作完成了,后面的也没出问题,应该应付过去了吧。
八、Installation
鉴于安装过程中遇到的一些问题和启示,建议先安装官方最新版的显卡驱动,然后再安装CUDA,这里可能是CUDA内置的驱动不太完整,或者适应性差了一点。GTX显卡驱动的下载地址如下(Tesla版的驱动,请大家自己去nVidia的官网下载):
下载地址:http://www.geforce.cn/drivers
$ sudo sh ./NVIDIA-Linux-x86_64-340.24.run
切换到cuda_6.5.11_rc_linux_64.run 所在的目录,然后执行安装命令:
$ sudo sh cuda_6.5.11_rc_linux_64.run
再次提醒,安装前一定要执行 md5sum ,我第一次安装就是执行了,发现不一样,然后没有理它直接安装,导致安装的Sumary里显示Driver成功,Toolkit和Samples失败,第二次在装就好了。
至于如果发现md5检测不一致,怎么办?别逗了,去nVidia重新下载就行了,地球人都知道,别无限循环就好^_^!
这里会一路问你各种问题,基本上就是Accept-yes-Enter-yes-Enter-yes-Enter, 其实就是让你接受协议,然后安装的默认位置确认等等,recruit就别自定义安装位置了,默认才是天堂。
安装完会提示丢失了四个库:libGLU.so, libx11.so, libxmu.so, libxi.so 这个木有关系,下一步就是解决这个问题的。
九、Extra Libraries
安装一些必要的库文件,譬如:OpenGL (e.g., Mesa), GLU, GLUT, and X11 (including Xi, Xmu, and GLX).
$ sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
这个可以切换到GUI界面在操作,要不然那些提示信息,都是乱码,什么都看不懂,不过如果你的系统是E文的,这句话忽略。这里,保证网络不要中断就行。
十、驱动装完了,可以回到GUI界面了,也可以继续留这里玩文本。。。
$ sudo start lightdm
十一、POST-INSTALLATION ACTIONS
这一步就是验证一下安装是否正确,编译和完成以下CUDA自带的程序,建议做一下~
Environment Setup
$ export PATH=/usr/local/cuda-6.5/bin:$PATH
$ export LD_LIBRARY_PATH=/usr/local/cuda-6.5/lib64:$LD_LIBRARY_PATH
(Optional) Install Writable Samples
$ cuda-install-samples-6.5.sh
a. 验证驱动的版本,其实主要是保证驱动程序已经安装正常了
$ cat /proc/driver/nvidia/version
b. Compiling the Examples
$ nvcc -V
不出意外的话应该会提示,nvcc没有安装,其实就是,nvidia-cuda-toolkit的编译器没有安装完整,总之,根据提示继续就好了
$ sudo apt-get install nvidia-cuda-toolkit
我这里还差接近400MB的文件要下载,它是全自动的,所以只要保证网络畅通,一杯咖啡在手,然后就可以XXX了。可悲的是,我这里天色已晚,隔壁的Wifi也断了,笔记本的360随身Wifi连上一会也断了,只有收东西回宿舍,明天再继续了。看看表,靠,00:03,今天打卡时间又错过了。
次日,这里安装完,就可以编译了,切换目录到~/NVIDIA_CUDA-6.5_Samples,记性没问题的话,应该还记得它是安装在Home文件夹的,穿越过去就好了,然后执行:
$ cd /home/username/NVIDIA_CUDA-6.5_Samples
$ make
c. Running the Binaries
运行编译好的文件,看看设备的基本信息和带宽信息:
$ cd /bin/x86_64/linux/release
$ ./deviceQuery
$ ./bandwidthTest
PS:如果测试的时候出现说运行版驱动和实际驱动不符(英文原文不记得了,没记下来),原因可能是因为后面安装的nvidia-cuda-toolkit更新了配置文件,所以和原始的Cuda-Samples的配置或者是驱动程序有变化,所以检测无法编译通过。考虑下面的解决方法:
第二步:
原博主使用的是MKL,但我图省事,没有安装MKL,而是用了atlas,一句命令搞定
sudo apt-get install libatlas-base-dev
第三步:
opencv部分,用了https://github.com/jayrambhia/Install-OpenCV的ubuntu下的opencv-2.4.9的脚本
这里直接执行脚本的话,除了错误比较难以定位,所以我是把里面的命令一句一句手动执行的
其中遇到了下面几个问题:
sudo apt-get -y install libopencv-dev提示需要依赖项,
改用sudo aptitude install libopencv-dev
因为没有aptitude,先安装 sudo apt-get install aptitude
sudo apt-get -y install x264 v4l-utils ffmpeg
这一步因为找不到ffmpeg而中断
一般找不到包,就到下面的网址搜索,看哪个镜像上有这个源,添加到source里面就可以了
http://packages.ubuntu.com/
搜索ffmpeg,Distribution选any,因为可能是没有trusty的资源
然后添加镜像,
sudo gedit /etc/apt/sources.list
在sources.list里面加一行deb http://cn.archive.ubuntu.com/ubuntu vivid main universe
然后更新源
sudo apt-get update
然后sudo apt-get -y install x264 v4l-utils ffmpeg就可以了
搞定这三个比较麻烦的依赖项后,继续安装opencv
编译opencv的时候,脚本原有的代码是:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
这里我去掉了-D WITH_QT=ON,因为我没有装QT,但是需要加上-D BUILD_TIFF=ON,否则编译caffe的时候会有这样的错误
/usr/lib/libopencv_highgui.so.2.4: undefined reference to ' 1>
编译过程如下:
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D BUILD_TIFF=ON -D WITH_OPENGL=ON..
make -j4
sudo make install
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
第四步:
安装其他依赖项,没什么问题
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
第五步:
编译caffe:
开始出现了这个错误:
./include/caffe/util/io.hpp:8:18: fatal error: hdf5.h: 没有那个文件或目录
这里是因为没有按照hdf5库,因为这个库在anaconda里面已经有了,需要配置系统路径。
在~/.bashrc文件里面添加
LD_LIBRARY_PATH=youranacondapath/lib:LD_LIBRARY_PATH
export LD_LIBRARY_PATH
记住啊,youranacondapath替换成你自己的anaconda安装的路径,否则就太二了,我自己就犯了一次二.....
然后出现了这个错误
/usr/lib/libopencv_highgui.so.2.4: undefined reference to ' 1>
/usr/lib/libopencv_highgui.so.2.4: undefined reference '
解决方式前面说了,就是编译opencv的时候要加上 -D BUILD_TIFF=ON
然后又出现了这个错误,这个错误曾让我苦恼了两天,还因此把系统搞崩溃一次....不得不重装
最后还是多亏了最开头提到的博客以及热心网友 无声的雨 的帮助,非常感谢,当代活雷锋啊!
//usr/lib/x8664-linux-gnu/libx264.so.142:对‘’未定义的引用
//usr/lib/x86_64-linux-gnu/libx264.so.142:对‘’未定义的引用
//usr/lib/x86_64-linux-gnu/libxvidcore.so.4:对‘’未定义的引用
//usr/lib/x86_64-linux-gnu/libvorbis.so.0:对‘’未定义的引用
解决方法:如果你装了anaconda包的话,删除anaconda/lib/下面的 libm
sudo rm -rf libm*
最后编译成功,哈哈。
make all
make test
最后一步
make runtest
有错误
.build_release/test/test_all.testbin 0 --gtest_shuffle --gtest_filter="-GPU"
.build_release/test/test_all.testbin: error while loading shared libraries: libhdf5_hl.so.8: cannot open shared object file: No such file or directory
make: *** [runtest] 错误 127
这里按照开头提到的博客中红字的两段就能搞定
其实就是在LD_LIBRARY_PATH里面添加anaconda的路径,前面已经做过了。但因为我编译caffe时候用的是自己的用户,后来make runtest的时候用了root用户,两个用户从~/.bashrc不是一个,所以我索性两个都添上了。
好了,折腾了一周,装了两次系统,终于把caffe安装好了,接下来就是学习怎么使用了。
最后还是要谢谢这位博主:普兒,以及这位热心网友:_无声的雨
是你们让我感受的社会的温暖,一次又一次把我崩溃的心灵拯救回来,让我体会到了人间有真情。
要是哪位读者去这个博客看看,就能看到我在留言里问的各种小白问题了,哈哈。