(原)ubuntu中C++调用libotrch
转载请注明出处:
https://www.cnblogs.com/darkknightzh/p/11479240.html
参考网址:
https://pytorch.org/tutorials/advanced/cpp_export.html
https://github.com/pytorch/pytorch/issues/15476#issuecomment-478293447
主要目的是在ubuntu中使用C++调用libotrch,从而调用pytorch训练得到的模型。
cuda 10.0
python环境:anaconda,python3.6.8
1. 按照官方教程https://pytorch.org/tutorials/advanced/cpp_export.html编写对应文件
CMakeLists.txt和example-app.cpp
CMakeLists.txt:
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(custom_ops) find_package(Torch REQUIRED) add_executable(example-app example-app.cpp)
target_link_libraries(example-app "${TORCH_LIBRARIES}")
set_property(TARGET example-app PROPERTY CXX_STANDARD 11)
example-app.cpp:
#include <torch/script.h> // One-stop header. #include <iostream>
#include <memory> int main(int argc, const char *argv[])
{
if (argc != )
{
std::cerr << "usage: example-app <path-to-exported-script-module>\n";
return -;
} torch::jit::script::Module module;
try
{
// Deserialize the ScriptModule from a file using torch::jit::load().
module = torch::jit::load(argv[]);
}
catch (const c10::Error &e)
{
std::cerr << "error loading the model\n";
return -;
} std::cout << "ok\n";
}
2. 生成makefile,编译:
mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=/path/to/libtorch ..
make
3. 运行程序:
./example-app <path_to_model>/traced_resnet_model.pt
输出ok,证明成功了。
理论上应该成功,然而实际上。。。
1. 修改后的cmake命令(修改2后,此处可以不修改)
cmake -DCMAKE_PREFIX_PATH=/home/xxx/libtorch/libtorch -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.0 -DCUDA_NVCC_EXECUTABLE=/usr/local/cuda-10.0/bin -DCUDA_INCLUDE_DIRS=/usr/local/cuda-10.0/include ..
2. 按照https://github.com/pytorch/pytorch/issues/15476#issuecomment-478293447,修改cuda库的相关路径,修改后的libtorch/libtorch/share/cmake/Caffe2/Caffe2Targets.cmake:
set_target_properties(torch PROPERTIES
INTERFACE_COMPILE_DEFINITIONS "_THP_CORE;AT_PARALLEL_OPENMP=1"
INTERFACE_COMPILE_OPTIONS "-Wall;-Wextra;-Wno-unused-parameter;-Wno-missing-field-initializers;-Wno-write-strings;-Wno-unknown-pragmas;-Wno-missing-braces;-fopenmp"
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include"
INTERFACE_LINK_LIBRARIES "protobuf::libprotobuf;c10;Threads::Threads;caffe2::mkl;caffe2::mkldnn;torch::cudart;c10_cuda;/usr/local/cuda-10.0/targets/x86_64-linux/lib/libnvToolsExt.so;/usr/local/cuda-10.0/targets/x86_64-linux/lib/libcudart.so;caffe2::cufft;caffe2::curand;caffe2::cudnn;/usr/local/cuda-10.0/targets/x86_64-linux/lib/libculibos.a;dl;/usr/local/cuda-10.0/targets/x86_64-linux/lib/libculibos.a;caffe2::cublas"
)
说明:实际上只需要修改2就可以了。修改之后,可以编译成功。如果修改了1,不修改2,编译时还是找不到cuda相关的那些库(原因是,cuda10的这些库不在默认的路径下,导致编译失败。。。)
(原)ubuntu中C++调用libotrch的更多相关文章
- (原)ubuntu中安装kate
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6339642.html 参考网址: https://kate-editor.org/build-it/# ...
- (原+转)Eclipse中Android调用OpenCv
大部分都是参考下面的网址,如果感觉看起来不舒服,可以直接查看原网址.最后遇到了一点问题: Description Resource Path Location Type E:/~\cod ...
- (原)caffe在ubuntu中设置GPU的ID号及使用多个GPU
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5884892.html 参考网址: http://caffe.berkeleyvision.org/tu ...
- (原)ubuntu中安装tensorflow
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6592052.html 参考网址: https://www.tensorflow.org/install ...
- ubuntu中的Wine详解
什么是wine?(转自百度百科,具体看百科) wine,是一款优秀的Linux系统平台下的模拟器软件,用来将Windows系统下的软件在Linux系统下稳定运行,该软件更新频繁,日臻完善,可以运行许多 ...
- 【转】ubuntu中的Wine详解
原文网址:http://blog.csdn.net/iwtwiioi/article/details/10530561 什么是wine?(转自百度百科,具体看百科) wine,是一款优秀的Linux系 ...
- [转]ubuntu中查找软件的安装位置
原博客地址:http://www.cnblogs.com/zhuyatao/p/4060559.html ubuntu中的软件可通过图形界面的软件中心安装,也可以通过命令行apt-get instal ...
- 【转】在Ubuntu中安装HBase
原博客出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/ 感谢! Posted: Apr 3, 2014 Tags: Hado ...
- 在Ubuntu中设置中文输入法
在Ubuntu中设置中文输入法 */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Consola,&quo ...
随机推荐
- 史上最全NOIP初赛知识点
CSP-J/S 第一轮知识点选讲 \(NOIP\)(全国青少年信息学奥林匹克竞赛)于2019年取消.取而代之的是由\(CCF\)推出的非专业级软件能力认证,也就是现在的\(CSP-J/S\).作为一名 ...
- 【电脑】分屏显示输入信号超出范围调整为XXXXXXX
选提示的那个范围就OK了. 注意:1.修改的是外界显示器,不是主显示器/笔记本. 2.修改外接显示器,不影响主显示器/笔记本
- [BJOI2019]奥术神杖(AC自动机,DP,分数规划)
题目大意: 给出一个长度 $n$ 的字符串 $T$,只由数字和点组成.你可以把每个点替换成一个任意的数字.再给出 $m$ 个数字串 $S_i$,第 $i$ 个权值为 $t_i$. 对于一个替换方案,这 ...
- Linux性能优化实战学习笔记:第二十六讲
一.案例环境描述 1.环境准备 2CPU,4GB内存 预先安装docker sysstat工具 2.温馨提示 案例中 Python 应用的核心逻辑比较简单,你可能一眼就能看出问题,但实际生产环境中的源 ...
- [LeetCode] 912. Sort an Array 数组排序
Given an array of integers nums, sort the array in ascending order. Example 1: Input: [5,2,3,1] Outp ...
- [LeetCode] 92. Reverse Linked List II 倒置链表之二
Reverse a linked list from position m to n. Do it in one-pass. Note: 1 ≤ m ≤ n ≤ length of list. Exa ...
- Computer-Hunters——冲刺总结
Computer-Hunters--冲刺总结 一.作业相关 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 hunter--冲刺总结 团队名 ...
- SpringBoot的ApplicationRunner
Article1 在开发中可能会有这样的情景.需要在容器启动的时候执行一些内容.比如读取配置文件,数据库连接之类的.SpringBoot给我们提供了两个接口来帮助我们实现这种需求.这两个接口分别为Co ...
- .NET Core:过滤器
过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码.功能上更贴合业务的使用过滤器. 在Startup中的ConfigureServices方 ...
- Go - chan 通道
概述 原来分享的基础语法的时候,还未分享过 chan 通道,这次把它补上. chan 可以理解为队列,遵循先进先出的规则. 在说 chan 之前,咱们先说一下 go 关键字. 在 go 关键字后面加一 ...