Visual Studio 2019 + LibTorch + CUDA11.6 环境配置

  1. 准备cuda11.6.2 + cudnn8.2.4
    本人尝试过,如果此cuda版本配更高版本的cudnn会出问题,比如针对cuda11.6的cudnn,所以我这里下载了针对11.4的cudnn来配合cuda11.6.2。其实cuda版本也有向下兼容的能力。

  2. 进入pytorch官网 https://pytorch.org/get-started/locally/
    在这里插入图片描述
    由于如图的torch版本太高,1.12.1的,本人尝试了这个源码在visual studio 集成,会出现奇奇怪怪的无法找到函数实现的问题,所以这里使用1.10.2版的libtorch源码,注意,这里,下载的cuda11.3的源码,我的环境是cuda11.6。可能这个版本适合更高版本的visualt studio,我猜。

https://download.pytorch.org/libtorch/cu113/libtorch-win-shared-with-deps-1.10.2%2Bcu113.zip

.
3. 使用visual studio创建C++程序控制台项目
右键项目属性->VC++目录->包含目录,添加如下两个libtorch源码下的包含目录
在这里插入图片描述
加入库目录:
在这里插入图片描述
将C++标准改为C++17
在这里插入图片描述
在链接器->输入->附加依赖项,添加 D:\Env\libtorch\lib 目录下的所有lib文件

asmjit.lib
c10.lib
c10_cuda.lib
caffe2_detectron_ops_gpu.lib
caffe2_module_test_dynamic.lib
caffe2_nvrtc.lib
Caffe2_perfkernels_avx.lib
Caffe2_perfkernels_avx2.lib
Caffe2_perfkernels_avx512.lib
clog.lib
cpuinfo.lib
dnnl.lib
fbgemm.lib
fbjni.lib
kineto.lib
libprotobuf-lite.lib
libprotobuf.lib
libprotoc.lib
mkldnn.lib
pthreadpool.lib
pytorch_jni.lib
torch.lib
torch_cpu.lib
torch_cuda.lib
torch_cuda_cpp.lib
torch_cuda_cu.lib
XNNPACK.lib

以上都是最重要的准备,接下来准备一些细节上的修复

在C/C++ ->预处理器 -> 预处理定义 ,添加 NOMINMAX
在这里插入图片描述

在链接器 -> 命令行 -> 其他选项,加上:

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

加上以上的命令行,使得你的CUDA和cudnn可正常工作。
在Visual Studio 2019下,如果你使用最新版的libtorch,可能会出现报错:“一个无法解析的外部命令at::native::searchsorted_cuda”,如果你点进searchsorted_cuda函数,你会发现,只有声明没有实现,就会出现这个报错,那么它的实现其实在lib库文件里面,新版本的libtorch可能并没有这个函数的实现,所以报错了,所以我们才使用略早一些版本的libtorch。

在这里插入图片描述

最后,还要将D:\Env\libtorch\lib库目录下的dll文件给加进来

在这里插入图片描述

以上都是debug模式的配置,
如果你当前设置为Release模式,那么将D:\Env\libtorch\lib 目录下的所有dll文件复制到生成Release模式下生成exe文件的同级目录下。然后执行,其他的配置一律相同。

我们将此hello world程序运行在NVIDIA的显卡上

#include <torch/script.h>
#include <torch/torch.h>
#include <iostream>
int main() {
    std::cout << "检查CDUA是否可用:" << torch::cuda::is_available() << std::endl;
    std::cout << "检查cudnn是否可用:" << torch::cuda::cudnn_is_available() << std::endl;
    std::clock_t s, e;
    s = clock();
    torch::Tensor cuda_output;
    for (int i=0;i<1;i++) {
        cuda_output = torch::randn({ 5, 4 }, torch::device(torch::kCUDA));
    }
    std::cout << cuda_output << std::endl;
    e = clock();
    std::cout << "use time: " << (e - s) << " ms" << std::endl;
    return 0;
}

这是我们的运行结果:
我们可以看到CUDAFloatType{5, 4} 这证明确实在显存分配内存空间,随机生成一个5x4的矩阵。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值