当前位置: 首页 > article >正文

编译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作如下修改:

  1. 查找设置NVTOOLEXT_HOME变量的语句,如果其内容为set(NVTOOLEXT_HOME "C:/Program Files/NVIDIA Corporation/NvToolsExt"),则将其改为:set(NVTOOLEXT_HOME “$ENV{CUDA_PATH}”)。这是为了防止到C:/Program Files/NVIDIA Corporation/NvToolsExt目录下查找nvtx3的包含目录。

  2. 将其中的语句
    list(APPEND TORCH_INCLUDE_DIRS ${NVTOOLEXT_HOME}/include)
    改为

list(APPEND TORCH_INCLUDE_DIRS ${NVTOOLEXT_HOME}/include/nvtx3)
  1. 如果存在 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)是什么

NVToolsExtNVIDIA随CUDA提供的一套工具扩展库,通常简称为NVTX(NVIDIA Tools Extension)。
它用于在 CUDA 应用程序中标记时间范围、注释代码或线程,从而帮助性能分析工具(如Nsight SystemsNsight Compute)更清楚地分析应用执行情况。
自CUDA12开始,NVTX工具(新版名为nvtx3)已经转变为一个仅头文件的库,不再提供.lib和动态库。想学习更多,请访问GitHub的NVTX页面。


http://www.kler.cn/a/450141.html

相关文章:

  • JAVA HTTP压缩数据
  • Selenium 和 Playwright两大框架的不同之处
  • 性能优化!突破性能瓶颈的尖兵CPU Cache
  • 串口通信控制LED灯
  • C++中的字符串实现
  • 浅谈算法交易
  • javaScript中slice()和splice()的用法与区别
  • 重温设计模式--职责链模式
  • Android基于Path的addRoundRect,Canvas剪切clipPath简洁的圆角矩形实现,Kotlin(1)
  • CS!GO
  • 灰度测试是什么
  • 【NLP 17、NLP的基础——分词】
  • 用套接字的UDP,TCP知道什么是HTTP吗?
  • Apache解析漏洞(apache_parsing_vulnerability靶场攻略CVE-2017-15715靶场攻略)
  • 服务平滑发布与线上验证
  • CNN、RNN、LSTM和Transformer之间的区别和联系
  • 安装CPU版的torch(清华源)
  • 经典案例PPT | 大型水果连锁集团新零售数字化建设方案
  • Ubuntu下C语言操作kafka示例
  • 基于GRU门控循环神经网络的多分类预测【MATLAB】
  • npm error code ETIMEDOUT
  • 【Prometheus】【实战篇(七)】在 Grafana 中配置数据源并使用 Prometheus Node Exporter
  • 【研究生必备|学术会议|高录用|见刊后1个月检索】第三届材料科学与智能制造国际学术会议(MSIM2025)
  • 【橘子微服务】spring cloud function的编程模型
  • Webhook 是什么?详解其工作原理
  • 日文医学论文如何翻译