libtorch是pytorch的c++接口,最近需要在linux上使用libtorch,在网上找的很多中文教程都是在windows下配置libtorch,于是自己研究了一番,下面就来讲讲怎么配置和使用。
参考的教程还是pytorch的官方教程:Installing C++ Distributions of PyTorch — PyTorch master documentation
示例代码 example-app.cpp,本代码生成了一个大小为2*3的随机矩阵,并通过标准输入输出流将其打印出来:
#include
#include
int main() {
torch::Tensor tensor = torch::rand({2, 3}); //生成大小为2*3的随机数矩阵
std::cout << tensor << std::endl; //标准输出流打印至屏幕
}
CMakeLists.txt文件,将c++文件example-app.cpp编译成为可执行文件example-cpp:
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)
所以当前目录的结构应该是:
example-app/
CMakeLists.txt
example-app.cpp
在当前目录下创建build文件夹,并使用cmake编译,此时我们有两种方法去使用cmake:
此方法需要你已经有pytorch,pytorch的安装方法有很多,conda安装,或者pip安装,官网教程Start Locally | PyTorch比较详细,在此不一一赘述。
$mkdir build
$cd build
$cmake -DCMAKE_PREFIX_PATH=`python -c 'import torch;print(torch.utils.cmake_prefix_path)'` ..
$make
官网首页Start Locally | PyTorch下载libtorch:
你可以点击链接直接下载,再传至linux服务器,或者直接在linux上用wget下载。官网上提供了两个版本(Pre-cxx11 ABI版本和cxx11 ABI版本),区别如下:Pre-cxx11 ABI是c++11之前的ABI,cxx11 ABI是c++11 的ABI,参考自YOLOv4在ROS-Melodic上的部署-libtorch(附源码,非Darknet)_地球被支点撬走啦的博客-CSDN博客_libtorch ros。实际使用时,两者区别很小,我们一般用cxx11 ABI版本。
注:ABI(Application Binary Interface)。
此处以pytorch1.13.1版本的CPU cxx11版本为例:
$wget https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-1.13.0%2Bcpu.zip
$unzip unzip libtorch-cxx11-abi-shared-with-deps-1.13.0+cpu.zip
unzip解压后你会得到一个名为“libtorch”的文件夹,您可以将您该文件夹移动到您想要的位置,或者就放着不动。假设我们移动到了/path/to/libtorch,那么我们编译的命令就为
$mkdir build
$cd build
$cmake -DCMAKE_PREFIX_PATH=/path/to/libtorch ..
$make
注:笔者在编译该版本(v1.13.1)的CUDA版本时编译提示报错,需要cudnn,安装cudnn后可以编译运行通过。
编译完我们即可在当前目录下得到可执行文件example-app,我们直接运行它便可得到结果
$./example-app
运行结果:
(base) root@test:/work/test/build# ./example-app
0.8859 0.1639 0.2670
0.3521 0.0139 0.4678
[ CPUFloatType{2,3} ]