目前网络上配置caffe环境的教程很多,部分教程确实写的不错,比如https://blog.youkuaiyun.com/yhaolpz/article/details/71375762。但我在caffe安装过程中依然遇到不少问题,记录于此,于人方便于己方便。我的软硬件环境是UBUNTU16.04 + 2 Xeon E5-2630v4 + 4 TITAN V。
1.在安装caffe时执行命令 sudo make runtest -j20,出现了如下错误–Check failed: status == CURAND_STATUS_SUCCESS (201 vs. 0) CURAND_STATUS_LAUNCH_FAILURE*** Check failure stack trace:
解决方法:输入命令sudo apt autoremove
,删掉之前安装的多余组件。
原因分析:这个问题是多个不同版本的NVIDIA组件混合导致的,重新部署软件环境时我安装过不同的CUDA版本,也使用过sudo apt-get install nvidia-cuda-toolkit
。随后我在某一项安装相关操作(具体忘了)中发现系统提示,可以删除无关内容,然后想到网上曾有句简短回答,大意是不同版本数据混合导致问题。除此外我未看到有能解决问题的回答。
2.安装caffe时,输入命令sudo make caffe -j20
时出现错误:
from src/caffe/util/cudnn.cpp:2:
/usr/local/cuda/include/cudnn.h:63:26: fatal error: driver_types.h: 没有那个文件或目录
#include "driver_types.h"
解决方法:进入/usr/include/cudnn.h文件下,将#include ”driver_types.h”改成#include<driver_types.h>再运行就可以了。
3.caffe安装完成后在python交互式命令行中输入import caffe
后报错如下:
from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, \ ImportError: No module named _caffe
解决方法:编译一下caffe的python接口即可——sudo make pycaffe
。
4.CUDNN的版本查看方法:
不同硬件环境的cudnn.h目录可能不同,需要先搜索文件具体位置。输入命令sudo find / -name *cudnn.h*
获得文件的具体路径后,cd至文件所在目录。使用命令cat cudnn | grep CUDNN_MAJOR -A 2
如下图所示。
如图所示,此时CUDNN的版本是7.0.1。
5.caffe的prototxt文件运行时python_layer出现错误,错误信息: ImportError: No module named xxx(xxx是prototxt中python层"python_param”参数中的module参数值):
在pycaffe安装完毕(即在python终端环境中import caffe正常)前提下,发现两个可能问题:
1).python文件位置摆放错误——prototxt文件中的python_param参数中module参数值仅能是不带参数的python文件名,因此需要将python文件放至caffe的PYTHONPATH环境变量目录下(路径可通过用户目录下的.bashrc文件查看)PS:python文件位置表示方法与其他文件不同,以solver.prototxt文件为例其中,描述神经网络时要带上的是相对caffe根目录的路径。
2).在程序运行过程中需要超级用户权限,而使用sudo后用户的环境变量无法继承(使用sudo python
后运行import caffe
出现错误)。需要修改部分系统文件,修改方法见我的另一篇博文——sudo保持环境变量方法(sudo python),链接:https://blog.youkuaiyun.com/u012614287/article/details/84580302。 修改完成后在终端中使用import caffe
命令,如正常则设置正确。
排除以上两个问题后,可在caffe根目录下使用命令 ./build/tools/caffe train -solver "你的solver路径" -其他参数
来正常运行python_layer。
6.在sudo python命令能正常运行后,报protoc版本不兼容错误:
Creating layer Data
[libprotobuf FATAL google/protobuf/stubs/common.cc:61] This program requires version 3.4.0 of the Protocol Buffer runtime library, but the installed version is 2.6.1. Please update your library. If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library. (Version verification failed in "google/protobuf/descriptor.pb.cc".)
主要错误信息是this program requires version x.x.x of the protocol buffer runtime library,不要按提示升级Protoc组件,将python的protobuf组件卸载后安装和该组件版本相同的组件即可(具体命令pip install protobuf==x.x.x
)。