CentOS 7.x 安装Caffe GPU版本全过程
总阅读次
- 1. 安装一些通用的依赖:
- 2. 安装cmake
- 3. 安装glog, gflags, lmdb:
- 4. 安装atlas
- 5. 安装NCCL
- 6. 安装Caffe
- 7. HDF5没有装好,在/usr/include中无法找到,如果能找到但报错:
- 8. 重装HDF5
- 9. 第二个找不到的依赖:
- 10. 安装leveldb
- 11. 修复yum没有hdf5, leveldb等package的问题
- 12. atlas有问题,MKL挺麻烦,换openblas
- 13. 最后执行:
- 14. 运行make runtest那步出现一些so文件找不到的问题,比如:
- 15. 又提示没有libhdf5_hl.so.10这个文件
- 16. 不临时的方法修改LIBRARY_PATH
- 17. 重新编译
- 18. make runtest
- 19. 验证caffe是否正确安装,以MNIST为例
- 20. 运行成功,最终结果部分如下:
- 21. CIFAR10 例子
- 22. 编译pycaffe
- 23. Matlab安装及Caffe编译。
- 24. 总结
本文假设已经安装好了CUDA 8.0,NVIDIA GPU驱动以及cuDNN且读者主机可以连接互联网。
CUDA 8.0的安装也可见《CentOS 7 卸载CUDA 9.1 安装CUDA8.0》
建议先通读本文再决定安装步骤,直接按照本文一步一步来并不是最佳实践,因为本文踩过一些坑。
安装一些通用的依赖:
1 | sudo yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5-devel |
~~
我
是
空
行
~~
安装cmake
1 | wget https://cmake.org/files/v3.6/cmake-3.6.0.tar.gz |
安装glog, gflags, lmdb:
1 | # glog |
安装atlas
1 | yum install atlas-devel |
安装NCCL
1 | git clone https://github.com/NVIDIA/nccl.git |
安装Caffe
1 | wget https://github.com/BVLC/caffe/archive/1.0.tar.gz |
HDF5没有装好,在/usr/include
中无法找到,如果能找到但报错:
1 | src13:18: fatal error: hdf5.h: No such file or directory layers/hdf5_data_layer.cpp: |
那就修改一下Makefile.config
如下:1
2
3
4
5
6
7
8INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
--->
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/include/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/include/hdf5/lib/
(具体路径需要看系统)
重装HDF5
1 | wget https://support.hdfgroup.org/ftp/HDF5/current18/src/hdf5-1.8.20.tar.gz |
第二个找不到的依赖:
1 | ./include/caffe/util/db_leveldb.hpp:7:24: fatal error: leveldb/db.h: No such file or directory |
通过如下命令发现也没装上:1
2
3
4
5
6
7
8$ yum install leveldb-devel
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: centos.ustc.edu.cn
* extras: mirror.bit.edu.cn
* updates: centos.ustc.edu.cn
No package leveldb-devel available.
Error: Nothing to do
安装leveldb
1 | wget https://github.com/google/leveldb/archive/master.zip |
网上的流程是上面这么说的,但是make完之后居然没有libleveldb.so.1.18
这个东西。
修复yum没有hdf5, leveldb等package的问题
1 | yum install epel-release |
据说,leveldb 已经被 caffe 推荐不使用了,可以在 Makefile.config 中将 USE_LEVELDB := 0 注释掉,就不用安装了【1】。
atlas有问题,MKL挺麻烦,换openblas
1 | wget https://github.com/xianyi/OpenBLAS/archive/v0.2.20.tar.gz |
然后在Makefile.config
中改为BLAS := open
即可。
最后执行:
1 | make all -j4 |
运行make runtest
那步出现一些so文件找不到的问题,比如:
1 | .build_release/tools/caffe: error while loading shared libraries: libglog.so.0: cannot open shared object file: No such file or directory |
以及libcudart找不到等。
对于cuda相关的so文件找不到的问题,我们首先看环境变量是否添加了
安装CUDA必要添加环境变量的三行,如果有的话试试source一下。
对于glog, gflags等依赖so文件缺失的问题,首先要检查环境变量,因为前面我们自己make编译安装的这些以来,好像默认为安装到/usr/local/lib
中,如果这个路径不在环境变量中或者不在Makefild.config
中,就有可能找不到so文件。奇怪的是,我的Makefild.config
中有LIBRARY路径/usr/local/lib
,却还是会报这些so文件找不到,很奇怪。那就在环境变量中添加吧。
又提示没有libhdf5_hl.so.10
这个文件
直接yum再安装一下,发现还不行,原因是yum安装的是libhdf5_hl.so.10
,这个so在我们之前源码安装的时候是装在/usr/include/hdf5/lib
中的,所以加一条环境LIBRARY_PATH
到这个地址是比较简便的方法了。
不临时的方法修改LIBRARY_PATH
为了不总在环境变量里面加路径,可以有另外一个方法1
2
3
4
5进入/etc/ld.so.conf.d
新建一个conf文件:/etc/ld.so.conf.d/glog.conf,里面写:/usr/local/lib
再新建一个conf文件:/etc/ld.so.conf.d/hdf5.conf,里面写:/usr/local/hdf5-1.8.3/lib
最后执行:
/sbin/ldconfig -v
重新编译
1 | make clean |
make runtest
最终,make runtest
语句终于能走通了。1
2
3
4
5
6
7
8
9
10[----------] 2 tests from EuclideanLossLayerTest/3, where TypeParam = caffe::GPUDevice<double>
[ RUN ] EuclideanLossLayerTest/3.TestGradient
[ OK ] EuclideanLossLayerTest/3.TestGradient (23 ms)
[ RUN ] EuclideanLossLayerTest/3.TestForward
[ OK ] EuclideanLossLayerTest/3.TestForward (1 ms)
[----------] 2 tests from EuclideanLossLayerTest/3 (24 ms total)
[----------] Global test environment tear-down
[==========] 2101 tests from 277 test cases ran. (614680 ms total)
[ PASSED ] 2101 tests.
验证caffe是否正确安装,以MNIST为例
1 | sudo sh data/mnist/get_mnist.sh |
输出:1
2
3
4
5
6
7
8
9
10
11sh examples/mnist/create_mnist.sh
Creating lmdb...
I0316 00:08:16.962158 8318 db_lmdb.cpp:35] Opened lmdb examples/mnist/mnist_train_lmdb
I0316 00:08:16.963549 8318 convert_mnist_data.cpp:88] A total of 60000 items.
I0316 00:08:16.963567 8318 convert_mnist_data.cpp:89] Rows: 28 Cols: 28
I0316 00:08:20.275429 8318 convert_mnist_data.cpp:108] Processed 60000 files.
I0316 00:08:23.038358 8341 db_lmdb.cpp:35] Opened lmdb examples/mnist/mnist_test_lmdb
I0316 00:08:23.038920 8341 convert_mnist_data.cpp:88] A total of 10000 items.
I0316 00:08:23.038970 8341 convert_mnist_data.cpp:89] Rows: 28 Cols: 28
I0316 00:08:23.549976 8341 convert_mnist_data.cpp:108] Processed 10000 files.
Done.
【以下来自Caffe学习系列(9):运行caffe自带的两个简单例子】
转换成功后,会在 examples/mnist/
目录下,生成两个文件夹,分别是mnist_train_lmdb
和mnist_test_lmdb
,里面存放的data.mdb
和lock.mdb
,就是我们需要的运行数据。
接下来是修改配置文件,如果你有GPU且已经完全安装好,这一步可以省略,如果没有,则需要修改solver配置文件。
需要的配置文件有两个,一个是lenet_solver.prototxt
,另一个是train_lenet.prototxt
。
首先打开lenet_solver_prototxt
1 | $ sudo vi examples lenet_solver.prototxt |
根据需要,在max_iter
处设置最大迭代次数,以及决定最后一行solver_mode
,是否要改成CPU。
保存退出后,就可以运行这个例子了:
1 | $ sudo time sh examples/mnist/train_lenet.sh |
CPU运行时候大约13分钟,GPU运行时间大约4分钟,GPU+cudnn运行时候大约40秒,精度都为99%左右
【以上就是Caffe学习系列(9):运行caffe自带的两个简单例子】
运行成功,最终结果部分如下:
1 | ..... |
花费40s左右。精度99.06%,其实不高。
CIFAR10 例子
1 | sh data/cifar10/get_cifar10.sh |
到此,Caffe的安装告完结。
编译pycaffe
编译python的caffe接口需要安装boost依赖:1
2
3
4
5
6
7
8yum install boost-devel
或者
wget http://dl.bintray.com/boostorg/release/1.65.0/source/boost_1_65_0.tar.gz
tar -zxvf boost_1_65_0.tar.gz
cd boost_1_65_0/
./bootstrap.sh
./b2 cxxflags="-I /home/hadoop/anaconda3/include/python3.6m/" # python3如此编译
sudo ./b2 install --prefix=/usr cxxflags="-I /home/hadoop/anaconda3/include/python3.6m/" # python3如此安装
因为我们想在python中直接import caffe
,在环境变量中加上:1
export PYTHONPATH=$PYTHONPATH:/home/hadoop/caffe-1.0/python
后来发现编译pycaffe还需要安装protobuf依赖,原来anaconda装的不行。
安装protobuf,下载地址
1 | tar -zxvf protobuf-cpp-3.2.0.tar.gz |
Matlab安装及Caffe编译。
安装默认读者具有三个文件:1
2
3R2017a_glnxa64_dvd1.iso
R2017a_glnxa64_dvd2.iso
Matlab+2017a+Linux64+Crack目录,由rar解压而来
安装步骤:
1 | mkdir -p /data/matlab/install # 新建目录以供挂载 |
然后编译Matcaffe:1
2
3
4# make matcaffe -j16
MEX matlab/+caffe/private/caffe_.cpp
Building with 'g++'.
MEX completed successfully.
总结
所以总结一下,能够联网的CentOS服务器上安装Caffe的步骤如下(root用户):
yum install epel-release
yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5-devel
yum install gflags-devel glog-devel lmdb-devel
- NCCL安装
- OpenBLAS安装
- Caffe安装
- 进入
/etc/ld.so.conf.d
新建nccl.conf
,填写/usr/local/lib
,然后ldconfig -v
- make test, make runtest测试Caffe安装是否成功
涉及的命令本文以上部分都有。
感谢网上众多资料的作者提供经验,特列出参考文献如下聊表感激:
- Caffe. RHEL / Fedora / CentOS Installation
- 如何在 NVIDIA GPU 上下载并安装Caffe
- 呕心沥血一个月之caffe安装与配置
- Caffe学习系列(9):运行caffe自带的两个简单例子
- linux(CentOS)下的caffe编译安装简易手册
- 在Ubuntu 16.04下安装Matlab 2017a
- Ubuntu16.04配置caffe(with cuda8.0)
- Caffe - Ubuntu 安装及问题解决
- Elam的caffe笔记之配置篇(六):Centos6.5下编译caffe及caffe的python3.6接口
- Linux下的GPU版Caffe安装方法
等等。