这里以配置debug版的工程为例
配置包含目录和库目录
包含目录:
E:\deploy_test\packet\libtorch\include\torch\csrc\api\include
E:\deploy_test\packet\libtorch\include
库目录:
E:\deploy_test\packet\libtorch\lib
这里设置的绝对路径,可以根据需要设置相对路径。
配置链接器输入
将libtorch的lib中所以*.lib文件添加进去,也可以根据需要按需添加。
E:\deploy_test\packet\libtorch\lib\*.lib
复制动态链接库
将libtorch的lib中所以*.dll文件复制到VS的工程文件夹中,也可以根据需要按需添加。如将debug版的*.dll复制到VS工程文件夹的debug文件中;将release版的*.dll复制到VS工程文件夹的release文件中。
设置语言模式
最新的libtorch要选用最新的标准,且将符合模式选“否”。否则,会出现几千条报错。
导出pytorch的网络模型
采用script导出pytorch的网络模型
mi = Mine(args.state_dim)
mi.load_state_dict(torch.load('model_params.pkl')) # load model parameters from files
mi.to('cpu')
# converting to Torch Script via Annotation
serialized_model = torch.jit.script(mi)
# save the torch script for C++
serialized_model.save("model_C/MI_cpu.pt")
添加头文件
添加头文件就可以使用libtorch了
#include <torch/torch.h>
#include <torch/script.h>
列子
int main() {
// 检查CUDA是否可用
torch::DeviceType device_type;
if (torch::cuda::is_available()) {
std::cout << "CUDA available! Predicting on GPU." << std::endl;
device_type = torch::kCUDA;
}
else {
std::cout << "Predicting on CPU." << std::endl;
device_type = torch::kCPU;
}
torch::Device device(device_type);
// 加载模型
torch::NoGradGuard no_grad; // 禁用梯度计算
auto mi_model = torch::jit::load("model/MI_cpu.pt"); // 确保路径正确
mi_model.to(device);
mi_model.eval();
// 数据
torch::Tensor input1_tensor = torch::tensor(input1, torch::kFloat32);
// 前向传播
std::vector<torch::jit::IValue> inputs;
inputs.push_back(input1_tensor.to(device));
auto mi_tensor = mi_model.forward(inputs).toTensor();
return 0;
}