RTX3060+Win10+cuda11.1+cuDNN8.0.4+Libtorch1.9.0+Opencv3.4.6+VS2019深度学习C++配置

0前言

本博客旨在说明在显卡RTX3060+Win10(显卡RTX3080测试下来也可以)环境下,通过正确安装最新驱动+cuda11.1+cudnn8.0.4来配置深度学习环境,接着在VS2019上使用Libtorch1.9.0(C++版本深度学习框架)来做深度学习的开发任务,比如用C++来部署深度学习模型。

本博客的特点在于:

1.基本上将所有需要的操作都具体地交代了,包括一些可能出现的浪费时间的坑点,适合小白学习并快速上手;如果有已经做好或者会的部分(比如安装VS)请直接跳过。

2.在30系列显卡上来使用Libtorch1.9版本的配置教程,目前网上系统介绍的资料较少,本文尽量做到全面介绍。

3.本教程所有需要下载的安装包或者库都有两种下载方式:

第一种是说明如何在官网上找到对应的版本,自行下载;

第二种是可以直接从本人生成的百度网盘链接下载所需要的安装包。

链接:https://pan.baidu.com/s/16M66qZ3ZYY9EzXjUGf4d3g

提取码:6666

打包的文件夹如下图所示,勾选需要的安装包或者库保存下载。

我的环境配置:

显卡RTX3060

Windows10

驱动466.77

cuda11.1

cuDNN8.0.4

Opencv3.4.6

Libtorch1.9.0

Visual StudioCommunity2019

1检查显卡

搜索"设备管理器",在弹出的界面中点击显示适配器,看显示的是什么

如果显示当前读取到的显卡型号,那么说明显卡可以使用了。

如果显示的是下图的Microsoft 基本显示适配器

则说明驱动需要更新,需要安装最新的驱动

而驱动安装只需要记住一个原则:使用最新版本的驱动即可。

最新的驱动一定可以向下兼容。

本人提供的包:

找到466.77-desktop-win10-64bit-international-dch-whql,下载。

官网下载:

可以去NVIDIA官网下载最新驱动

比如RTX3060显卡+Win10,就选择如下图所示的配置

接着点击搜索,下载即可

点击466.77-desktop-win10-64bit-international-dch-whql

一路安装到底即可。

等安装成功后再次检查设备管理器的显示适配器,应该会显示当前读取到的显卡型号,如下图所示。


2下载、安装cuda11.1.0

2.1下载cuda11.1.0

本人提供的包:

找到cuda_11.1.0_456.43_win10.exe,下载。

官网下载:

建议百度搜索cuda11.1.0,会显示cuda11.1.0的下载地址,如下图所示。按照下图

建议不要从英伟达官网进去寻找cuda11.1.0,因为英伟达官网会显示最新版本的cuda(目前是11.3,以后应该会是更高的版本),不是所需要的历史版本,而安装太高的版本就可能需要更高版本的Libtorch。

2.2安装cuda11.1.0

点击cuda_11.1.0_456.43_win10,一路安装到底即可

PS:最后的界面Launch Samples可以不用勾选,直接关闭。

3下载、配置cuDNN8.0.4

3.1下载cuDNN8.0.4

个人建议这里直接使用本人网盘里的cuDNN压缩包,因为如果从英伟达官网下载的话需要登录,而且英伟达官网的速度比较慢,所以比较麻烦。

本人提供的包:

找到cudnn-11.1-windows-x64-v8.0.4.30.zip,下载。

官网下载:

先百度搜索cuDNN下载,进入英伟达官网的cuDNN界面

点击Download cuDNN,进入以下界面。

如果没有注册过的话先点击Join Now进行注册;如果注册过的话,点击Login来登录。

登陆上之后,进入以下界面,勾选I Agree To the Terms of the cuDNN Software License Agreement,会弹出Archived cuDNN Releases

点击Archived cuDNN Releases,在新的界面中找到对应cuda11.1的cudnn8.0.4版本,找到Win10对应的cuDNN Library,点击下载。

3.2配置cuDNN8.0.4

解压cudnn-11.1-windows-x64-v8.0.4.30文件

打开里面的文件,点击cuda,会有3个文件夹bin、include、lib

接着打开以下的路径:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1

然后把刚刚解压好的cudnn的3个文件夹bin、include、lib里面的文件分别复制到上面这个目录下对应的bin、include、lib里面去,复制完后应该要有下图所示的文件。

4确认cuda是否安装成功

键盘按Win+R

输入cmd,按回车,在弹出的界面输入nvcc -V

按回车,如果出现以下界面,则说明安装cuda11.1成功。


5下载、安装、配置Visual Studio2019

5.1下载VS2019

进入Microsoft Visual Studio官网

本人选择社区版本,下载。

5.2安装VS2019

接着安装VS2019,一路安装到底,直到出现以下界面的时候勾选"使用C++的桌面开发"和"Visual Studio扩展开发"。

6.下载Opencv3.4.6

Tip:

Opencv版本如果使用太高的版本可能会不兼容,本人使用Opencv3.4.6没有报错。

本人提供的包:

找到opencv-3.4.6-vc14_vc15,下载,安装后生成opencv文件夹。

官网下载:

操作:

进入Opencv官网在Library一栏找到Releases,如下图所示:

找到所需版本,点击Windows,就可以下载opencv-3.4.6-vc14_vc15.exe,点击后就可以生成opencv库。

7下载Libtorch1.9.0

Tip:

这里需要注意由于30系列显卡的关系,所需要的安装cuda就得在11以上,而较高的cuda版本就需要较高的Libtorch版本,具体的关系就需要去Pytorch官网上查看。

结论:

显卡型号决定cuda版本的下限,而cuda版本又决定了torch的库(不管是C++的Libtorch还是Python的Pytorch)是需要和cuda版本匹配的。

PS:

事实上本人在第一次直接在3060显卡上跑由Libtorch1.7.1开发的程序时死活就是没法加载到GPU上,直到后来想下载debug模式的库时候才想起来Libtorch有一个Compute Platform这个要求,所以这才注意到本人之前使用的Libtorch1.7.1是不支持cuda11.1的。

本人提供的包:

找到libtorch-win-shared-with-deps-1.9.0+cu111.zip,下载,解压。

官网下载:

Pytorch的官网上可以查到目前Libtorch最新版本1.9.0可以有支持cuda11.1的版本,于是选择最新的这个Libtorch1.9.0的Release版本。

下载,解压。


8VS配置Opencv和Libtorch

VS配置Opencv和Libtorch总共包括头文件,lib文件和dll文件。

操作:

1.打开VS2019,在界面上找到创建新项目,点击后在弹出的界面中,点击空项目

点击右下角的下一步,接着在配置新项目的界面中,输入自己想取的项目名称名字和对应的位置

再点击右下角的创建,这时会弹出项目界面,此时已经产生待会用于C++深度学习开发的项目了。

2.确定自己的编译模式(Debug/Release)和编译平台(x86/x64/Any Cpu)

本人使用的是Release+x64

Tip:关于编译模式和编译平台的选择,可以参考以下资料:

Visual Studio中Debug与Release以及x86、x64、Any CPU的区别


3.配置头文件

在项目界面找到右边的项目名称并右击,找到属性并点击

在弹出的属性页中找到配置属性—>VC++目录

在包含目录中添加opencv和Libtorch的include路径,目的为了调用里面的h文件或者hpp文件

D:\opencv\build\include

D:\libtorch190cu111\include

D:\libtorch190cu111\include\torch\csrc\api\include

点击确定,再点击应用。

4.配置lib文件

还是在刚刚的属性页界面中找到配置属性—>VC++目录

在库目录中添加opencv和Libtorch的lib路径,目的是为了使用里面的lib文件来链接

D:\opencv\build\x64\vc14\lib

D:\libtorch190cu111\lib

(以下图示路径是本人的路径,请修改成自己的opencv和Libtorch的路径)

接着继续在属性页中的左边点击链接器—>输入,点击附加依赖项, 编辑,

弹出的界面中添加opencv和Libtorch的lib路径下的lib文件名

opencv_world346.lib

asmjit.lib

c10.lib

c10d.lib

c10_cuda.lib

caffe2_detectron_ops_gpu.lib

caffe2_module_test_dynamic.lib

caffe2_nvrtc.lib

clog.lib

cpuinfo.lib

dnnl.lib

fbgemm.lib

libprotobuf-lite.lib

libprotobuf.lib

libprotoc.lib

mkldnn.lib

torch.lib

torch_cpu.lib

torch_cuda.lib

torch_cuda_cpp.lib

torch_cuda_cu.lib

此外还需要再加两行

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

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

(本人是opencv_world346.lib,如果一开始选择了Debug模式就是opencv_world346d.lib)

这两行链接的作用是保证torch::cuda::is_available()返回True,不加的话有可能返回False

参考资料:

1.Torch::cuda::is_available return false in libtorch 1.5

2.libtorch 1.8.0 precompiled has no CUDA backend linked (Adding "-INCLUDE:?warp_size@cuda@at@@YAHXZ" no longer helps) #54131

至于上面两具体怎么理解本人也不是很懂,希望有大佬能指出是如何理解的。

最后点击右下角的应用。


5.配置dll文件

配置dll文件可以使用3种方法:

a.将opencv和Libtorch需要调用的dll对应的路径(Opencv的D:\opencv\build\x64\vc14\bin和Libtorch的D:\libtorch190cu111\lib)放入系统环境变量中。

b.将opencv和Libtorch需要调用的dll文件复制到执行程序的当前目录下(本人选择的Release版本,所以就是复制编译通过后生成的D:\Libtorch_test\x64\Release的目录下)。

c.将opencv和Libtorch需要调用的dll对应的路径配置到VS中。

参考资料:

pytorch部署torchscript篇


而本人平常由于工作需要,经常需要把做好的软件放到其他工控机上测试,所以会倾向于第二种直接复制dll文件的方式,否则的话放到新的机器上又需要重新配置,会比较麻烦和低效。

而如果是采用第二种方式的话需要在编译通过后生成包含exe的Release目录下去复制。

所以建议读者需要等到后面编译成功后复制dll文件,而此项目需要复制的dll文件包括以下:

9代码测试

9.1新建cpp

项目—>源文件,右击—>添加—>新建项,弹出的界面如下,然后修改名称改为main.cpp,再点击右下角的添加

9.2代码测试

这里主要测试Libtorch是否能正常使用,可以使用以下代码,如果返回的都是1说明配置成功了。

#include <iostream>

#include <torch/torch.h>

int main() {

    std::cout << "CUDA is available:" << torch::cuda::is_available() << std::endl;

    std::cout << "CUDNN is available:" << torch::cuda::cudnn_is_available() << std::endl;

    std::cout << "GPU counts:" << torch::cuda::device_count() << std::endl;

    return 0;

}

Tip:如果要复制代码到main.cpp的话,建议先复制到记事本里面,然后再复制到main.cpp,否则会出现以下提示,导致cpp文件不能调用Libtorch库。

将代码放入main.cpp后先编译,具体操作是右击项目,点击重新生成,等待一会时间,如果出现全部重新生成:成功1个,失败0个,跳过0个,就说明编译成功。

此时Release目录已经生成。

接着将上面所需要复制的dll文件复制到当前的目录D:\Libtorch_test\x64\Release

然后回到项目界面,按F5运行程序,如果运行成功的话界面如下:

10项目推荐

这里给出我师兄的一个Libtorch的开源项目

包含了图像分割从初始化模型、加载权重pt文件、训练模型和预测结果,是本人见到比较完整的Libtorch项目。

可以按照项目里的流程来学习如何使用Libtorch来做深度学习与图像处理的开发任务。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容