天天看点

error: too few arguments to function ‘cudnnStatus_t cudnnSetConvolution2dDescriptor(cudnnConvo问题解决

在编译caffe时,如果你要使用cudnn,那么需要在caffe的Makefile.config文件中将CUDNN=1这一行取消注释,然后进行编译。

但是我在编译用于训练openpose模型的caffe时,遇到了如下错误:

In file included from ./include/caffe/util/device_alternate.hpp:40:0,

                 from ./include/caffe/common.hpp:19,

                 from src/caffe/syncedmem.cpp:1:

./include/caffe/util/cudnn.hpp: In function ‘void caffe::cudnn::setConvolutionDesc(cudnnConvolutionStruct**, cudnnTensorDescriptor_t, cudnnFilterDescriptor_t, int, int, int, int)’:

./include/caffe/util/cudnn.hpp:112:3: error: too few arguments to function ‘cudnnStatus_t cudnnSetConvolution2dDescriptor(cudnnConvolutionDescriptor_t, int, int, int, int, int, int, cudnnConvolutionMode_t, cudnnDataType_t)’

   CUDNN_CHECK(cudnnSetConvolution2dDescriptor(*conv,

   ^

In file included from ./include/caffe/util/cudnn.hpp:5:0,

                 from ./include/caffe/util/device_alternate.hpp:40,

                 from ./include/caffe/common.hpp:19,

                 from src/caffe/syncedmem.cpp:1:

/usr/local/cuda/include/cudnn.h:537:27: note: declared here

 cudnnStatus_t CUDNNWINAPI cudnnSetConvolution2dDescriptor( cudnnConvolutionDescriptor_t convDesc,

                           ^

Makefile:579: recipe for target '.build_release/src/caffe/syncedmem.o' failed

make: *** [.build_release/src/caffe/syncedmem.o] Error 1

make: *** Waiting for unfinished jobs....

在保证你的cudnn以及cuda安装正常并且编译官方的caffe能够通过的情况下,则是这个训练openpose的caffe中的源码问题。

解决方法:

将之前编译通过的caffe中的源码中的一个cudnn.hpp文件拷贝到出问题的caffe的相应位置,重新编译就能解决。

例如:

出现上述问题的caffe的目录为~/caffe-pose-train,你之前编译通过的caffe的目录为~/caffe。则执行命令:

cp ~/caffe/include/caffe/util/cudnn.hpp ~/caffe-pose-train/include/caffe/util/

然后在caffe-pose-train目录下:

make all -j4 即可编译通过。

原因:我猜测是因为训练openpose用的这个caffe是在老版本的基础之上进行修改得到的,因此支持的cudnn也是老版本,因此当你的系统的cudnn版本>6就会产生上述问题,而你下载的官方的caffe会随着cudnn的版本更新而更新上述cudnn.hpp文件,以及其他相关的源码,因此在编译官方的caffe时不会出现此问题。而我的系统中的cudnn版本时8.0,产生上述错误。

继续阅读