配置CUDA与cuDNN后编译dlib仍提示未找到cuDNN的问题求助
问题背景
环境配置:
- Windows 11
- Visual Studio 17 2022
- cuDNN v9.0
- CUDA v12.3
已配置的环境变量:
$env:CUDA_PATH = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.3"
系统Path包含:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.3\binC:\Program Files\NVIDIA\CUDNN\v9.0\bin
操作流程:
- 克隆并初始化dlib仓库:
git clone https://github.com/davisking/dlib.git cd dlib git submodule init git submodule update
- 创建build目录:
cd dlib mkdir build cd build
- 执行CMake配置:
cmake -G "Visual Studio 17 2022" .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1
出现错误:
This warning is for project developers. Use -Wno-dev to suppress it.
-- Found CUDA: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.3 (found suitable version "12.3", minimum required is "7.5")
-- Looking for cuDNN install...
-- *** cuDNN V5.0 OR GREATER NOT FOUND. ***
-- *** Dlib requires cuDNN V5.0 OR GREATER. Since cuDNN is not found DLIB WILL NOT USE CUDA. ***
-- *** If you have cuDNN then set CMAKE_PREFIX_PATH to include cuDNNs folder. ***
-- Disabling CUDA support for dlib. DLIB WILL NOT USE CUDA
-- Searching for FFMPEG/LIBAV
-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
-- PkgConfig could not be found, FFMPEG wont be available
-- Configuring done (7.6s)
-- Generating done (0.0s)
-- Build files have been written to: E:/pythonProj/dlib/build
尝试添加CMAKE_PREFIX_PATH指定cuDNN根目录后,问题未解决:
cmake -G "Visual Studio 17 2022" .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1 -DCMAKE_PREFIX_PATH="C:\Program Files\NVIDIA\CUDNN\v9.0"
解决方法
查看dlib的CMakeLists.txt后发现,需要额外指定CMAKE_INCLUDE_PATH和CMAKE_LIBRARY_PATH参数,明确指向cuDNN对应CUDA版本的头文件和库文件路径(cuDNN v9.0按CUDA版本划分了子目录)。
最终可用的CMake命令:
cmake -G "Visual Studio 17 2022" .. ` -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1 ` -DCMAKE_PREFIX_PATH="C:\Program Files\NVIDIA\CUDNN\v9.0;C:\Program Files (x86)\Intel\oneAPI\mkl\latest" ` -DCMAKE_INCLUDE_PATH="C:\Program Files\NVIDIA\CUDNN\v9.0\include\12.3;C:\Program Files (x86)\Intel\oneAPI\mkl\latest\include" ` -DCMAKE_LIBRARY_PATH="C:\Program Files\NVIDIA\CUDNN\v9.0\lib\12.3\x64;C:\Program Files (x86)\Intel\oneAPI\mkl\latest\lib"
关键说明
cuDNN v9.0的目录结构与旧版本不同,它会为每个CUDA版本创建独立的子目录(比如对应CUDA 12.3的include/12.3和lib/12.3/x64)。仅指定cuDNN根目录的CMAKE_PREFIX_PATH无法让CMake定位到正确的头文件和库,因此必须通过CMAKE_INCLUDE_PATH和CMAKE_LIBRARY_PATH直接指向这些细分路径。
内容的提问来源于stack exchange,提问作者Trevor

