hans

hans

【Caffe】手动安装CUDA, cuDNN, opencv 3, boost, glog, gflags, protobuf, nccl指南,以及各种问题的解决方法(CentOS 6.9)


更新多块 GPU 并行训练库 NCCL 安装流程

毕竟 8 块 K80 摆在那,只用一块太浪费了。

如果要多块并行训练需要安装 NVIDIA 的开源库 NCCAL

安装前先查看自己的 gcc 版本是否是 4.8 及以上。

低于 4.8 的会编译不通过。唉,我也是问了 NCCL 的开发者才解决了编译问题,当时我的 gcc 版本是 4.7。

wget https://github.com/NVIDIA/nccl/archive/master.zip
unzip master.zip
cd nccl-master/
make CUDA_HOME=/pat/to/CUDA/ test
make install

注意不要用 sudo,我也母鸡为什么,反正我用 sudo make 就是报错。

然后去修改 caffe 目录下 Makefile.config 文件,打开 NCCL = 1。

sudo make clean
make all -j40
make pycaffe -j40
make test -j40
make runtest -j40

不过我在 make runtest 的时候,会报一个错误:”HDF5-DIAG: Error detected in HDF5 (1.8.5-patch1)
thread 0:“,应该是多线程读取 hdf5 文件的问题。

上网找了一圈没有什么好的解决办法。我就不管他了,反正 runtest 就是检测用。

用 mnist 的例子测试一下

./build/tools/caffe train -gpu all --solver=examples/mnist/lenet_solver.prototxt

不能更爽~~~~~

以下是正文

服务器弄好了,又开始玩挖坑填坑的游戏了。

8 块 K80,有点吊。终于能摆脱我的 GT720 啦~~~

1. 安装 CUDA#

安装 CUDA 前 强烈建议 先卸载一切与 NVIDIA 有关的东西,包括旧驱动。反正是用 ssh 连的服务器,卸了没影响。

sudo yum remove nvidia*

我刚才就是因为驱动冲突导致不能打开 nvidia-smi,说是系统拒绝显卡什么的 blablabla.......

先去官网下载安装包 https://developer.nvidia.com/cuda-downloads

下载 local .rpm 安装包,cd 到目录运行

sudo rpm -i cuda-repo-rhel6-8-0-local-ga2-8.0.61-1.x86_64.rpm

sudo yum clean all

sudo yum install cuda

问题来了

Error: Package: 1:xorg-x11-drv-nvidia-libs-375.26-1.el6.x86_64 (cuda-8-0-local-ga2)
           Requires: libvdpau(x86-64) >= 0.5
Error: Package: 1:nvidia-kmod-375.26-2.el6.x86_64 (cuda-8-0-local-ga2)
           Requires: dkms
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

找不到两个库,

对于第一个库:

sudo vim /etc/yum.repos.d/linuxtech.testing.repo

添加内容:

[linuxtech-testing]
name=LinuxTECH Testing
baseurl=http://pkgrepo.linuxtech.net/el6/testing/
enabled=0
gpgcheck=1
gpgkey=http://pkgrepo.linuxtech.net/el6/release/RPM-GPG-KEY-LinuxTECH.NET

然后运行:

sudo yum --enablerepo=linuxtech-testing install libvdpau

对于第二个问题:

先让我吐曹一下尼吗个蛋蛋啊,为了安装这个库废了好大的劲儿啊!!!!

好了吐曹完毕。

先运行

uname -a

输出:
Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

查看你的内核架构,我的是 el6.x86_64

然后去下面的地址下载对应型号的 dkms 安装包,注意你的系统是 Fedora 的还是 red hat 的 CentOS。

http://rpmfind.net/linux/rpm2html/search.php?query=dkms

然后 cd 到下载目录

sudo rpm -i dkms-2.1.1.2-1.el6.rf.noarch.rpm

sudo yum clean all

sudo yum install dkms

两个坑爹库安装好后,就可以顺利安装 cuda 了

sudo yun install cuda

2. 安装 CUDNN#

跟在 Ubuntu 上步骤一模一样,请参 考:
http://blog.csdn.net/renhanchi/article/details/72571291

请改用 vim 修改文件。

3. 安装依赖库#

先安装 epel 扩展源

sudo yum install epel-release

** 安装各种库 : **

sudo yum install libatlas* cmake atlas-devel snappy-devel 
sudo yum install hdf5-devel leveldb-devel lmdb-devel

** 注意: ** protobuf 安装请看文章后面的教程。通过 yum 安装的 protobuf 版本太低,会导致编译不通过。

还要先安装 gflags,教程看后面。

最后安装 glog,教程看后面。

** 安装 boost: **

wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gz
tar -xvf boost_1_64__0.tar.gz
cd boost_1_59_0
./bootstrap.sh --prefix=/usr/local
./b2
sudo ./b2 install

** 然后安装所有 Qt 库: **
我不管我就是这么任性,吗的一直提示找不到 Qt4.x,我明明已经安装 qt4了啊!!!!索性全部安装就没问题了。

sudo yum install qt*

** 然后安装 opencv: **

wget https://github.com/opencv/opencv/archive/master.zip
unzip master.zip
cd opencv-master
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_GPHOTO2=OFF ..

要下载 ippicv_2017u2_lnx_intel64_20170418.tgz,等了一会。这期间我发现上面说找不到一堆东西。
宝宝心里不爽,宝宝是处女座的。然后就通过 yum 和加 * 大法,统统安装上!后来发现然并卵,再次 cmake 还是找不到那些鬼!掀桌子!ciao!

make -j16
sudo make install

如果 make 不通过,删除 release 目录下的 CMakeCache.txt,解决问题,重新编译。
心好累,太多坑了,写不过来了。
编译 gphoto2 不通过,好的,删除 Cache,重新 cmake,把 gphoto2 关掉!
趁着编译 opencv 的功夫,写了 CentOS 6.9 安装 Python 2.7 和 pip 的博客:
http://blog.csdn.net/renhanchi/article/details/73496317

make 为什么这么慢!!!!黑人what???

好了,我错了,我不应该脾气这么暴躁的,是我 make 的时候忘记加 - j16 了。

安装好,查看版本:

opencv_version

3.2 的

4. 安装 Caffe 和 Python 等依赖#

下载 caffe:

git clone https://github.com/BVLC/caffe.git




cd caffe/python




for req in $(cat requirements.txt); do sudo pip install $req; done

出问题参考: http://blog.csdn.net/renhanchi/article/details/72571291

这个也好慢啊,可以用国内的源安装。清华不错,跟官网同步的。

for req in $(cat requirements.txt); do sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple $req; done

完事配置 caffe 编译文件 Make.config,参考:
http://blog.csdn.net/renhanchi/article/details/72571291

make 编译出现错误

./include/caffe/solver_factory.hpp:67: error: ‘CHECK_EQ’ was not declared in this scope
make: *** [.build_release/src/caffe/solvers/sgd_solver.o] Error 1

我还是太年轻,我以为不 ** 安装 glog ** 没问题,结果总归是逃不掉的。
地址在这: https://github.com/google/glog
下载,解压

./autogen.sh && ./configure && make && make install

真是坑到怀疑人生

src/demangle_unittest.cc:46: error: ‘GFLAGS_NAMESPACE’ is not a namespace-name
src/demangle_unittest.cc:46: error: expected namespace-name before ‘;’ token

在 yum 里卸载 gflags,然后去 github 下载安装最新版本的 gflags

git clone https://github.com/gflags/gflags.git
cd gflags-master
mkdir build
cd build
cmake -D BUILD_gflags_LIBS=ON -D BUILD_gflags_nothreads_LIBS=ON -D GFLAGS_NAMESPACE=ON ..
make -j20
sudo make install

删掉 glog 文件夹,重新 unzip,安装。
gflags 官方安装说明坑死老爹我了。
搞了一下午,我灵光一闪,想到 cmake 的时候打开那三个开关试试。结果就通过了。
唉,说到底还是学艺不精。

回到 caffe 目录再次编译
继续出问题,呵呵哒,我已经预见到了。不出问题你就不是 caffe!!!!
找不到 cblas,那我就安装 openblas,安装教程看这里:
【Caffe】Caffe,CUDA,cuDNN 安装指南,以及各种问题的解决方法(Ubuntu14.04)

注意!因为 CentOS 坑爹,所以怎样 make 都不行,我从 Ubuntu 系统上把 make 好的 OpenBLAS 目录传给了服务器。

然后 sudo make install 通过,安装成功。

再回到 caffe 目录

一定要先清除前面编译的东西:

sudo make clean

然后 make -j16

通过。

然后 make test

通过

然后 make runtest

不通过。

提示 protobuf 出问题 ,原因是通过 yum 安装的 protobuf 版本太低。需要自己手动重新安装新版本的。

手动 ** 安装 protobuf **

wget https://github.com/google/protobuf/archive/master.zip
unzip master.zip
cd protobuf-master/




./autogen.sh





./configure




make -j20




make check




sudo make install




sudo vim /etc/ld.so.conf.d/libprotobuf.conf

添加内容:/usr/local/lib

sudo ldconfig

回到 caffe 目录,

sudo make clean
make -j20

出现一堆错误,一直往上翻,发现 ** 找不到 “caffe/prot/caffe.pd.h" **

cd .builr_release
cp -r src/caffe ./

注意以后每次 make clean 后,先 make 一次,报错了,然后再进行一次上面步骤。再 make

然后

make -j20
make test -j20
make runtest -j20

编译 pycaffe

make pycaffe

继续出问题

error: Python.h: No such file or directory

这是因为我们之前安装了 Python2.7,而在 /usr/include 中,还是老版本的 python2.6

新安装的 python2.7 的头文件都在 /usr/local/include/python2.7 中

所以备份一下 2.6 的头文件,然后替换成 2.7 的。

sudo cp -r /usr/include/python2.6 /usr/local/include/
sudo rm -rf /usr/include/python2.6
sudo cp -r /usr/local/include/python2.7 /usr/include/

继续编译 make pycaffe

又出问题

/usr/bin/ld: /usr/local/lib/libpython2.7.a(abstract.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when 
making a shared object; recompile with -fPIC
/usr/local/lib/libpython2.7.a: could not read symbols: Bad value

在网上看到三个版本的原因导致这个问题,

第一个版本说让我们 compile 的时候加上 -fPIC, 这个在错误原因里也写了。

搜了半天也没搞懂哪里加 -fPIC,没解决问题。

第二个版本说因为我们的 python2.7 是手动安装的,所以存在多次安装库的操作,文件较为混乱,找不到正确的库。

locate libpython2.7*

找到 libpython2.7.a 的位置,有两个,分别改名字,不行。
又找到 libpython2.6.a 的位置,改名字。也不行。

第三个版本说 fpic 问题是 python 使用了.a 静态库,改成.so 动态库即可。
将上面的 libpython2.7.a 改成.so,不行。

还是第三个版本的说法,不过这次通过源头来改这个库。就是。。。。。

. 重新安装 Python2.7

wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz  
tar -zxvf Python-2.7.13.tar.xz  
cd Python-2.7.13  
./configure --prefix=/usr/local --enable-shared
make -j20
sudo make install

完事回到 caffe 目录,make pycaffe。通过 @!!!!!!!

重新安装 Python 后,如果打不开 Python 了,提示找不到 libpython2.7.so.1.0 。这样操作:

sudo vim /etc/ld.so.conf.d/libpython2.7.conf
添加:
/usr/local/lib
完事运行:
sudo ldconfig

后记#

这次真是有史以来最累的一次填坑运动。有很多话在心里,心累,不想说。因为还有坑没弄好。darknet 编译 opencv 不通过。我去搞 opencv 了。

opencv 找不到

Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found

解决办法是:

sudo vim /etc/profile
添加:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

保存退出
source /etc/profile
Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.