这里写目录标题
- LibTorch下载
- Vistual Studio环境配置
- C++部署Libtorch出现问题、错误汇总
- 检测环境是否配置成功
LibTorch下载
安装LibTorch非常简单,只需要从其官网选择相应的版本即可,具体页面如下图所示。
如果需要加载PyTorch训练的模型文件,安装的LibTorch需要和PyTorch的版本一致。CUDA版本最好选与本机一致的版本进行使用,但是我的经验告诉我即使下载的版本和电脑安装的CUDA版本不一致,但只要能兼容也可以使用。比如我下载的LIbTorch的CUDA版本是11.7但是电脑的CUDA版本是12.0,也是可以正常使用的,其中CUDA版本要大于等于LIbTorch的CUDA版本。
Vistual Studio环境配置
打开VS2022,在项目上右键打开属性,依次进行如下配置:
1、VC++目录下的包含目录
CUDA版本和CPU版本的LibTorch均需配置:
libtorch解压目录\include
libtorch解压目录\include\torch\csrc\api\include
CUDA版本的LibTorch需额外配置:
CUDA安装目录\v12.1\include
2、VC++目录下的库目录
CUDA版本和CPU版本的PyTorch均需配置:
libtorch解压目录\lib
CUDA版本的LibTorch需额外配置:
CUDA安装目录\v12.1\lib\X64
3、链接器下的输入
CUDA版本和CPU版本的LibTorch均需配置(二选其一):
libtorch解压目录\lib\*.lib(所有lib文件均加入项目,程序所占空间较大)
文件名.lib(只加入自己所需的lib文件)
CUDA版本的LibTorch需额外配置(二选其一):
CUDA安装目录\ v12.1\lib\X64\*.lib
文件名.lib
C++部署Libtorch出现问题、错误汇总
博客:https://blog.csdn.net/zzz_zzz12138/article/details/109138805
1、由于找不到xxx.dll,无法继续执行代码,重新安装程序可能会解决此问题
(1)由于找不到c10.dll(或其他libtorch/lib中的.dll动态库),无法继续执行代码
(2)由于找不到VCRUNTIME 140_1D.dll,无法继续执行代码
2、LINK : fatal error LNK1104: cannot open file ‘torch-NOTFOUND.obj’ (torch-NOTFOUND.obj无法找到)
3、error C2440: “初始化”: 无法从“torch::jit::script::Module
”转换为“std::shared_ptr
”
4、无法定位程序输入点cudnnSetCTCLossDescriptorEx于动态链接库xxx.dll上
5、有未经处理的异常:Microsoft C++异常:c10::Error,位于内存位置xxx处
6、引发异常:0xC0000005:读取位置0xFFFFFFFFFFFFFFFE时发生访问冲突
7、error :c2872 std 不明确的符号
补充:由于找不到c10.dll(或其他libtorch/lib中的.dll动态库),无法继续执行代码
把libtorch/lib中的所有dll放到libtorch/bin中,然后把libtorch/bin加到环境变量的path中.
错误 LNK2001 无法解析的外部符号 "class at::Tensor __cdecl at::native::_torch_cuda_cu_linker_symbol_op_cuda(class at::Tensor const &)" (?_torch_cuda_cu_linker_symbol_op_cuda@native@at@@YA?AVTensor@2@AEBV32@@Z) Project5 D:\c++\Project5\LINK 1
出现这种错误在命令行内加入:
/INCLUDE:“?ignore_this_library_placeholder@@YAHXZ”
检测环境是否配置成功
检测是否配置成功:
#include <iostream>
#include <torch/torch.h>
#include<torch/script.h>
using namespace std;
int main() {
torch::Tensor tensor = torch::rand({ 5,3 });
cout << tensor << endl;
system("pause");
return EXIT_SUCCESS;
}
检测能否使用GPU:
#include <iostream>
#include <torch/torch.h>
#include<torch/script.h>
using namespace std;
int main()
{
if (torch::cuda::is_available())
cout << "支持GPU" << endl;
else
cout << "不支持GPU" << endl;
system("pause");
return 0;
}