转载请注明作者和出处: http://blog.youkuaiyun.com/john_bh/
1. 下载LibTorch
解压:
$ unzip libtorch-cxx11-abi-shared-with-deps-1.6.0+cu101.zip
查看解压的LibTorch文件:包括bin,include,lib,share,build-version文件夹和build-hash,build-version文件:
$ tree -L 1
- lib/文件夹:包含必须链接的共享库;
- include/文件夹:包含程序需要包含的头文件;
- share/文件夹:包含必要的 CMake 配置,以启用上面的简单find_package(Torch)命令。
解决 tree 命令 出现乱码:
$ alias tree='tree --charset ASCII'
2. 配置并测试
在 ~/libtorch/ 新建文件夹:example
$ mkdir example
$ cd example/
2.1 方法–官方cmake 例子
-
编写CMake构建配置,
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} $<TARGET_FILE_DIR:example-app>) endif (MSVC)
-
编写
example-app.cpp
程序,实现将简单地创建一个新的torch :: Tensor并将其打印出来,代码如下:#include <torch/torch.h> #include <iostream> int main() { torch::Tensor tensor = torch::rand({2, 3}); std::cout << tensor << std::endl; }
-
cmake 编译
构建应用程序,目录的布局如下:
在example/
文件夹中新建build
文件夹,用来编译程序:$ mkdir build $ cd build
执行编译命令:
#cmake -DCMAKE_PREFIX_PATH=/absolute/path/to/libtorch .. $ cmake -DCMAKE_PREFIX_PATH=/XXXX/libtorch ..
因为我使用了cuda,这里会有一个warning
,但是已经编译成功了,不用管它。其中/absolute/path/to/libtorch
是解压缩的LibTorch的绝对路径, 如果通过conda或pip安装了PyTorch,则可以使用torch.utils.cmake_prefix_path
变量查询CMAKE_PREFIX_PATH
。 在这种情况下,CMake配置步骤如下所示:$ cmake -DCMAKE_PREFIX_PATH=`python -c 'import torch;print(torch.utils.cmake_prefix_path)'`
然后执行命令生成可执行文件:
$ cmake --build . --config Release
最后执行命令测试:$ ./example-app
2.2 方法2
方法2和方法1的区别是,在cmakelists.txt
文件中配置了所需的环境,不用每次在命令中设置参数,并且这里libtorch和opencv4.3一起使用的,其中cpp文件依然使用example-app.cpp
,有的命令操作均在build 目录下进行,具体过程如下:
-
编写 CmakeLists.txt 文件,并配置路径:
cmake_minimum_required(VERSION 3.0 FATAL_ERROR) project(example) set(Torch_DIR /home/XXXXX/libtorch/share/cmake/Torch) set(OpenCV_DIR /home/XXXXX/opencv4.3_install/lib/cmake/opencv4/) find_package(Torch REQUIRED) find_package(OpenCV REQUIRED) message(STATUS "Pytorch status:") message(STATUS " libraries: ${TORCH_LIBRARIES}") message(STATUS "OpenCV library status:") message(STATUS " version: ${OpenCV_VERSION}") message(STATUS " libraries: ${OpenCV_LIBS}") message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}") add_executable(example example-app.cpp) #target_link_libraries(example ${TORCH_LIBRARIES}) target_link_libraries(example ${TORCH_LIBRARIES} ${OpenCV_LIBS}) set_property(TARGET example PROPERTY CXX_STANDARD 14)
-
执行编译
$ cmake ..
同样这里会有关于cuda的warning,不用管它。 -
make
$ make
-
执行测试
./example
参考链接: