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.本教程所有需要下载的安装包或者库都有两种下载方式: 第一种是说明如何在官网上找到对应的版本,自行下载; 第二种是可以直接从本人生成的百度网盘链接下载所需要的安装包。 提取码:6666 打包的文件夹如下图所示,勾选需要的安装包或者库保存下载。
我的环境配置: 显卡RTX3060 Windows10 驱动466.77 cuda11.1 cuDNN8.0.4 Opencv3.4.6 Libtorch1.9.0 Visual Studio Community2019
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: 关于编译模式和编译平台的选择,可以参考这个链接
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代码测试
1.新建cpp 项目—>源文件,右击—>添加—>新建项,弹出的界面如下,然后修改名称改为main.cpp,再点击右下角的添加 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来做深度学习与图像处理的开发任务。
|