Win10+VS2017+PyTorch(libtorch) C++ 基本应用

本文详述了如何在C++环境中部署PyTorch模型,包括VS2017配置、OpenCV和libtorch的下载安装,以及通过TorchScript将PyTorch模型转换为C++可读格式的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.下载准备
  • 下载安装VS2017或VS2015

  • 下载安装opencv
    可以参考博客:VS2017配置opencv教程 ,该博客中写的很详细

  • 安装cmake
    记得把bin目录添加到环境变量path中,例如我的:E:\SoftEnv\CMake\bin

  • 下载libtorch
    下载地址:PyTorch libtorch ,这个根据自己情况选择下载,因为我自己的是cuda10,并且我选择使用release版本,所以我的选择如下:
    在这里插入图片描述

1.PyTorch模型转换为Torch脚本

PyTorch模型从Python到C ++的旅程由Torch Script实现,Torch Script是PyTorch模型的一种表示,可以由Torch Script编译器理解,编译和序列化。
这里说下通过跟踪转换为Torch脚本方式(示例),创建一个名为TorchScrip.py的脚本,内容如下:

import torch
import torchvision

# An instance of your model.
model = torchvision.models.resnet18()

# An example input you would normally provide to your model's forward() method.
example = torch.rand(1, 3, 224, 224)

# Use torch.jit.trace to generate a torch.jit.ScriptModule via tracing.
traced_script_module = torch.jit.trace(model, example)
traced_script_module.save("model.pt")

然后运行该脚本,会生成一个 model.pt 文件,该文件就是C++需要调用的模型。

2.准备C++测试代码和CMakelists.txt文件

首先,我在E:/PyTorch/libtorch_test路径下创建一个名为Example的文件夹,然后在该文件夹下分别创建C++测试代码(例如:example-app.cpp)和CMakelists.txt文件以及名为build的文件夹。
CMakelists.txt 内容如下:

cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
project(example-app)

find_package(Torch REQUIRED)
find_package(OpenCV REQUIRED)

if(NOT Torch_FOUND)
    message(FATAL_ERROR "Pytorch Not Found!")
endif(NOT Torch_FOUND)

message(STATUS "Pytorch status:")
message(STATUS "    libraries: ${TORCH_LIBRARIES}")

message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")


add_executable(example-app example-app.cpp)
target_link_libraries(example-app ${TORCH_LIBRARIES} ${OpenCV_LIBS})
set_property(TARGET example-app PROPERTY CXX_STANDARD 11)

注意该文件里的关键词:example-appexample-app.cpp ,这个example-app.cpp 就是接下来要写的C++测试代码文件名。
C++测试代码文件(example-app.cpp)内容如下:

#include <torch/script.h> // One-stop header.
#include <iostream>
#include <memory>

int main() {
  // Deserialize the ScriptModule from a file using torch::jit::load().
  std::shared_ptr<torch::jit::script::Module> module = torch::jit::load("E:/PyTorch/libtorch_test/Example/model.pt");

  assert(module != nullptr);
  std::cout << "ok\n";
  // Create a vector of inputs.
  std::vector<torch::jit::IValue> inputs;
  inputs.push_back(torch::ones({ 1, 3, 224, 224 }));

  // Execute the model and turn its output into a tensor.
  at::Tensor output = module->forward(inputs).toTensor();

  std::cout << output.slice(/*dim=*/1, /*start=*/0, /*end=*/5) << '\n';
  while (1);
}

Example路径下:
在这里插入图片描述

3.构建应用程序

准备好上述内容之后,先进入到build文件夹下,然后打开cmd终端或powershell终端,输入如下命令并执行:

cmake -DCMAKE_PREFIX_PATH=E:/SoftEnv/OpenCV4.1/opencv/build/x64/vc15/lib;E:/PyTorch/libtorch-win-shared-with-deps-latest/libtorch -DCMAKE_BUILD_TYPE=Release -G "Visual Studio 15 Win64" ..

注意:上面的指令需要根据自己实际配置进行修改,第一个是opencv的路径,第二个是libtorch的路径,第三个是使用的VS版本。我这里下载的是release版本的libtorch,使用的是VS2017,所以参数如上设置,如果使用的是VS2015,则需要将Visual Studio 15 Win64 改为 Visual Studio 14 Win64opencv/build/x64/vc15/bin 改为 opencv/build/x64/vc14/bin。不出错的话应该输出类似下图的内容:
在这里插入图片描述
看下build文件夹下编译的内容:
在这里插入图片描述
然后,右击example-app.vcxproj ,打开方式选择Microsoft Visual Studio 2017 打开程序,改为Release模式:
在这里插入图片描述
接下来进行编译:
在这里插入图片描述
在这里插入图片描述
这时候会发现提示torch.dll找不到问题:
在这里插入图片描述
这时需要到libtorch的lib路径下将torch.dll文件复制到工程Example\build\Release中,然后再执行F5,然后这时又报缺少caffe2.dll文件,接着重复同样的问题,接连报缺少nvToolsExt64_1.dll、caffe2_gpu.dll、c10_cuda.dll文件,开始没办法,只能一一将其复制添加到工程Example\build\Release中,到这里执行F5最终才成功。。
看下Example\build\Release中内容:
在这里插入图片描述
最后看下成功执行的结果:
在这里插入图片描述
最后说一下关于运行测试代码时报dll缺失的问题。如果想避免一条条添加dll文件,可以一次性将libtorch/lib路径下所有的dll都复制一份到工程Example\build\Release中。
另外,看网上还有一种做法,就是把libtorch/lib中的所有dll放到libtorch/bin中,然后把libtorch/bin加到环境变量的path中,这种方法我自己没有尝试过,有兴趣的朋友不妨试一试。

为了在 Windows 11 系统中使用 Visual Studio 2022 配置 CUDA 12.8 开发环境,需要按照以下步骤进行设置和验证: ### 安装 CUDA Toolkit 1. 下载并安装适用于 Windows 11 的 **CUDA Toolkit 12.8**。确保下载的版本与您的 GPU 兼容,并且支持 Visual Studio 2022。 2. 在安装过程中,选择自定义安装选项,并确保勾选以下组件: - CUDA Driver - CUDA Runtime - CUDA Development Tools (nvcc 编译) - NSight Visual Studio Edition (Nsight VSE) 如果安装过程中遇到卡顿问题,请注意检查是否与 Visual Studio 版本存在兼容性问题。某些用户报告称,Visual Studio 2022 最新版(如 17.13)可能导致安装失败[^2]。 ### 配置 Visual Studio 2022 1. 打开 **Visual Studio Installer**,确认已安装 **C++ 工作负载**,包括以下组件: - MSVC v142 - VS 2019 C++ x64/x86 生成工具 - C++ 分析工具 2. 安装完成后,在 Visual Studio 中创建一个新的项目或打开现有项目。 3. 右键点击项目 -> 属性 (Properties) -> 配置属性 (Configuration Properties) -> CUDA C/C++ -> 设备 (Device),选择合适的计算能力(Compute Capability),例如 `compute_50,sm_50` 或更高版本。 4. 在项目的属性管理器 (Property Manager) 中,确保每个配置(Debug/Release)都启用了 CUDA 支持。 ### 解决编译错误 若在编译 `.cu` 文件时出现 **MSB372、MSB371 或 C1083 错误**,可尝试以下解决方法: - 找到 `crt` 文件夹路径,通常位于 `C:\Program Files (x86)\Windows Kits\10\Include\10.0.xxxx.0\ucrt`。 - 修改文件夹权限:右键点击文件夹 -> 属性 -> 安全 -> 编辑 -> 为所有用户组分配“完全控制”权限。 - 将最大线程数限制从默认值修改为更高的数值(例如 2000),以避免资源冲突导致的编译失败[^4]。 ### 验证 CUDA 安装 创建一个简单的 CUDA 程序来测试开发环境是否正常工作: ```cpp #include <stdio.h> __global__ void kernel() { printf("Hello from GPU!\n"); } int main() { kernel<<<1, 1>>>(); cudaDeviceReset(); return 0; } ``` 将此代码保存为 `.cu` 文件,并在 Visual Studio 中编译运行。如果成功输出 `Hello from GPU!`,则表示 CUDA 开发环境已正确配置。 ### 第三方库集成(如 LibTorch) 若需使用 **PyTorchC++ 前端(LibTorch)** 并启用 CUDA 支持: 1. 从 [PyTorch 官网](https://pytorch.org/) 下载带有 CUDA 支持的 LibTorch 版本。 2. 在 Visual Studio 项目属性中,添加 LibTorch 的 `include` 和 `lib` 路径。 3. 链接必要的库文件(如 `c10.lib`, `torch_cpu.lib`, `torch_cuda.lib` 等)。 4. 确保系统中已安装对应的 CUDA 和 cuDNN 运行时库[^3]。 ---
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值