cmake编译

最近使用LibTorch在调用分类模型,在配置环境时,用到了1.4版本的PyTorch,按照网上的一些教程无法成功,便把自己部署成功的经验分享出来。

1. 从官网下载已经编译好的LibTorch库

官网地址:(https://pytorch.org/)

根据自己的环境可以下载GPU版和CPU版。

2. 使用cmake命令创建项目,失败!

安装使用可参考官网文档:https://pytorch.org/cppdocs/installing.html

遇到的问题:

使用cmake命令,并不能一次成功,主要是一些配置项不成功,如下

3. 使用CMake-GUI配置项目,成功。

在使用cmake命令不成功的情况下,可以采用cmake-gui,方便配置环境。

报 CMAKE_PREFIX_PATH未设定的错误,使用Add Entry添加该条目,并设置libtorch的路径(下载后的路径)

添加Entry后,点击Configure,配置成功,然后点击Generate生成项目。

4. 直接使用Visual Studio 创建项目,成功

1) 新建C++空项目, 选择x64,Release(根据从官网下载的不同版本确定)

2) 添加新建项目,创建main.cpp文件,添加如下代码:

#include <torch/torch.h>#include <iostream>int main() {torch::Tensor tensor = torch::rand({ 2, 3 });std::cout << tensor << std::endl;}
 3) 添加包含目录和库目录

链接器-> 输入-> 附加依赖项,添加:c10.lib; torch.lib

4) 修改C++ -> 语言 -> 符合模式,为 否

5) 编译生成,成功。

6) 运行之前需要把在torch.lib目录下的所有dll拷贝到exe目录下。

注意:

使用VS2015编译报错,错误C2872 “std”: 不明确的符号。

使用vs2017编译后,解决,猜测是libtorch1.4版本需要更高的C++版本。

VS2019编译libtorch

1、引用关系

以vs下libtorch引用CUDA为例:

包含目录:

  1. libtorch_dir/include

  2. libtorch_dir/include/torch/csrc/api/include

库目录:

libtorch_dir/lib

动态库:

c10.lib
c10_cuda.lib
torch_cpu.lib
torch_cuda.lib

测试代码:

#include<iostream>
#include<torch/script.h>
#include <torch/torch.h> # cuda相关函数头文件
#include<memory>int main()
{std::cout <<"cuda::is_available():" << torch::cuda::is_available() << std::endl;system("pause");
}

直接运行,输出: “cuda::is_available(): 0”,显卡未调用起来。

Windows10系统下使用LibTorch 1.5、1.6,使用Visual Studio进行C++开发时,Torch::cuda::is_available()返回值为0(使用cmake来构建工程,是可以正常编译和执行)。

解决方法:

1)使用VS2017及以上版本;

2)windows上装的cuda版本需要与下载的libtorch的cuda版本相对应;

3)在“属性 --> 链接器 --> 命令行 --> 其他选项”中添加:

/INCLUDE:?warp_size@cuda@at@@YAHXZ

至此,问题解决。

2、cuda相关函数

torch::cuda::is_available() // CUDA是否可用

torch::cuda::cudnn_is_available() // cuDNN 是否可用

torch::cuda::device_count() // 可使用的GPU个数

3、GPU/CPU模式

libtorch默认使用的是CPU,设为使用GPU推理,只需将数据和模型加载至GPU中,API如下:

model.to(at::kCUDA); // 模型加载至GPU
timg = torch::ones({ 1, 3, 224, 224 }).to(at::kCUDA);  // 数据加载至GPU
std::vector<torch::jit::IValue> inputs;
inputs.push_back(timg);
数据/模型加载最佳方式:
torch::DeviceType device_type = at::kCPU; // 定义设备类型
if (torch::cuda::is_available())device_type = at::kCUDA;
model.to(device_type);
std::vector<torch::jit::IValue> inputs;
inputs.push_back(torch::ones({ 1, 3, 224, 224 }).to(device_type));

使用cmake和vs2019进行编译libtorch过程相关推荐

  1. VS2019直接编译cmake项目

    自VS2017起,VS正式支持CMAKE项目. github上的C++项目很多都是基于CMAKE的,比如著名的opencv,一般我们在windows系统下使用cmake-gui对Cmakelists. ...

  2. ViSP安装之Windows系统基于VS2019编译器编译获得VISP动态库

    Windows系统基于VS2019编译器编译获得VISP动态库 官网地址: Installation from source for Windows with Visual C++ 2019 (vc1 ...

  3. windows10用c++部署libtorch过程中遇到的一些问题

    windows10用c++部署libtorch过程中遇到的一些问题 libtorch1.0 vs2017 CMake3.14 windows10 无cuda 用c++调用pytorch模型官网上面有详 ...

  4. ubuntu 源码编译libtorch

    ## pytorch/libtorch qq群: 1041467052 有一点儿感悟就是: 一定要去官网找一手资料,百度出来的都是个人根据官网来的,这个就随便看看了. 官网:https://githu ...

  5. arm64平台编译libtorch

    将代码移植到jetson上面的时候发现jetson是arm64系统,导致之前用的libtorch库无法使用需要重新编译,总结一下编译过程: 获取源码(参考 aarch64下编译libtorch | j ...

  6. 配置Abaqus2021 + VS2019 + IVF2020编译环境

    配置Abaqus2021 + VS2019 + IVF2020编译环境 背景介绍 研三需要对Abaqus进行UMAT二次开发,虽然不喜欢Fortran,但是还是需要进行安装. 本文介绍的是我第二次安装 ...

  7. CMake安装、配置编译C++代码(Mac、Linux)————附带详细步骤和代码

    文章目录 0 背景 1 安装CMake 2 使用CMakefile.txt编译C++程序 0 背景 因为需要使用cmake来进行跨平台编译,所以根据网上的资料学习和总结成此文. 1 安装CMake # ...

  8. cmake:VS2015和GCC编译paho.mqtt C/C++ client

    paho.mqtt.c是eclipse开发的C语言跨平台mqtt client 开源库,paho.mqtt.cpp是对应的C++ Client,paho.mqtt支持CMAKE编译,本文以脚本形式提供 ...

  9. 深度学习--第1篇(续): Ununtu16.04源码编译libtorch(GUDA版本)环境配置

    Ubuntu16.04+libtorch编译 1.参考博客 2.准备工作 3.Libtorch编译安装 3.1 下载Pytorch源码 3.2 下载libtorch库 3.3 CMakeLists编写 ...

最新文章

  1. 【算力大放送2】GPU 专属服务器使用教程!!!
  2. 5G NGC — PCC 策略与计费控制框架
  3. Linux课程---7、shell技巧(获取帮助命令)
  4. vc++ mfc 非客户区 描绘线_决战客户端技术
  5. 速度收藏!600页阿里技术全景图曝光,程序员看完都沸腾了
  6. 5道谷歌面试题:即使是天才也要怀疑自己能力了(附答案)
  7. GeoPoint与LocationData
  8. MySQL数据库通过cmd窗口导入sql文件
  9. 《Adams/view从入门到提高》视频
  10. java channels_java.nio.channels.NotYetConnectedException
  11. C# GDI winfrom 图像转换椭圆形
  12. SptingBoot构建电商基础秒杀项目时遇到的问题
  13. Spring前一次定时任务没执行完,下次任务是否会执行
  14. SOFA Weekly |社区开发者的搬砖日常、QA 整理、新手任务计划
  15. 魅族20和魅族20pro的区别 魅族20和20pro参数对比
  16. md文件的正确打开方式
  17. Gradle配置文件解决你的问题。
  18. MQ 消息丢失、重复、积压问题,如何解决?
  19. 把树莓派上chrome浏览器的缓存目录指定到SSD固态硬盘上
  20. 2016ACM/ICPC亚洲区大连站-补题

热门文章

  1. Visual C#中用WMI编写网络应用程序
  2. 还是TFS的问题,包括源代码管理和甘特图操作
  3. 搭建大数据分析平台的必要性
  4. LocalDatetime与Date、timestamp互相转化
  5. Node.js跨域请求解决方案
  6. 数据库相关概念与编程使用方式
  7. php curl 请求失败,PHP CURL库之GET、POST数据大小限制导致请求失败解决方案
  8. python︱ collections模块(namedtuple/defaultdict/OrderedDict等)
  9. linux初级命令行
  10. 数组、链表实现队列、栈