Windows下CUDA兼容性的问题与LibTorch的使用——珍爱生命,远离MSVC
前几天把CUDA 9.1升级到了CUDA 9.2,以便和PyTorch匹配。升级CUAD以及作为铺垫的升级显卡驱动倒没啥好说的,点开exe,覆盖安装就行了。
…除了一个地方。安装CUDA 9.2时,需要把和Visual Studio相关的一项取消勾选,否则装不上。等我装完CUDA 9.2,再打开VS2019,弹出一个错误,没太细看,是和CUDA有关的。
今天去用CMake编译时,拿libtorch的示例都编译不过去,查了一下,发现CUDA和高版本的VS不兼容…具体可以看这里,CUDA 9.2: “NVIDIA Installer Failed”。
在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include\crt\host_config.h
的131行开始,有如下语句。
1 |
|
而我用VS2019,MSVC版本为1921。所以无论是安装时的问题,还是安装后VS2019的报错,抑或是现在的编译不过去,都知道了原因,CUDA 9.2和高版本的MSVC不兼容。
升级到CUDA 10.1
这次安装倒没出什么问题,无脑点next就OK了。
1 |
|
看到上面这样的提示,还是很放心的。然后把Python版和C++版的PyTorch都重装成CUDA 10.1版本的。
虽然说远离MSVC…但在Windows平台上…不得不低头额…还是真香。
编译LibTorch的示例
示例在这里。
cpp和CMakeLisits.txt的内容copy过来,编译。
1 |
|
在第二步和官方示例不一样,省了设置路径(其实是我忘了),官方示例是这样的。
1 |
|
因为已经把libtorch添加进了环境变量,所以省去也没关系吧。
虽然还是没有看到Makefile,但已经编译好了exe。只是这个Release
文件夹体积太吓人了,把cuDNN相关的dll、torch和torch_python的本体dll都复制进来了…(诶,话说为什么要有torch_python.dll
?)
最后纪念一下我编译出来的第一个C++版PyTorch代码。
1 |
|
LibTorch的模型调用与预测
这里没太多好说的,照着官方教程,编译了一遍。
载入模型
1 |
|
模型预测
1 |
|
代码上没遇到明显的问题,只是概念上要明白,虽然模型都是.pt的后缀,但PyTorch的Python前端和C++前端的模型格式并不一样,Python得到的模型,不能直接在C++中载入,需要转换格式。
关于模型,额外的话
顺带一提,在纯Python前端的项目,经常看到model
文件夹下只是.py文件,这是生成模型的代码,而不是模型本身啊。
但我还是不知道,Torch中的模型,除了.t7,还能不能保存成json格式?