Cudnn Error in configure: 7 (CUDNN_STATUS_MAPPING_ERROR)
错误原因是cudnn没有正确链接
/home/xxx/Downloads/libtorch/share/cmake/Caffe2/public/cuda.cmake 147-177行
f(CAFFE2_USE_CUDNN)
# Get cuDNN version
if(EXISTS ${CUDNN_INCLUDE_PATH}/cudnn_version.h)
file(READ ${CUDNN_INCLUDE_PATH}/cudnn_version.h CUDNN_HEADER_CONTENTS)
else()
file(READ ${CUDNN_INCLUDE_PATH}/cudnn.h CUDNN_HEADER_CONTENTS)
endif()
string(REGEX MATCH "define CUDNN_MAJOR * +([0-9]+)"
CUDNN_VERSION_MAJOR "${CUDNN_HEADER_CONTENTS}")
string(REGEX REPLACE "define CUDNN_MAJOR * +([0-9]+)" "\\1"
CUDNN_VERSION_MAJOR "${CUDNN_VERSION_MAJOR}")
string(REGEX MATCH "define CUDNN_MINOR * +([0-9]+)"
CUDNN_VERSION_MINOR "${CUDNN_HEADER_CONTENTS}")
string(REGEX REPLACE "define CUDNN_MINOR * +([0-9]+)" "\\1"
CUDNN_VERSION_MINOR "${CUDNN_VERSION_MINOR}")
string(REGEX MATCH "define CUDNN_PATCHLEVEL * +([0-9]+)"
CUDNN_VERSION_PATCH "${CUDNN_HEADER_CONTENTS}")
string(REGEX REPLACE "define CUDNN_PATCHLEVEL * +([0-9]+)" "\\1"
CUDNN_VERSION_PATCH "${CUDNN_VERSION_PATCH}")
# Assemble cuDNN version
if(NOT CUDNN_VERSION_MAJOR)
set(CUDNN_VERSION "?")
else()
set(CUDNN_VERSION
"${CUDNN_VERSION_MAJOR}.${CUDNN_VERSION_MINOR}.${CUDNN_VERSION_PATCH}")
endif()
message(STATUS "Found cuDNN: v${CUDNN_VERSION} (include: ${CUDNN_INCLUDE_PATH}, library: ${CUDNN_LIBRARY_PATH})")
if(CUDNN_VERSION VERSION_LESS "7.0.0")
message(FATAL_ERROR "PyTorch requires cuDNN 7 and above.")
endif()
endif()
可以知道,在cudnn8以下版本放在cudnn.h文件
8以及以上放在cudnn_version文件,所以8及以上安装的时候要把所有include文件安装上去
也就是
确保你已经把cudnn中的cudnn_version.h复制到了cuda目录(新版本cudnn的版本信息包含在cudnn_version.h而不是cudnn.h,安装cudnn时把所有cudnn开头的都复制过去)
修改libtorch/share/cmake/Caffe2/public/cuda.cmake at line 148
替换 : file(READ ${CUDNN_INCLUDE_PATH}/cudnn.h CUDNN_HEADER_CONTENTS)
为 : file(READ ${CUDNN_INCLUDE_PATH}/cudnn_version.h CUDNN_HEADER_CONTE
同时查看cuda上的cudnn是否是自己拷贝过去的