本博客旨在说明在显卡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
搜索"设备管理器",在弹出的界面中点击显示适配器,看显示的是什么
如果显示当前读取到的显卡型号,那么说明显卡可以使用了。
则说明驱动需要更新,需要安装最新的驱动
而驱动安装只需要记住一个原则:使用最新版本的驱动即可。
最新的驱动一定可以向下兼容。
本人提供的包:
找到466.77-desktop-win10-64bit-international-dch-whql,下载。
官网下载:
可以去NVIDIA官网下载最新驱动
比如RTX3060显卡+Win10,就选择如下图所示的配置
接着点击搜索,下载即可
点击466.77-desktop-win10-64bit-international-dch-whql
一路安装到底即可。
等安装成功后再次检查设备管理器的显示适配器,应该会显示当前读取到的显卡型号。
本人提供的包:
找到cuda_11.1.0_456.43_win10.exe,下载。
官网下载:
建议百度搜索cuda11.1.0,会显示cuda11.1.0的下载地址,如下图所示。按照下图
建议不要从英伟达官网进去寻找cuda11.1.0,因为英伟达官网会显示最新版本的cuda(目前是11.3,以后应该会是更高的版本),不是所需要的历史版本,而安装太高的版本就可能需要更高版本的Libtorch。
点击cuda_11.1.0_456.43_win10,一路安装到底即可
PS:最后的界面Launch Samples可以不用勾选,直接关闭。
个人建议这里直接使用本人网盘里的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,点击下载。
解压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里面去,复制完后应该要有下图所示的文件。
进入Microsoft Visual Studio官网
本人选择社区版本,下载。
接着安装VS2019,一路安装到底,直到出现以下界面的时候勾选"使用C++的桌面开发"和"Visual Studio扩展开发"。
Tip:
Opencv版本如果使用太高的版本可能会不兼容,本人使用Opencv3.4.6没有报错。
本人提供的包:
找到opencv-3.4.6-vc14_vc15,下载,安装后生成opencv文件夹。
官网下载:
操作:
进入Opencv官网在Library一栏找到Releases,如下图所示:
找到所需版本,点击Windows,就可以下载opencv-3.4.6-vc14_vc15.exe,点击后就可以生成opencv库。
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版本。
下载,解压。
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文件包括以下:
1.新建cpp
项目—>源文件,右击—>添加—>新建项,弹出的界面如下,然后修改名称改为main.cpp,再点击右下角的添加
2.代码测试
这里主要测试Libtorch是否能正常使用,可以使用以下代码,如果返回的都是1说明配置成功了。
#include
#include
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运行程序,如果运行成功的话界面如下:
这里给出我师兄的一个Libtorch的开源项目
包含了图像分割从初始化模型、加载权重pt文件、训练模型和预测结果,是本人见到比较完整的Libtorch项目。
可以按照项目里的流程来学习如何使用Libtorch来做深度学习与图像处理的开发任务。