下载libtorch && 使用libtorch执行一个小demo

一、下载libtorch 

下载网址:Start Locally | PyTorch

当我们进入官网下载时,会有两个选项:

下载libtorch && 使用libtorch执行一个小demo_第1张图片

(1) Pre-cxx11 ABI :这个库是与Pytorch直接相连的,也就是如果说你想要与Pytorch(python)代码有交互那么建议选择 Pre-cxx11 ABI这个

(2) cxx11 ABI : 这个库更多的是与C++的库相匹配,也就是说你的全部部署都在C++上,涉及的都是C++代码,那么更建议你选择这个

ref : As I downloaded libtorch, I have two choices: Pre-cxx11 ABI and cxx11 ABI. The question is that what is the difference between them? - C++ - PyTorch Forums

对于nts下载cuda版本且1.9以下的都可以,

为了配合nts并且单独使用libtorch时,下载 cXX11 ABI版本 

【ps】我的系统是Ubuntu

二、简单使用libtorch运行一个demo :

ref : Installing C++ Distributions of PyTorch — PyTorch master documentation

下载完libtorch对应的压缩包后将其接要到我们要写代码的位置

对于我来说,就是在桌面上建立了一个名为 libtorch_learn 的文件夹 -- 将libtorch压缩包解压到 这个 libtorch_learn 文件夹中

由于libtorch是一个库,我们想要使用它必须每次都动态链接,直白讲就是 每次我们修改了代码源文件 就要重新编译执行(build)一下 

如果想编译执行,那么就会涉及到cmake ,这里给出一个最最朴素无脑的的cmake方式,直接复制粘贴就可以了

【以后我会补充一下CMAKE的使用方法,现在不会先放着吧】

首先在我们的文件夹 libtorch_learn 目录下 ,有如下的目录布局:

libtorch_learn/
    CMakeLists.txt
    example-app.cpp

【注意】example-app.cpp是我们的源代码文件,该源文件的名字不可以更改

(因为CMakeLists.txt 中指明了时要编译一个叫example-app.cpp的源码文件,而我也不会CMake语法所以不会改)

example-app.cpp 内容如下:

#include 
#include 

int main() {
  torch::Tensor tensor = torch::rand({2, 3});
  std::cout << tensor << std::endl;
}

CMakeLists.txt 内容如下:

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

find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")

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

# The following code block is suggested to be used on Windows.
# According to https://github.com/pytorch/pytorch/issues/25457,
# the DLLs need to be copied to avoid memory errors.
if (MSVC)
  file(GLOB TORCH_DLLS "${TORCH_INSTALL_PREFIX}/lib/*.dll")
  add_custom_command(TARGET example-app
                     POST_BUILD
                     COMMAND ${CMAKE_COMMAND} -E copy_if_different
                     ${TORCH_DLLS}
                     $)
endif (MSVC)

==》接下来就是激动人心的build时刻:

首先我们在命令行中进入  libtorch_learn 文件夹

键入指令 mkdir build   //含义是在当前目录下新建一个文件夹 build

键入指令 cd build        //含义进入这个 build文件夹

键入指令 cmake -DCMAKE_PREFIX_PATH=/absolute/path/to/libtorch ..     //告诉编译器咱们解压的libtorch库在哪里  【这里有两个注意:(1)一定不要忘记键入后面的两个. (这俩点也是命令的一部分) (2)虽然官方文件说=右侧的值是解压的libtorch绝对路径,但是我拿相对路径试了一下也可以】

键入指令 cmake --build . --config Release      //cmake执行build操作

此时,我们的example-app.cpp 已经编译链接完成,可以执行,执行的命令是:./example-app

具体输出如下:

下载libtorch && 使用libtorch执行一个小demo_第2张图片

 


其实还有另一种相对简单的方式 build 编译执行:  【here】

文件组织形式如下:

libtorch_learn/
    CMakeLists.txt
    ttt.cpp

可以看出我现在源码命名为 ttt.cpp

内容如下:

#include 
#include 

int main() 
{

  torch::Tensor tensor = torch::eye(3);
  std::cout << tensor << std::endl;
  
}

CMakeLists.txt  内容如下:

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(ttt)

list(APPEND CMAKE_PREFIX_PATH "/home/zch/Desktop/libtorch")

find_package(Torch REQUIRED)


add_executable(ttt ttt.cpp)
target_link_libraries(ttt "${TORCH_LIBRARIES}")
set_property(TARGET ttt PROPERTY CXX_STANDARD 14)

这里注意以下,我们直接在CMakeLists.txt中给出了libtorch库的位置 (第4行)

(由于我把 libtorch 库解压了一份放在桌面上,依旧是要给出libtorch的绝对路径所以:list(APPEND CMAKE_PREFIX_PATH "/home/zch/Desktop/libtorch")

然后涉及源码文件名的有:第2行、9行、10行、11行

下载libtorch && 使用libtorch执行一个小demo_第3张图片

 那么,我们的build命令如下:

mkdir build

cd build

cmake ..

cmake --build . --config Release

代码运行的命令如下:

./ttt

下载libtorch && 使用libtorch执行一个小demo_第4张图片

 

 

你可能感兴趣的:(libtorch使用,libtorch)