Centos 6.5安装caffe全纪录
前不久,在一台新机器上安装了caffe,用于深度学习。其实本人小白一个,在安装caffe的过程中走了很多弯路。在遇到问题时,还好有**google**,可以得带、哦一些解答。但是悲剧的是,有一些问题还真是搜不到答案。比如:
NVCC src/caffe/layers/relu_layer.cu
src/caffe/layers/prelu_layer.cu(58): error: a host function call cannot be configured
detected during instantiation of "void caffe::PReLULayer::Forward_gpu(const std::vectorcaffe::Blob<Dtype *, std::allocatorcaffe::Blob<Dtype *>> &, const std::vectorcaffe::Blob<Dtype *, std::allocatorcaffe::Blob<Dtype *>> &) [with Dtype=float]" (127): here
当时google一下这个报错,竟然有人和我遇到了同样的错误。简直开心得不行不行的,但这并没有什么卵用,因为没有人解答。 当然后来我解决了这个问题,因为之前大部分caffe所依赖的库都是我手动编译的,很有可能问题出在这点上。但具体为什么会有这样的问题我也不太清楚,其中涉及到各个库的版本兼容问题,不行,头疼。望大神指点。
说了这么多废话,也该开始步入正题了。安装caffe可以分成两步走。
- 安装CPU only caffe
- 再安装GPU加速 caffe
这样方便我们在出现错误时能够快速定位问题,解决问题。
—
1. 安装CPU only caffe
在写这一小节前有必要,交代一下linux系统的基本信息。
$ lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.5 (Final)
Release: 6.5
Codename: Final
$ uname -r
2.6.32-431.el6.x86_64
安装caffe的大虾们,肯定已经阅读过
RHEL / Fedora / CentOS Installation章节。
1.1 基本库安装
- 基本开发工具
sudo yum -y groupinstall "Development Tools"
- 添加**EPEL repositories**
sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
然后就可以愉快的安装库了。
sudo yum install protobuf-devel leveldb-devel snappy-devel hdf5-devel
- 安装**boost-devel**
用rpm -qa boost
查看CentOS是否已有boost, 如果有会显示版本,我的自带版本是1.44.1, 版本太低,
$ wget -O boost_1_55_0.tar.bz2 http://downloads.sourceforge.net/project/boost/boost/1.55.0/boost_1_55_0.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fboost%2Ffiles%2Fboost%2F1.55.0%2F&ts=1385953406&use_mirror=softlayer-ams
$ tar jxvf boost_1_55_0.tar.bz2
$ cd boost_1_55_0
$ ./bootstrap.sh
$ ./b2
$ sudo ./b2 install
- 安装**opencv-devel**
$ sudo yum -y install cmake pkgconfig gtk2-devel python-devel numpy tbb-devel libpng-devel
$ wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.10/opencv-2.4.10.zip
$ unzip opencv-2.4.10.zip
$ cd opencv-2.4.10
$ mkdir build
$ cd build
$ cmake ../ -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_EXAMPLES=ON -DBUILD_NEW_PYTHON_SUPPORT=ON -DINSTALL_PYTHON_EXAMPLES=ON
$ make -j 2
$ sudo make install
1.2 os的依赖
上来就敲下面的命令sudo yum install gflags-devel glog-devel lmdb-devel
,发现glog-devel找不到。这个时候只能上Github上下一个glog.zip。
$ unzip glog-master.zip
$ cd glog-master
$ ./configure
$ make -j4
$ sudo make install
1.3 BLAS
sudo yum install atlas-devel
1.4 编译
$ cp Makefile.config.example Makefile.config
# Adjust Makefile.config (for example, if using Anaconda Python)
$ make all
$ make test
$ make runtest
- For cuDNN acceleration, you should uncomment the USE_CUDNN := 1 switch in Makefile.config.
- For CPU-only Caffe, uncomment CPU_ONLY := 1 in Makefile.config.
若无意外caffe.so应该就会诞生了。若make runtest
过程中,若出现关于**protobuf**相关的错误,应该卸载protobuf-devel,手动下载**protobuf**源码,手动编译。
$ wget -O protobuf.zip https://github.com/google/protobuf/archive/master.zip
$ unzip protobuf.zip
$ cd protobuf-master
$ ./autogen.sh
$ make && make check
$ sudo make install
——
2. 再安装GPU加速 caffe
这一阶段,我们又分成两步走。:( 受不了,真当我们是小白呀<-_->
2.1 安装Nvidia显卡驱动
- 首先得知道自己的显卡型号。
楼主是电脑显卡型号 GTX 970,怎么感觉不是土豪版。然后去Nvidia官网下载最新的驱动。趁着下载驱动的时候,我们来做一些羞羞的事情。$ lspci -nn | grep VGA
- 禁止默认显卡驱动
打开**/etc/modprobe.d/blacklist.conf**文件,添加**blacklist nouveau**禁止centos默认安装的显卡驱动。阻止kernel加载nouveau模块(非必要操作)修改**/boot/grub/grub.conf**,【#vim /boot/grub/grub.conf】,在kernel行的末尾加上 rdblacklist=nouveau
blacklist nouveau
- 安装 kernel-devel,**DKMS**与 kernel-headers
若你使用*yum*安装,就会发现安装的内核源码版本是*2.6.32-504.el6.x86_64*,什么鬼?若你不知不觉的往下做,毫无疑问,在编译内核时会给你一个大大的错。若聪明的你绕过了找不到源码的错无,成功编译出新内核,那只有恭喜你。因为,会在某个风和日丽的早上,你打开电脑发现自己的系统怎么成了**centos 6.6**了。什么?你能忍受。可是作为人送诚信小郎君的我,不能忍呀。解决方法如下:
上这个网站,找到*kernel-devel-2.6.32-431.29.2.el6.x86_64.rpm*与*kernel-devel-2.6.32-431.29.2.el6.x86_64.rpm*下载到本地。
$ sudo yum install kernel-devel-2.6.32-431.29.2.el6.x86_64.rpm kernel-devel-2.6.32-431.29.2.el6.x86_64.rpm
然后你就可以在**/usr/src/kernels/**下找到源码了。还需一步,安装**dkms**,让它帮助我们编译安装驱动模块。
$ yum install dkms
$ sudo cp -r /usr/src/kernels/2.6.32-431.29.2.el6.x86_64/ /usr/src/kernels/2.6.32-431.el6.x86_64/
- 重新建立**initramfs image**文件
$ mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
$ dracut /boot/initramfs-$(uname -r).img $(uname -r)
- 文本模式
修改**/etc/inittab**,使系统开机进入init 3文本模式:#vim /etc/inittab
将最后一行“id:**5**:initdefault:”修改成“id:**3**:initdefault:”(不包含引号)。等安装驱动文件下载完成之后
$ reboot
- 安装
启动后,会进入文本界面。然后*cd*进入驱动程序所在目录,开始安装
$ chmod +x NVIDIA-Linux-XXXX.run
$ ./NVIDIA-Linux-XXXX.run
在一番同意,确定之后,驱动就安装好了。修改**/etc/inittab**,改回图形界面。
$ reboot
安装成功,登陆后在系统- 首选项里可以看到NVIDIA X Server Settings菜单,可以查看基本信息及进行一些设置。
2.1 安装CUDA
- 首先下载完CUDA 6.5的RUN文件
$ chmod +x cuda_6.5_XXXX.run
$ ./cuda_6.5_XXXX.run
跳过第一项的驱动安装,后面要么yes要么默认就可以了。注意最后将
- /usr/local/cuda/bin加入**PATH**
- /usr/local/cuda/lib64加入**/etc/ld.so.conf**
- 安装
然后就是回安装caffe的流程上了。注释 CPU_ONLY := 1,再次编译。当做到这一步时,你的小脸上是否出现了笑容。