You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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目录
  • 配置链接器→输入→附加依赖项:
    • 如果是Debug模式,添加torch.lib;torch_cpu.lib;c10.lib(注意不同小版本可能有额外的lib,比如torch_cuda.lib,但如果是CPU版本就不用加)
    • 如果是Release模式,添加对应的不带_d后缀的库(比如torch.lib;torch_cpu.lib;c10.lib,具体看lib文件夹里的文件)
  • 最后别忘了把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:47:33