libtorch编译C++版本

2023-10-29

libtorch编译C++版本

一. 下载pytorch源码

git clone https://github.com/pytorch/pytorch.git
cd pytorch
git submodule sync
git submodule update --init --recursive

下面是上传至百度网盘的源码,pytorch-1.8.0

链接:https://pan.baidu.com/s/1lxh7ueDsrnHqLaf5_oP2gg 提取码:8kp8 

二. 编译

1.安装依赖

# first: 安装cuda与cudnn,下载cuda10.0对应.run文件与对应的cudnn7.6.5
sh cuda_10.0.130_410.48_linux.run --no-opengl-libs 
ldconfig /usr/local/cuda-10.0/lib64
tar -xvzf  cudnn-10.0-linux-x64-v7.6.5.32.tgz
cp cuda/include/* /usr/local/cuda-10.0/include/
cp cuda/lib64/* /usr/local/cuda-10.0/lib64/
chmod +x /usr/local/cuda-10.0/include/cudnn.h
chmod +x /usr/local/cuda-10.0/lib64/libcudnn*
nvcc -V

# second:安装gcc g++
apt install apt install software-properties-common
add-apt-repository ppa:ubuntu-toolchain-r/test
apt-get update 
apt-get install gcc-7
apt-get install g++-7
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100
update-alternatives --config gcc
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 100
update-alternatives --config g++

gcc --version
g++ --version

2.编译libtorch

cd pytorch
mkdir release 
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/opt/libtorch -D BUILD_CAFFE2_MOBILE=OFF -D BUILD_PYTHON=OFF -D BUILD_CAFFE2_OPS=OFF -D BUILD_TEST=OFF -D USE_CUDA=ON -D USE_CUDNN=ON -D USE_OPENCV=ON -D USE_TBB=OFF ..
make -j${nproc}
make install

三. 使用

python training

import torch
import io

class MyModule(torch.nn.Module):
    def forward(self, x):
        return x + 10

m = torch.jit.script(MyModule())

# Save to file
torch.jit.save(m, 'scriptmodule.pt')
# This line is equivalent to the previous
m.save("scriptmodule.pt")

# Save to io.BytesIO buffer
buffer = io.BytesIO()
torch.jit.save(m, buffer)

# Save with extra files
extra_files = {'foo.txt': b'bar'}
torch.jit.save(m, 'scriptmodule.pt', _extra_files=extra_files)

c++ inference

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

int main(int argc, const char* argv[]) {
   if (argc != 2) {
      std::cerr << "usage: example-app <path-to-exported-script-module>\n";
      return -1;
  }

   // Deserialize the ScriptModule from a file using torch::jit::load().
   // libtorch verison 1.7.0
   torch::jit::script::Module module = torch::jit::load(argv[1]);
   std::cout << "ok\n";
  
    //设置Device
    torch::DeviceType device_type; //设置Device类型
    device_type = torch::kCUDA;  //torch::kCUDA  and torch::kCPU
    torch::Device device(device_type, 0);
    //把模型和数据都送到Device中去(数据和模型必须都在同一个device,结果也是)
    module.to(device);
    // Create a vector of inputs.
    std::vector<torch::jit::IValue> inputs;
    inputs.push_back(torch::ones({1, 3, 224, 224}).to(device));

	// 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';
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(custom_ops)
set(CMAKE_CXX_STANDARD 11)

set(Torch_DIR /home/xxx/下载/libtorch/share/cmake/Torch) #TorchConfig.cmake上级目录
find_package(Torch REQUIRED)
set(OpenCV_DIR /opt/opencv440/lib/cmake/opencv4/)  # OpenCVConfig.cmake上级目录
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_LIBS})
include_directories(${TORCH_INCLUDE_DIRS})

add_executable(example-app example-app.cpp)
target_link_libraries(example-app ${OpenCV_LIBS}  ${TORCH_LIBRARIES}) # 加入opencv/libTorch的库文件路径
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

libtorch编译C++版本 的相关文章

随机推荐

  • git checkout切换到指定commit

    切换分支是 git checkout 最常见的功能 这里不做介绍 今天主要介绍下它在撤销文件改动上的应用 放弃单个文件修改 注意不要忘记中间的 不写就成了检出分支了 git checkout filepathname 放弃所有的文件修改 g
  • 值得推荐的C/C++框架和库,包含很多开源项目 (真的很强大)

    值得学习的C语言开源项目 1 Webbench Webbench是一个在linux下使用的非常简单的网站压测工具 它使用fork 模拟多个客户端同时访问我们设定的URL 测试网站在压力下工作的性能 最多可以模拟3万个并发连接去测试网站的负载
  • mysql分组统计占比/百分比

    需求 统计当前数据库user tasks表中 不同status字段值对应的记录条数及占比 sql语句 SELECT status number concat round number total 100 00 2 percent FROM
  • Week 2 Git &Github 5: Amending commits

    git commit amend overwirte 上一次commit 用这个命令的前提是只能对本地的commit进行这样的操作 不要在跟他人公用仓库时使用这个操作 容易出现错误 使用案例 win10通过左下角windows图标 右键打开
  • 量化投资学习-17:庄家和主力为啥要在牛市到顶后砸盘?

    一直很奇怪 为啥庄家和主力要留一小部分筹码在牛市的顶部砸盘 你赚完自己的钱 走人就是了 走人之后 让散户自己玩不就得了 为啥要做这种损人不利己的事情呢 砸盘是要牺牲砸盘筹码的利益的 不理解这一点 是因为格局不够大 这是散户的眼光局限性所决定
  • 复现贪吃蛇程序——吃食物增加长度(最后一篇)

    本节便是贪吃蛇程序的最终部分 实现吃食物增加长度的功能 当二维数组canvas High Width 的元素值为 2时输出食物数值 F 其实现思路和3 4 2节中小蛇的移动类似 只需保持原蛇尾 不将最大值变为0即可 先奉上完整的代码 inc
  • 3个珍藏已久的资源网站,个个都很厉害,赶快私藏起来吧

    现在想要找到好的资源真的是难上加难了 拥有资源即拥有财富 今天小编就来给大家分享几个优质的资源网站 让你从此以后找资源不发愁 1 爱资料工具 这个网站是一个小工具合集的网站 虽说它页面布局有点混乱 但是这完全不影响它的实用性 包括开发工具
  • python爬虫股票数据分析判断股票好坏_学 Python 爬虫:爬取股票信息

    分析 打开 Chrome 的开发者模式 将股票代码一个一个选出来吧 我们可以将所有的股票代码存放在一个列表中 剩下的就是找一个网站 循环的去将每一只股票的数据取出来咯 同花顺 想必各位聪明的同学已经发现了 000001 就是股票代码 我们接
  • Git中的Sign Off功能是什么?

    Git中的Sign Off功能有什么意义 git commit signoff 我什么时候应该使用它 如果有的话 1楼 签名是提交消息末尾的一行 用于证明谁是提交的作者 其主要目的是改善对谁做了什么的追踪 尤其是补丁 提交示例 Add te
  • Ubuntu 15 安装Zsh与oh-my-zsh

    一 前言 Zsh和bash一样 是一种Unix shell 但大多数Linux发行版本都默认使用bash shell 但Zsh有强大的自动补全参数 文件名 等功能和强大的自定义配置功能 oh my zsh是基于zsh的功能做了一个扩展 方便
  • 数据结构--顺序表,栈的实现

    顺序表 顺序表是在计算机内存中以数组的形式保存的线性表 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素 使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中 即通过数据元素物理存储的相邻关系来反映数据元素
  • vmware创建的虚拟机无法连接外网

    在我本机中使用vmware创建虚拟机后 安装 docker 时使用wget 命令下载docker的安装文件 报错找不到资源 然后通过ping www baidu com 发现也ping不通 经过一番折腾可以访问外网了 将步骤记录下来 1 设
  • vue-cli2 ,区分开发环境,测试环境,生成环境的方法

    项目背景 为了适应vue cli2环境搭建需求 需要动态配置开发 测试 生产三种对应域名及其及打包命令 使用cross env可以让配置环境更加清晰明了还好管理 1 安装 cross env npm install save dev cro
  • arccotx图像在matlab,反三角函数图像与性质是什么?

    01 反三角函数是反正弦arcsinx 反余弦arccosx 反正切arctanx 反余切arccotx 反正割arcsecx 反余割arccscx这些函数的统称 各自表示其反正弦 反余弦 反正切 反余切 反正割 反余割为x的角 三角函数的
  • 2021第十四届全国大学生信息安全竞赛WP(CISCN)-- pwn部分

    CISCN 2021 WP 概述 ciscn 2021 lonelywolf ciscn 2021 pwny 第一种利用方式 第二种利用方式 ciscn 2021 silverwolf ciscn 2021 game 总结 概述 作为学习不
  • PeopleSoft PeopleTools Meta-Tables

    This is an attempt to list PeopleSoft meta tables along with some kind of description for every table The list will be b
  • 手把手教你使用vue2搭建微前端micro-app

    简述 本文主要讲述新手小白怎么搭建micro app 几乎是每一步都有截图说明 上手应该很简单 研究背景 这段时间在网上找了很多有关微前端相关的知识 起初本来是想着先搭建一个single spa 但是奈何网上能找到的内容都是千篇一律 我也是
  • 时钟芯片DS1302的原理及使用

    一 描述 DS1302时钟芯片是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片 它可以对年 月 日 周 时 分 秒进行计时 且具有闰年补偿等多种功能 DS1302芯片包含一个用于存储实时时钟 日历的 31 字节的静态
  • Installing with get-pip.py

    本文转载至 https pip readthedocs io en stable installing 由于 Mac OS X 下默认没有安装 pip 可以使用如上的脚本来安装 pip 安装方法很简单 1 下载 get pip py htt
  • libtorch编译C++版本

    libtorch编译C 版本 一 下载pytorch源码 git clone https github com pytorch pytorch git cd pytorch git submodule sync git submodule