windows10下c++加载libtorch

一、使用环境

  1. VS2017:将自己的插件更到最近,重要的事情说三遍!
    由于我的是社区版,更新在“工具”->“扩展与更新”

  2. libtorch,
    libtorch的版本是对下兼容的,这很好理解。比如,你2020年训练了一个模型,到了2030年,别人要想加载你的模型,只需要最先进的libtorch配合最先进的cuda就可以了。
    注意:有release和debug版本,我下载的是release版本。
    (1)安装cpu版本:
    去官网下载最新的版本就可以。
    (2)安装GPU版本:
    我的电脑的cuda是安装版本是11.0。查看方式为:打开NVIDIA控制面板->系统信息->组件,图片如下:
    在这里插入图片描述
    但我用的aconda 环境中 pytorch版本是1.10.1的,所以我下载的gpu版本的libtorch版本是:libtorch-win-shared-with-deps-1.10.0+cu102.zip。虽然落后了0.0.1个版本,还能用。
    下载好后,记得添加环境变量,我这里为"C:\install\libtorch\lib"
    注意:这里是release,VS中的配置也必须是release!!!
    在这里插入图片描述

  3. Cmake的windows安装,略

二、各种配置
从“项目”->“**属性”,打开配置页面

  • VC++目录
    (1)“库目录”中添加
    在这里插入图片描述
    最上面一个是GPU在本机的安装位置,使用的是CPU版本的话,这句可以去掉。

  • C/C++
    (1)"常规"中“附加包含目录”添加
    在这里插入图片描述
    窃以为这里和上面是重复配置,可以去掉。
    (2)“常规”中其他选项
    在这里插入图片描述
    (3)“语言”中的“符合模式”->"否”

  • 链接器
    (1)“常规”中的
    在这里插入图片描述
    窃以为这里和上面是重复配置,可以去掉。
    (2)“输入”中的“附加依赖项”
    (2.1)cpu的配置如下:
    在这里插入图片描述
    (2.2)GPU的配置如下:
    在这里插入图片描述
    将下面命令添加到 “命令行”中去

/INCLUDE:?warp_size@cuda@at@@YAHXZ

添加完全后是:

/INCLUDE:?warp_size@cuda@at@@YAHXZ "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" 

新版本的是:

/INCLUDE:?warp_size@cuda@at@@YAHXZ /INCLUDE:?_torch_cuda_cu_linker_symbol_op_cuda@native@at@@YA?AVTensor@2@AEBV32@@Z "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" 

三、编写代码,然后,点击“生成”中的“重新生成xxx”

#include <torch/script.h> 
#include <iostream>
#include <memory>
using namespace std;
int main() {
	torch::Tensor tensor = torch::rand({ 2, 3 });
	cout << tensor << endl;
	
	std::cout <<"cuda::is_available():" << torch::cuda::is_available() << std::endl;
	system("pause"); //验证GPU是否可用
	std::cout << "torch::cuda::device_count:" << torch::cuda::device_count() << endl;
	system("pause");
	
	std::string model_path = "../../model_libtorch_win_125.pt"; //两级目录
	torch::jit::script::Module module;
	// Deserialize the ScriptModule from a file using torch::jit::load().
	module = torch::jit::load(model_path);
	std::cout << "model is load !\n";

	torch::DeviceType device_type = at::kCPU; // 定义设备类型
	if (torch::cuda::is_available()) {
		device_type = at::kCUDA;
		std::cout << "cuda is used." << endl;
	}
	else {
		std::cout << "cpu is used." << endl;
	}
	module.to(device_type);
}

四、注意事项

  1. #include <windows.h> 和 include <torch/torch.h> 冲突
    表现如下:
    在这里插入图片描述
    解决办法:
    (1)把 include <windows.h> 注释掉
    (2)改成这样,未试过
    在这里插入图片描述
  2. 如果自身电脑的cuda是 大版本的11.5的,那么你需要的libtorch应该选用 cu11*上的版本,相应的配置需要更改。参考链接。其中,重点需要修改的地方是:
    (1)4.1链接器–input
    (2)4.2链接器–Command Line
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值