再一次源码编译caffe2的血泪史

写在一切之前,放弃源码编译caffe2还来得及

或许你不能理解我为啥要再一次从源码编译caffe2,因为我已经从源码编译了n次caffe2也没有成功,所以是再一次…但是,有一些小坑还是解决掉了(虽然写这篇博客的时候我还没有成功编译)。毕竟,梦想还是要有的,要不然和一条咸鱼有什么区别。(不过是一条有梦想的咸鱼罢了)
再一次友情提示,不要源码编译caffe2!不要源码编译caffe2!不要源码编译caffe2!
珍爱生命,远离源码编译caffe2~下面就是我的血泪史,emmmmmm~
先放上我的电脑配置,是GPU的~配置不同的话大家尽量参考吧~

电脑 微星GS65 GTX1070
系统 Ubuntu 16.04 (14.04和16.04有些安装步骤不同)
CUDA 8.0 Cudnn 6.0
Anaconda 2 Python 2.7

源码编译caffe2

在我的电脑配置的基础上我就开始大胆的装caffe2了,不要怕,就是刚,反正一次也装不成功。要是你一次能装成功那你就是caffe2的锦鲤无疑了。大家可以去看caffe2的官网去看安装教程和环境要求,感觉官网才是王道,附上地址。友情提示:一定要选自己电脑的配置!

# 复制caffe2(caffe2和pytorch合并了...嘻嘻嘻~)
git clone --recursive https://github.com/pytorch/pytorch.git && cd pytorch 

git submodule update --init 
mkdir build && cd build

# 安装caffe2
cmake .. -DUSE_NCCL=OFF
sudo make install -j4

# 添加PYTHON环境变量
vim ~/.bashrc
export PYTHONPATH=/home/kaka/pytorch/build${PYTHONPATH:+:${PYTHONPATH}}

安装caffe2成功以后需要验证一下~输出success即为成功!

python2 -c 'from caffe2.python import core' 2>/dev/null && echo "Success" || echo "Failure"

不放弃源码编译caffe2的结果是…

问题1 :各种各样的错误

在我不断的debug的血泪史中,我发现很多源码编译的错误都是因为装得包不符合环境配置,或者有些包没有装,所以把一些我有重新单独装的包列在下面,这些包一定要装!!!
这里大部分是caffe2的官网给的要装的包,一定要装!!! 如果有些包一次没装成功那就多试几次~里面还有一些是在我的血泪史里不断debug发现要装的包~最好之前就装上~要不然会很痛苦~
里面有一些比较难装的包,给大家都做了教程——你不会知道Ubuntu那些难装的包有多难装,如果有些奇葩的实在是装不上的包,请大家重启重装多喝热水,不要放弃自己

sudo apt-get update
sudo apt-get install -y --no-install-recommends \
      build-essential \
      git \
      cmake \
      libgoogle-glog-dev \
      libgtest-dev \
      libiomp-dev \
      libleveldb-dev \
      liblmdb-dev \
      libopencv-dev \
      libopenmpi-dev \
      libsnappy-dev \
      libprotobuf-dev \
      openmpi-bin \
      openmpi-doc \
      protobuf-compiler \
      python-dev \
      python-pip                          
sudo pip install --user \
      future \
      numpy \
      protobuf \
      typing \
      hypothesis
sudo l_mkl_2019.1.144/install_GUI.sh    # 安装mkl

此外,如下这行代码很重要 (虽然我也不知道为什么,16.04和14.04不一样哦~)

# for Ubuntu 14.04
sudo apt-get install -y --no-install-recommends \
      libgflags2 \
      cmake3
# for Ubuntu 16.04
sudo apt-get install -y --no-install-recommends \
      libgflags-dev \
      cmake

说明:
1.protobuf&protoc ——当系统的libprotoc低版本时,如2.5版本的就会冲突和python中的protoc库,从而导致无法顺利安装
2.cmake ——cmake的版本最好是3.5.1才可以,记得更新
3.gcc和g++ ——gcc和g++用4.9版本的比较容易成功

问题2:E: 无法定位软件包 build-essential

kaka@kaka-GS65-Stealth-Thin-8RF:~$ sudo apt-get install -y --no-install-recommends \ build-essential \ cmake \ git \ libgoogle-glog-dev \ libprotobuf-dev \ protobuf-compiler \ python-dev \ python-pip 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
E: 无法定位软件包  build-essential
E: 无法定位软件包  cmake
E: 无法定位软件包  git
E: 无法定位软件包  libgoogle-glog-dev
E: 无法定位软件包  libprotobuf-dev
E: 无法定位软件包  protobuf-compiler
E: 无法定位软件包  python-dev
E: 无法定位软件包  python-pip

原因(个人理解): 可能是在一些软件包依赖于一些其他的软件旧的包,如果不更新这些依赖包,我们想装得软件包就没有办法安装。
解决办法: 最保险的办法就是要更新sudo apt-get update!!!此外,用sudo apt-get install一个一个的装,问题就不会报错了。博客上还有其他两种方式来解决这个问题,大家也可以参考一下~ Ubuntu解决包依赖关系 ~ 解决apt-get install E: 无法定位软件包问题 ~

问题3:NCCV warning

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).
nvlink fatal   : Internal error: reference to deleted section
Makefile:83: recipe for target '/home/kaka/pytorch/build/nccl/obj/collectives/device/devlink.o' failed
make[5]: *** [/home/kaka/pytorch/build/nccl/obj/collectives/device/devlink.o] Error 1
Makefile:45: recipe for target 'devicelib' failed
make[4]: *** [devicelib] Error 2
Makefile:25: recipe for target 'src.build' failed
make[3]: *** [src.build] Error 2
CMakeFiles/nccl_external.dir/build.make:110: recipe for target 'nccl_external-prefix/src/nccl_external-stamp/nccl_external-build' failed
make[2]: *** [nccl_external-prefix/src/nccl_external-stamp/nccl_external-build] Error 2
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/nccl_external.dir/all' failed
make[1]: *** [CMakeFiles/nccl_external.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2

原因: 是在 third_party/nccl的问题
解决办法:cmake ..的时候禁用nccl,即:cmake .. -DUSE_NCCL=OFF

扫描二维码关注公众号,回复: 5230992 查看本文章

问题4:简称Makefile:127:

CMakeFiles/Makefile2:264: recipe for target 'src/ATen/test/CMakeFiles/scalar_test.dir/all' failed 
make[1]: *** [src/ATen/test/CMakeFiles/scalar_test.dir/all] Error 2 
Makefile:127: recipe for target 'all' failed 
make: *** [all] Error 2

原因: 网上的解释大多都是gcc和g++版本的问题,我不太懂原理,但是亲测有效,gcc和g++的版本强烈安利要装4.9版本,不要装其他的(默认是5.4),因为很有可能报一堆乱七八糟的错。
解决办法: 更新或者降低gcc和g++的版本。

sudo apt install gcc-4.9 g++-4.9
export CC="gcc-4.9"
export CXX="g++-4.9"

问题5:简称No rule to make target … needed … Stop.

make[2]: *** No rule to make target '/usr/local/cuda/lib64/libcudnn.so', needed by 'lib/libcaffe2_gpu.so'。 停止。
CMakeFiles/Makefile2:1747: recipe for target 'caffe2/CMakeFiles/caffe2_gpu.dir/all' failed
make[1]: *** [caffe2/CMakeFiles/caffe2_gpu.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2

解决办法: 删除旧的,然后重新定向。
有一篇博客写的很详细,可以参考大佬们的经验。博客地址——No rule to make target ‘usr/lib/x86_64-linux-gnu/libcuda.so’ Linux下安装OpenCV时 make编译出现的Bug
ps:这个问题我跟据几个博主的方法试了一下并没有效果,但是有人成功了,不知道什么问题,所以我就愉(暴)快(躁)的重装了。个人猜测应该是opencv的问题(个人建议:一定要在装caffe2前装opencv)。

问题6:protobuf的错误

collect2: error: ld returned 1 exit status 
make[2]: *** [bin/blob_test] Error 1
make[1]: *** [caffe2/CMakeFiles/blob_test.dir/all] Error 2 
Linking CXX shared module python/caffe2_pybind11_state.so 
[ 92%] Built target caffe2_pybind11_state 
make: *** [all] Error 2

原因: protobuf的版本问题,Ubuntu16.04自带的protobuf是2.6.1版本的,需要更新为>3.4.1版本的。
解决办法: 安装protobuf 3.4.1——安装教程
ps:这个问题我没有碰到过,但是看博客过程中感觉很多人碰到,所以也一并贴上来给大家看一下~
有一个安装protobuf的非常详细的教程,是一个大佬写的,大家可以参考——Ubuntu 16.04 安装 protobuf 以及测试/使用

问题7:Install configuration: “Release”

-- Install configuration: "Release"
CMake Error at cmake_install.cmake:36 (file):
  file cannot create directory: /usr/local/share/cmake/Caffe2.  Maybe need
  administrative privileges.
  
Makefile:71: recipe for target 'install' failed
make: *** [install] Error 1

原因: 没有加sudo,是只读的。
解决办法: make命令要加上sudo,即改为:sudo python setup.py install

问题8:caffe2的测试错误

tensor@tensor-GS65-Stealth-Thin-8RF:~/pytorch$ python caffe2/python/operator_test/activation_ops_test.py
/home/tensor/.local/lib/python2.7/site-packages/hypothesis/_settings.py:197: HypothesisDeprecationWarning: 
The min_satisfying_examples setting has been deprecated and disabled, due to
overlap with the filter_too_much healthcheck and poor interaction with the
max_examples setting.
note_deprecation(d.deprecation_message, self)

原因: caffe2的测试使用了activation_ops_test.py文件来测试的,可以理解为用激活函数测试的,其实这个报错是正常的,是因为cudnn没有在激活函数上加速,大家可以用caffe2/python/operator-test文件夹下的任意一个后缀为_ops_test.py的文件再测试一遍,能输出ok就说明安装caffe2成功了。
解决办法: 用caffe2/python/operator-test文件夹下的任意一个后缀为_ops_test.py的文件再测试一遍。

在这里,再一次感谢实验室的小伙伴们在我不断重装caffe2的时候给我的支持,还要非常感谢百度、谷歌、github、csdn、简书等网站上分享自己caffe2源码编译心路历程的各位大佬们,尤其是这篇文章中引用了文章和链接的大佬们,真心感谢各位大佬们!!!给大佬们比个小心心!!!
文章最后的最后,还是对大家说,如果不是必要的必须需要caffe2源码编译的话,不要轻易尝试caffe2的源码编译,因为这个过程很痛苦,真的很痛苦。不过如果能成功编译caffe2话心情还是很up的(虽然n天持续心情很down)。caffe2的源码编译就到这里啦,大家也可以回看我们ubuntu16.04+cuda9+cudnn7+Anaconda2+caffe2的安装教程和我们源码编译caffe2+densepose的安装教程。再次谢谢大家的支持和大佬们的分享!

猜你喜欢

转载自blog.csdn.net/weixin_43624538/article/details/84712617