如何在Windows 10(VS2015 v140)用Libtorch(C++)加载运行ONNX模型?
我刚好有过在Windows10 + VS2015(v140工具集)下用Libtorch加载运行ONNX模型的实操经验,给你整理个完整的落地流程,亲测能跑通:
一、先选对Libtorch版本
VS2015的v140工具集比较老,新版本的Libtorch(比如1.9及以后)已经不再支持它了,所以你得选1.8.x版本的Libtorch预编译包,注意要下载和你的项目配置(Debug/Release、x64/x86)匹配的版本,建议直接选x64,现在很少用x86了。
二、VS2015项目配置步骤
创建一个空的C++项目后,按下面的步骤配置:
- 右键项目→属性→常规,确保平台工具集是
Visual Studio 2015 (v140),平台选x64 - 配置VC++目录:
- 包含目录:添加Libtorch解压后的
include目录,以及include\torch\csrc\api\include(这个是Libtorch C++ API的核心头文件目录,很多教程容易漏) - 库目录:添加Libtorch解压后的
lib目录
- 包含目录:添加Libtorch解压后的
- 配置链接器→输入→附加依赖项:
- 如果是Debug模式,添加
torch.lib;torch_cpu.lib;c10.lib(注意不同小版本可能有额外的lib,比如torch_cuda.lib,但如果是CPU版本就不用加) - 如果是Release模式,添加对应的不带
_d后缀的库(比如torch.lib;torch_cpu.lib;c10.lib,具体看lib文件夹里的文件)
- 如果是Debug模式,添加
- 最后别忘了把Libtorch解压后的
bin目录里的所有dll文件,复制到你的项目输出目录(比如x64/Debug或者x64/Release),或者加到系统PATH环境变量里,不然运行时会提示找不到dll。
三、核心代码实现
下面是一个完整的示例代码,涵盖模型加载、输入准备、推理、输出处理的全流程:
#include <torch/torch.h> #include <torch/script.h> #include <iostream> #include <vector> int main() { // 加载ONNX模型 torch::jit::script::Module module; try { // 替换成你的ONNX模型路径 module = torch::jit::load("your_model.onnx"); } catch (const c10::Error& e) { std::cerr << "模型加载失败,错误信息:" << e.what() << std::endl; return -1; } std::cout << "模型加载成功!" << std::endl; // 设置模型为评估模式(关闭dropout、batchnorm等训练时的操作) module.eval(); // 准备输入张量:这里要严格匹配你的模型输入维度和数据类型 // 示例是创建一个[1,3,224,224]的float32张量(对应常见的图像输入) torch::Tensor input = torch::randn({1, 3, 224, 224}, torch::kFloat32); // 把输入打包成Libtorch要求的IValue列表 std::vector<torch::jit::IValue> inputs; inputs.push_back(input); // 执行推理 at::Tensor output; try { output = module.forward(inputs).toTensor(); } catch (const c10::Error& e) { std::cerr << "推理失败,错误信息:" << e.what() << std::endl; return -1; } // 处理输出结果 std::cout << "输出张量的维度:" << output.sizes() << std::endl; // 示例:输出前5个结果值 auto output_ptr = output.data_ptr<float>(); for (int i = 0; i < 5; ++i) { std::cout << "输出[" << i << "]:" << output_ptr[i] << std::endl; } return 0; }
四、关键注意事项
- 输入张量的**维度、数据类型、设备(CPU/GPU)**必须和模型训练时的输入完全一致,否则会直接报错
- VS2015默认的C标准可能是C98,你需要在项目属性→C/C→语言里把C标准改成
C++11或更高(Libtorch依赖C++11特性) - 如果遇到编译报错“找不到torch/torch.h”,检查包含目录是否加全;如果是链接报错,检查库目录和附加依赖项是否匹配,以及Debug/Release是否和Libtorch版本对应
- 如果你的模型是GPU训练的,要下载带CUDA的Libtorch版本,并且确保你的电脑有NVIDIA显卡和对应版本的CUDA驱动
内容的提问来源于stack exchange,提问作者ueezb
相关产品推荐
相关产品推荐

