环境 : Centos 7 + cuda-8.0 + cudnn-v6.0 + python2.7 + caffe2
该方法适应于权限有限的用户(无sudo
权限)(不能在/usr/local生成protobuf等自编译文件
)
以及处于公司内网不能访问外网情况
对于处于内网环境来说,一定要在外网把第三方库都下完全了,
git clone --recursive https://github.com/caffe2/caffe2.git
cd ROOT_CAFFE2 mkdir build && cd build cmake .. make -j8 install
当需要指定安装目录时,可以将 make -j8 install
改为 export DESTDIR="$HOME" && make -j8 install
, 然后配置环境
export PATH="/home/XX/usr/local/caffe2:$PATH" export PYTHONPATH=/home/XX/usr/local:$PYTHONPATH export PYTHONPATH=$PYTHONPATH:/home/XX/caffe2/build export LD_LIBRARY_PATH=/home/XX/usr/local/lib:$LD_LIBRARY_PATH
python -c'from caffe2.python import core'2>/dev/null && echo"Success" || echo"Failure"
2 protobuf
protobuf版本不对会带来各种问题,比如
.build_release/lib/libcaffe.so: undefined reference to google ::protobuf…
此时你的protobuf库与链接库已经混乱了
*pb.h:9:42:fatal error:google/protobuf/stubs/common.h:No such file or directory
看看这个你应该知道,找不到头文件,没有链接上去:
来自stackoverflow.解决方案: g++ -I/path/to/protobuf/include -c my-source.cc
./configure CXXFLAGS=-I/path/to/protobuf/include
sudo apt-get install libprotobuf-dev protobuf-compiler
亲测有效解决方案:在.bashrc添加protobuf为c,c++链接库
export OBJC_INCLUDE_PATH=$PROTOBUF_CAFFE
export C_INCLUDE_PATH=$PROTOBUF_CAFFE
export CPLUS_INCLUDE_PATH=$PROTOBUF_CAFFE
其中,PROTOBUF_CAFFE=ROOT_CAFFE2/third_party/protobuf/src
,为下载的第三方库中protobuf源码
“cannot import name descriptor_pb2”
TypeError: __init__() got an unexpected keyword argument 'file'
解决方案:将anaconda下的google下的protobuf更新即可
终极解决方案: 将各种冲突protobuf源屏蔽,比如Anoconda以及tensorflow中等,在编译安装过程最好通过直接更改.bashrc文件关掉其它版本的protobuf,安装完成后再重新打开个各版本protobuf即可
因caffe2在cmake时会寻找/usr/local/
下面的库,故若无权限在/usr/local/
时便会出现一些问题,其中有关protobuf出现问题最多 USE_NCCL
USE_LITE_PROTO
BUILD_CUSTOM_PROTOBUF
这几个开关根据情况而定,如若cmake出错,将相应的开关关闭即可,例如将1.2中的cmake ..
更改为 cmake -DUSE_NCCL=OFF -DUSE_LITE_PROTO=ON -DBUILD_CUSTOM_PROTOBUF=ON ..
4.1 - ImportError: No module named past.builtins
缺少future模块
解决方案:sudo pip install future
对于内网来说,先从外网下载好相应的python future
安装包,再在内网安装即可
4.2RuntimeError: module compiled against API version 0xa but this version of numpy is 0x9
numpy版本不匹配
可以找到相应的numpy版本替换,可参考方案来更新,博主直接重新更新了Anaconda为最新版本解决了问题
caffe2::CUDAContext::~CUDAContext()': reshape_op_gpu_test.cc:(.text._ZN6caffe211CUDAContextD2Ev[_ZN6caffe211CUDAContextD5Ev]+0x420): undefined reference toTLS init function for caffe2::CUDAContext::cuda_objects_'
libCaffe2_GPU.so: undefined reference to `TLS init function for caffe2::CuDNNWrapper::tls_cudnn_handles_'
collect2: error: ld returned 1 exit status
make[3]: *** [caffe2/binaries/reshape_op_gpu_test] Error 1
解决方案:gcc,g++版本要大于等于4.85
References:
1.https://www.cnblogs.com/fanninnypeom/p/5982719.html
2.https://blog.csdn.net/zziahgf/article/details/72461175
3.http://www.cnblogs.com/yiruparadise/p/5671771.html
4.https://segmentfault.com/a/1190000014500134?utm_source=index-hottest
6.https://blog.csdn.net/zhw864680355/article/details/79602453
7.https://github.com/caffe2/caffe2/issues/1297