本文根据我编译时出现的一些错误,参考了swfa1的csdn博客《caffe编译中的python问题》http://www.th7.cn/Program/Python/201609/967571.shtml 和ThinkingMan新浪博客《Ubuntu14.04编译caffe问题记录》http://blog.sina.com.cn/s/blog_721a75e50102wfig.html,做的一些记录,以便以后备用。
系统环境做一下说明:
ubuntu14.04LTS,CUDA 8.0, cudnn 5.0, caffe :官方发布的caffe
(后来实验配置环境多了,发现问题大同小异,上述系统版本号是我第一次配置时的系统信息,不一定必须遵循,只要你的Ubuntu 和cuda,cudnn 版本号对应就行,这个对应关系网上可以查到,在此就不复制了)。
错误1:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libopencv_highgui.so: undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0'
collect2: error: ld returned 1 exit status
make: *** [.build_release/tools/convert_imageset.bin] Error 1
错误描述:如上图显示,未定义的引用“TIFFReadRGBAStrip@LIBTIFF_4.0”,说明是libtiff库未指明,
解决办法:执行下面命令操作查找对应库路径,并添加
$ldconfig -p|grep libtiff #这个指令是查找库索引
下图是我查找到的链接关系
$ export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu/ #这个指令是将路径添加至配置文件中
然后再编译make all,就可以继续进行下面测试了。
$make clean # 清理上次编译错误记录
$make all -j8
问题2:
/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or directory # include^
compilation terminated.
make: *** [.build_release/src/caffe/layer_factory.o] Error 1
make: *** Waiting for unfinished jobs....
错误描述:这个是因为cplus文件索引路径错误问题,我安装caffe是用的是anaconda2,一些路径出了问题,将python对应路径添加进去就好
解决办法:如下
$export CPLUS_INCLUDE_PATH=/usr/include/python2.7
然后再编译make all,就可以继续进行下面测试了。
$make clean# 清理上次编译错误记录
$make all -j8
2017/10更新:
问题描述:前一段时间服务器又歇菜了,项目组的同学重装系统后,发现正常步骤安装caffe后,老是找不到pyconfig.h文件,也就是上面这个问题。可是检查的时候路径,环境变量什么都没问题。后来又把caffe卸了重装好几次,还是这个问题。今早又重新装载的时候,git clone 时,报下面这个错:
以前一直以为是权限问题,没想太多,直接指令前面加sudo执行了。后来查了一下这个问题,在这篇博客(http://blog.csdn.net/superior_yong/article/details/62041526)中提到了这个问题,并给出了解决方案。如下图。
问题分析:好吧,那我查看一下我的根目录下的.config文件夹,发现我的这个文件加的所有者是root。可能是这个原因,跨权限调用文件的原因,造成后面的一系列编译错误吧。
解决办法:
参照这篇博客(http://www.linuxidc.com/Linux/2015-03/114695.htm),我把文件夹所有者改了回来,编译发现没有错了,都通过了。
3.错误
ImportError: No module named Cython.Distutils
解决办法:
安装Cython
$sudo apt-get install cython
4错误
make pycaffe后,还有一些库找不到,我自己测试,这个问题也适用于基于CAFFE 平台的的其他神经网络,例如py-faster-rcnn和py-R-FCN等。
(参考这篇博客http://www.cnblogs.com/venus024/p/5664103.html)
解决办法:
$cd caffe/python
$for req in $(cat requirements.txt); do pip install $req; done
caffe/python/requirements.txt这个文件记录caffe的Python接口所需要的所有函数库,执行上面语句便可依次检查是否所需模块都安装,有的话自动跳过或升级,没有的话自动安装。
5错误
由于服务器桌面系统经常崩盘,找售后他们又重装了系统,所以所有的环境得重新配置。执行make all 时,发现了下面的错误。经排查发现是cudnn安装配置错误。
查到,博客http://blog.csdn.net/u011070171/article/details/52292680,给的解释说,这是因为当前版本的caffe的cudnn实现与系统所安装的cudnn的版本不一致引起的。上官网查了了一下caffe对cuda相关要求,显示如下:
以上判断是caffe版本过旧,cudnn版本太新。下面就对症下药:
解决办法1:(博客中给的办法)
1.将./include/caffe/util/cudnn.hpp 换成最新版的caffe里的cudnn的实现,即相应的cudnn.hpp.
2. 将./include/caffe/layers里的,所有以cudnn开头的文件,例如cudnn_conv_layer.hpp。 都替换成最新版的caffe里的相应的同名文件。
3.将./src/caffe/layer里的,所有以cudnn开头的文件,例如cudnn_lrn_layer.cu,cudnn_pooling_layer.cpp,cudnn_sigmoid_layer.cu。
都替换成最新版的caffe里的相应的同名文件。
rbgirshick的py-faster-rcnn实现,因为其cudnn实现为旧版本的实现,所有出现了以上问题.
解决办法2:(降低cudnn版本)
将之前安装的/usr/local/cuda-8.0/l路径下的cudnn的文件删除,按照网上教程重新安装v5.0版,文件关联一下,就好
解决办法3:(更换新版本的caffe)
去github上下载新版的caffe,把caffe重新按照官方教程安装配置一遍。
6错误
运行make runtest,一直报错
Checkfailed:status== CUDNN_STATUS_SUCCESS (3vs.0) CUDNN_STATUS_BAD_PARAM
错误描述:按照http://www.cnblogs.com/penguinliong/p/6351215.html这篇博客说是GPU被占用,可是我运行$nvidia-smi查看显示,说没有进程调用GPU,经排查还是cudnn的安装问题,因为服务器是多人在使用,被别人装了两个版本的cudnn。
解决办法:删掉一个cudnn,重新安装配置连接,然后再编译make all,就可以继续进行下面测试了。
$make clean# 清理上次编译错误记录
$make all -j8
7错误
今天在给师姐装caffe时,遇到了Python接口无法调用的问题,具体问题描述如下:
按照正常安装步骤,执行$make all,$make test , $make runtest ,$make pycaffe都正常。但是$Python打开Python编译器后,执行import caffe调用caffe的Python接口是出现错误:No module named _caffe,网上查找大部分解释说是 make pycaffe 编译出错,没有正确生成Python脚本文件。
解决办法:
$make clean# 清理上次编译错误记录
用sudo 超级用户权限重新执行上面make all ,make pycaffe指令。
需要注意的是,如果错误是 no module named caffe ,可能是你的caffe路径配置错误,执行下面命令,将caffe/python/环境变量路径添加.bashrc文件中。
$sudo vim ~/.bashrc #打开.bashrc文件
在文件最后添加下面指令
export PYTHONPATH=/home/(你的用户名)/caffe(你的caffe安装目录)/python:$PYTHONPATH#这里也可以使用~/caffe/pyhon相对路径
关闭文件, 输入下面指令,是环境变量生效,
$source ~/.bashrc
然后,在Python编译器中import caffe,测试应该可以正常调用caffe。
8错误
还是上面的接口问题,按照错误7解决no module问题后,再次测试出现新的错误如下:
错误描述:如上图最后一行所示,显示运行时错误,网上找问题说是numpy错误。
解决办法:更新numpy模块,执行下面语句更新。
$sudo pip install numpy --upgrade
9错误
环境配置好后,做手写体网络测试,执行 (在caffe安装目录下)
$sudo examples/mnist/train_lenet.sh
出现如下错误
问题描述:出现这种错误是由于训练数据没有准备好。
解决办法:(以下命令都在caffe安装目录下执行)
$.data/mnist/get_mnist.sh#准备数据
$.examples/mnist/create_mnist.sh#生成caffe指定数lmdb据格式
$.examples/mnist/train_lenet.sh#训练模型
更复杂的情况看https://github.com/BVLC/caffe/issues/2709
其他问题以后发现继续补充。
2017/10更新:
10错误:/usr/include/boost/property_tree/detail/json_parser_read.hpp:257:264: error: ‘type name’ declared as function returning an array
问题描述:执行ssd环境配置时出现上述错误。
根据这篇博客http://blog.csdn.net/u010733679/article/details/52125597上说是gcc版本过低
问题解决:按照上述博客所说升级一下gcc。
11错误:执行create_data.sh时报错,如下图。
问题分析:上网查找说是numpy数据包版本过低。
问题解决:执行命令$sudo pip install -U numpy升级一下numpy数据包
12错误:继问题11numpy版本错误问题后,执行create_data.sh 报如下错误:
问题分析:综上问题描述,还是python库没安装全
问题解决:按照问题4解决办法执行一次,解决问题。
13错误:
fatal error:gflags/gflags.h:No such file or directory
如下图所示。
解决办法:
参考网上教程https://blog.csdn.net/artprog/article/details/79271388,输入下面指令:
sudo apt-get install libgflags-dev
14错误:
fatal error:glog/logging.h:No such file or directory
如下图所示。
解决办法:
参考网上教程https://blog.csdn.net/artprog/article/details/79271388,输入下面指令:
sudo apt-get install libgoogle-glog-dev
15错误:
fatal error: cblas.h: No such file or directory
如下如所示。
解决方法:
sudo apt-get install libblas-dev
16错误:
fatal error: hdf5.h: No such file or directory
解决方法:
修改Makefile.config文件,定位到INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include,在后面加上/usr/include/hdf5/serial:
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib后面加上 /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
INCLUDE_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/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
17错误:
/usr/bin/ld: cannot find -lcblas
/usr/bin/ld: cannot find -latlas
collect2: error: ld returned 1 exit status
解决方法:
sudo apt-get install libopenblas-dev
18错误:
fatal error: lmdb.h: No such file or directory
解决办法:
sudo apt-get install liblmdb-dev
19错误:
nccl.h: No such file or directory
错误原因:
因为需要多GPU支持训练,在多个 GPU 上运行 Caffe 需要使用 NVIDIA NCCL。
解决办法:
参照CUDA官网的教程https://www.nvidia.cn/object/caffe-installation-cn.html
$ git clone https://github.com/NVIDIA/nccl.git
$ cd nccl
$ sudo make install -j4
NCCL 库和文件头将安装在 /usr/local/lib 和 /usr/local/include 中
2019/1/8
因为一些原因,新来的笔记本重新安装了caffe,这次出现了新的问题。
20错误:
编译$make pycaffe生成python的caffe接口时,报错找不到python.h文件。
错误原因:
因为编译make 之前,Makefile.config文件中python 路径指定错误。
解决办法:
1.执行命令$whereis python, 可以查看python的绝对路径,然后修改Makeifle.config中的PYTHON_INCLUDE的文件路径。
2.执行$make -j8,重新编译caffe.
3.执行$make pycaffe,生成caffe的python接口即可。
2019/1/25
这次出现的错误是:google/protobuf/arena.h找不到
21错误:
.build_release/src/caffe/proto/caffe.pb.h:22:35: fatal error: google/protobuf/arena.h: 没有那个文件或目录
错误分析:
参考博客:https://blog.csdn.net/qq_33144323/article/details/81259985,可知是protobuf版本冲突问题。caffe能正确使用的是protobuf-2.6.1版本。
我装了ananconda3,其自带的protobuf版本要高于caffe的需求版本,而ubuntu自带的protobuf版本符合。
解决办法:
依据上面博客,既可以强制更改protobuf降版本,也可以暂时关闭ananconda环境,安装。
我的ananconda安装的是我的当前路径,没有装到系统环境中,我采用了偷懒的办法,使用sudo权限,跳到ubuntu系统环境下编译,其实相当于屏蔽anaconda环境编译,这样可以在最大保证不改变其他环境配置的前提下能够编译通过,不过这样付出的代价的是后面的pycaffe接口和matcaffe接口,同样需要执行sudo权限编译。
2019/12/12
22错误
/usr/bin/ld: cannot find -lcblas
/usr/bin/ld: cannot find -latlas
collect2: error: ld returned 1 exit status
错误分析
这次出现的错误是第错误17,但是按照错误17的解决方法,仍不能解决问题,查看caffe安装教程(网址为:http://caffe.berkeleyvision.org/installation.html)发现需要更改 Makefile.config中变量设置。如图所示。
解决办法:
在错误17的解决方法的基础上,修改Makefile.config中变量设置,将BLAS值设置为open。