编译libtorch时报错:NvToolsExt Could not open input file ***nvToolsExt64_1.lib
编译libtorch时报错:NvToolsExt Could not open input file ‘C:/Program Files/NVIDIA Corporation/NvToolsExt/lib/x64/nvToolsExt64_1.lib’
libtorch
库是pytorch
库的C++版本。有时为了提升程序性能、减少python调用,用户希望在自己的C++程序中使用libtorch
,因而产生了自行编译libtorch的需求。在Windows平台上编译CUDA12支持的libtorch时,很可能会产生如下报错信息:
NvToolsExt Could not open input file ‘C:/Program Files/NVIDIA Corporation/NvToolsExt/lib/x64/nvToolsExt64_1.lib’
下面分析报错原因,并给出解决方法。
报错原因
报错信息很直白地指出,文件’C:/Program Files/NVIDIA Corporation/NvToolsExt/lib/x64/nvToolsExt64_1.lib’并不存在。不信邪,查看本地路径,确实不存在这个库。
然而,刚安装的CUDA,怎么可能会缺少库呢?
这是因为,自CUDA12开始,nvToolsExt库仅提供头文件,不再发布.lib
文件和动态库。而较旧的cmake配置文件中仍尝试查找.lib
文件,自然会找不到它,导致报错。
解决方法1:修改cmake文件
确保cmake版本高于3.25;
在libtorch的目录中,找到\share\caffe2\public\cuda.cmake
作如下修改:
在find_package(CUDAToolkit REQUIRED):
语句后添加两行
add_library(CUDA::nvToolsExt INTERFACE IMPORTED)
set_property(TARGET CUDA::nvToolsExt APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CUDAToolkit_nvToolsExt_INCLUDE_DIRS}")
对\share\torch\TorchConfig.cmake
作如下修改:
-
查找设置
NVTOOLEXT_HOME
变量的语句,如果其内容为set(NVTOOLEXT_HOME "C:/Program Files/NVIDIA Corporation/NvToolsExt")
,则将其改为:set(NVTOOLEXT_HOME “$ENV{CUDA_PATH}”)。这是为了防止到C:/Program Files/NVIDIA Corporation/NvToolsExt目录下查找nvtx3的包含目录。 -
将其中的语句
list(APPEND TORCH_INCLUDE_DIRS ${NVTOOLEXT_HOME}/include)
改为
list(APPEND TORCH_INCLUDE_DIRS ${NVTOOLEXT_HOME}/include/nvtx3)
- 如果存在 set(TORCH_CUDA_LIBRARIES ${NVTOOLEXT_HOME}/lib/x64/nvToolsExt64_1.lib
C U D A L I B R A R I E S ) 语句,则删去 ‘ {CUDA_LIBRARIES})语句,则删去` CUDALIBRARIES)语句,则删去‘{NVTOOLEXT_HOME}/lib/x64/nvToolsExt64_1.lib`,以排除对它的查找。
解决方法2:安装CUDA11(不推荐)
在安装CUDA11时,选择高级安装选项,勾选NVTX,完成安装后便可找到nvToolsExt64_1.lib和对应动态库。
参考链接
Github的一条回答
知乎的修复方案
pytorch论坛的讨论
附言
推荐直接到pytorch官网下载libtorch,而不是自己编译。
自己编译需要解决诸多依赖,非常麻烦。目前(截止2024/12/13)vcpkg中的libtorch版本是2.1.2,比较旧了,且在Windows平台存在数个已知的编译问题。
官网下载libtorch
官网链接
NVToolsExt (NVTX)是什么
NVToolsExt
是NVIDIA
随CUDA提供的一套工具扩展库,通常简称为NVTX
(NVIDIA Tools Extension)。
它用于在 CUDA 应用程序中标记时间范围、注释代码或线程,从而帮助性能分析工具(如Nsight Systems
和Nsight Compute
)更清楚地分析应用执行情况。
自CUDA12开始,NVTX工具(新版名为nvtx3)已经转变为一个仅头文件的库,不再提供.lib
和动态库。想学习更多,请访问GitHub的NVTX页面。