下载网址:Start Locally | PyTorch
当我们进入官网下载时,会有两个选项:
(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
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_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行
那么,我们的build命令如下:
mkdir build
cd build
cmake ..
cmake --build . --config Release
代码运行的命令如下:
./ttt