0


C++下的libtorch部署——(三)window10下的Visual Studio配置libtorch

文章目录


前言

 libtorch可以理解为C++版的pytorch,语法和pytorch基本相似。 安装libtorch之前,要先安装好cuda以及对应的pytorch。同理,在VS中配置libtorch时,也需要把cuda的路径配置进去

一、下载libtorch

下载地址

在这里插入图片描述
进入pytorch官网直接下载、解压即可,注意有两个版本:Release和Debug。两个可以都下载下来,但只用一个,下面以Debug版的为例进行说明(但在实际部署项目中,通常是用release版本,因为得到的程序更小一点,但两者的配置方法是一模一样的。)。
VS的基本环境配置都大同小异,具体细节图在上一篇配置opencv的博客中进行了详细展示。下面就不在重复展示图片,只说重点。

二、系统变量环境

将解压后libtorch文件中的bin和lib路径添加到 环境变量——系统变量——path 中。(cuda的环境变量肯定在之前使用pytorch时也配置了吧)

三、VS环境配置

进入项目配置界面,注意最上面的选项,是否为x64

在这里插入图片描述
(1)VC++目录(选做:这一步不进行配置也可以):

  1. 《包含目录》里添加下面两个路径,cuda的也添加进行:
你cuda的路径\include
你的路径\libtorch\include
你的路径\libtorch\include\torch\csrc\api\include
  1. 《库目录》里添加,cuda也加:
你的路径\libtorch\lib
你的cuda路径\lib\x64

(2)链接器:

  1. 常规——附加库目录,cuda也加(cuda路径一般是加C:\Program Files\NVIDIA GPU Computing Toolkit里)
你的cuda\lib\x64
你的路径\libtorch\lib
  1. 输入——附加依赖项(这里添加lib文件夹里的.lib文件,需要哪个加哪个。但也可以全部加上,只是这样会增加程序大小。但注意:不同版本的libtorch可能会存在差异,要自己查阅lib文件夹里的内容。(后续出现:“无法找到xxx.lib”的错误时,可以在这里进行检查))。   一般情况下,只需要加上关于cuda和torch的lib就行;对于cuda,一般只需加C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3\lib\x64里的cudart.lib就行(链接 cudart.lib 库文件以确保应用程序能够正确地与 CUDA 运行时进行交互)
c10.lib
c10_cuda.lib
pytorch_jni.lib
torch.lib
torch_cpu.lib
torch_cuda_cpp.lib
torch_cuda_cu.lib

cudart.lib
  1. 命令行 在其他选项中添加以下指令,以便更好地调用cuda,防止使用cuda报错(注:版本不同,添加的指令也不一样。其他博客指出libtorch1.8.1使用指令一;libtorch1.9.0使用指令二;还有之前的1.10.2+cu113版本使用指令三。(我官网下的cuda11.8的版本,使用的指令一))
指令一:
/INCLUDE:?warp_size@cuda@at@@YAHXZ

指令二: 
/INCLUDE:"?searchsorted_cuda@native@at@@YA?AVTensor@2@AEBV32@0_N1@Z 

指令三: 
/INCLUDE:?warp_size@cuda@at@@YAHXZ -INCLUDE:?searchsorted_cuda@native@at@@YA?AVTensor@2@AEBV32@0_N1@Z 

(3)C\C++:

  1. 常规——附加包含目录(和前面的《包含目录》一样)
你cuda的路径\include
你的路径\libtorch\include
你的路径\libtorch\include\torch\csrc\api\include

还可以添加VS和系统的include目录,方法:$(IncludePath)
在这里插入图片描述

  1. 语言:(这里出现了两个问题)(1)#error std 不明确的符号 (2)#error You need C++17 to compile PyTorch

解决方法:
(1)把《符合模式》改为否;
(2)《c++语言标准》》改为17

在这里插入图片描述
3. 预编译头:设置为“不使用预编译头”,否则可能会出现#include xxx 无法编译的问题

(4)调试:
按照上述配置后,进行测试,发生报错:“无法定位程序输入点?check_range@Symlnt@c10@@ .exe或是.dll

解决方法:在调试——环境中设置lib文件夹里的DLL文件的环境变量

PATH=你的路径\libtorch\lib;%PATH%

在这里插入图片描述

四、测试

(1)简单的测试下torch能否使用

#include<iostream>#include<torch/torch.h>intmain(){
    torch::Tensor tensor = torch::rand({5,3});
    std::cout << tensor << std::endl;return EXIT_SUCCESS;}

在这里插入图片描述
(2)测试cuda能否使用(cuda的安装和配置参考一些pytorch的安装)

#include<iostream>#include<torch/torch.h>#include<torch/script.h>voidforCuda(){if(torch::cuda::is_available()){std::cout <<"支持GPU"<< std::endl;}else{std::cout <<"不支持GPU"<< std::endl;}};intmain(){forCuda();system("pause");return0;}

在这里插入图片描述
(2)测试模型加载(注意libtorch和cuda、pytorch之间的版本)

#include<iostream>#include<torch/torch.h>#include<torch/script.h>voidforCuda(){if(torch::cuda::is_available()){    std::cout <<"支持GPU"<< std::endl;}else{    std::cout <<"不支持GPU"<< std::endl;}};intmain(){forCuda();
    torch::jit::script::Module module;
    try {
        module = torch::jit::load("C:\\Users\\libtoch\\08211619\\inspection.pt");}catch(const c10::Error& e){
        std::cerr <<"error loading the model\n";return-1;}
    std::cout <<"模型加载成功"<< std::endl;system("pause");return0;}

在这里插入图片描述

五、踩坑记录

除了上面所说的一些问题,再记录下网上所说的一些坑。

(1)当一个项目生成xxx.dll文件,另一个项目想要调用该dll文件时。若出现报错:无法启动程序“xxx.dll”不是有效的Win32应用程序

解决方法:右键要运行的项目——设置启动项目

报错链接
参考链接1
参考链接2
参考链接3
参考链接4

标签: c++ 开发语言

本文转载自: https://blog.csdn.net/qq_43199575/article/details/132466437
版权归原作者 想要躺平的一枚 所有, 如有侵权,请联系我们删除。

“C++下的libtorch部署——(三)window10下的Visual Studio配置libtorch”的评论:

还没有评论