Windows CUDA11+visual studio 2019配置libtorch

前言

参考了这个链接,但其是cuda10以及visual studio2017。真没想到visual studio版本会影响到配置。

注意

  • 本博客只支持环境下libtorch的配置;
  • 目前visual studio2022不支持libtorch配置,请使用较低版本;

本机环境

使用链接下打印本机环境为:

PyTorch version: 1.6.0
Is debug build: False
CUDA used to build PyTorch: 10.2
ROCM used to build PyTorch: N/A

OS: Microsoft Windows 11 专业版
GCC version: Could not collect
Clang version: Could not collect
CMake version: Could not collect
Libc version: N/A

Python version: 3.7.6 (default, Jan  8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)] (64-bit runtime)
Python platform: Windows-10-10.0.22000-SP0
Is CUDA available: True
CUDA runtime version: 11.4.152
GPU models and configuration: GPU 0: NVIDIA GeForce RTX 2060
Nvidia driver version: 472.50
cuDNN version: Could not collect
HIP runtime version: N/A
MIOpen runtime version: N/A
Is XNNPACK available: False

visual studio

本文尝试安装visual studio2022后失败,后在问题下发现libtorch在visual studio2022下无法使用CUDA,随后安装2019版本。

opencv

官网下载你想要的版本即可,当然限定平台为Windows平台。

opencv和libtorch都是下载后解压即可,所有程序涉及路径以英文路径为佳,避免出错。

 libtorch

由于没找到之前版本的libtorch,下载最新版本。

 示例

生成torchscript文件

以ResNet34分类模型为例尝试部署分类模型。准备一张图片用以判断是否部署成功,本文用例图来自​链接

 先生成torchscript文件:

from torchvision.models import resnet34
import torch.nn.functional as F
import torch.nn as nn
import torch
import cv2

#读取一张图片,并转换成[1,3,224,224]的float张量并归一化
image = cv2.imread("flower.jpg")
image = cv2.resize(image,(224,224))
input_tensor = torch.tensor(image).permute(2,0,1).unsqueeze(0).float()/225.0

#定义并加载resnet34模型在imagenet预训练的权重
model = resnet34(pretrained=True)
model.eval()
#查看模型预测该付图的结果
output = model(input_tensor)
output = F.softmax(output,1)
print("模型预测结果为第{}类,置信度为{}".format(torch.argmax(output),output.max()))

#生成pt模型,按照官网来即可
model=model.to(torch.device("cpu"))
model.eval()
var=torch.ones((1,3,224,224))
traced_script_module = torch.jit.trace(model, var)
traced_script_module.save("resnet34.pt")

 visual studio项目配置

新建工程项目:创建c++空项目并设置路径名称等。

 新建空白项目后右键源文件,点击添加新建项,生成main.cpp。

编译环境配置

在项目的管理器中设置项目的编译为Release,平台选择x64。如图:

 配置项目属性

右键项目deploy_test,选择属性进入属性页的配置属性。选择VC++目录,需要添加包含目录和库目录。包含目录配置路径为

your path to libtorch\include\torch\csrc\api\include
your path to libtorch\include
your path to opencv\build\include

我的包含目录配置结果如下:

 库目录的配置路径为:

your path to libtorch\lib
your path to opencv\build\x64\vc14\lib

 

 最后添加链接器,点击链接器->输入->附加依赖项,编辑添加库目录中libtorch库目录下所有的.lib文件名。此外,为使用opencv还需添加opencv的.lib文件。本文添加如下:

opencv_world455.lib
asmjit.lib
c10.lib
c10_cuda.lib
caffe2_nvrtc.lib
clog.lib
cpuinfo.lib
dnnl.lib
fbgemm.lib
libprotobuf-lite.lib
libprotobuf.lib
libprotoc.lib
torch.lib
torch_cpu.lib
torch_cuda.lib
torch_cuda_cpp.lib
torch_cuda_cu.lib

动态链接库需要放入指定位置,点击调试->环境,添加

path=your libtorch path\lib;your opencv path\build\x64\vc14\bin

我的为:

path=D:\tools\libtorch-1.11.0+cu113release\lib;D:\tools\opencv\build\x64\vc14\bin

注意等号前后不包含空格。

cpp代码

#include<opencv2/opencv.hpp>
#include <torch/torch.h>
#include <torch/script.h> 

int main()
{
	//定义使用cuda
	auto device = torch::Device(torch::kCUDA,0);
	//读取图片
	auto image = cv::imread("your path to\\flower.jpg");
	//缩放至指定大小
	cv::resize(image, image, cv::Size(224, 224));
	//转成张量
	auto input_tensor = torch::from_blob(image.data, { image.rows, image.cols, 3 }, torch::kByte).permute({ 2, 0, 1 }).unsqueeze(0).to(torch::kFloat32) / 225.0;
	//加载模型
	auto model = torch::jit::load("your path to\\resnet34.pt");
	model.to(device);
	model.eval();
	//前向传播
	auto output = model.forward({input_tensor.to(device)}).toTensor();
	output = torch::softmax(output, 1);
	std::cout << "模型预测结果为第" << torch::argmax(output) << "类,置信度为" << output.max() << std::endl;
	return 0;
}

如果运行正常输出结果,则恭喜,若报错,请按以下添加内容。

属性-链接器-命令行-其他选项,添加

/INCLUDE:?warp_size@cuda@at@@YAHXZ /INCLUDE:?_torch_cuda_cu_linker_symbol_op_cuda@native@at@@YA?AVTensor@2@AEBV32@@Z 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值