Pytorch1.0终于发布了,我们来上手一下它的C++API

本文介绍 Pytorch1.0终于发布了,我们来上手一下它的C++API

本文由在当地较为英俊的男子金天大神原创,版权所有,欢迎转载,本文首发地址 https://jinfagang.github.io 。但请保留这段版权信息,多谢合作,有任何疑问欢迎通过微信联系我交流:jintianiloveu

我们向来不玩虚的,对于刚刚发布的pytorch 1.0版本,让我们看看它的C++ api上手体验如何。本次新的api,除了一个1.0的版本以外,就是torch.jit 以及 c++ 前端的支持。二者都是为了工业部署加速用的,既然pytorch有了好用的c++前端,是不是可以考虑抛弃tensorflow了呢?太年轻了,我们还是看看实际表现如何把。

Pytorch C++版本的安装

其实我一直很好奇用c++写深度学习框架是一种怎么样的体验,现在刚好有机会,那么就直接开始吧。首先呢,这个C++的库被放在一个叫做 LibTorch 的库中。如果你从官网看的话,你会发现,貌似现在只支持cpu版本的c++库,不过这也很正常,cpu毕竟还是工业部署的主流。

1.0版本更新了之后就是不一样,官网都焕然一新了,以前的GFW的问题不知道有没有解决,先把这个LibTorch下载下来:

wget https://download.pytorch.org/libtorch/nightly/cpu/libtorch-macos-latest.zip

如果你不想下载源码,你也可以下载shared library的共享链接版本,这样下载:

wget https://download.pytorch.org/libtorch/nightly/cpu/libtorch-shared-with-deps-latest.zip
unzip libtorch-shared-with-deps-latest.zip

此时我们就可以开始写一个小程序了,C++的。我们这里使用源码编译,不适用动态链接库。从下载的文件来看,最上面的文件是静态链接库,并没有源代码,说明核心的东西还是没有完全的放出来。我们先看看,如果用CMake来写一个小程序。

CMake设置

我们现在看看cmake如何设置,简单的来说,只需要几行代码:

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(example-app)
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)

我们再来看看文件结构,首先我们已经下载好了 libtorch 这个文件夹,保持它不要动,另外新建一个 example-app 文件夹,并且在里面新建几个文件:

.
├── CMakeLists.txt
├── build.sh
└── example-app.cpp

其中 cpp文件写入几行简单的c++代码:

#include <torch/torch.h>
#include <iostream>
int main() {
at::Tensor tensor = torch::rand({2, 3});
std::cout << tensor << std::endl;
}

最后我们写一个build.sh在编译,注意,我们直接指定 刚才的libtorch的路径即可。

mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=../../libtorch ..
make

直接运行, 好吧又是库的问题:

CMake Error at CMakeLists.txt:5 (find_package):
By not providing "FindTorch.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Torch", but
CMake did not find one.
Could not find a package configuration file provided by "Torch" with any of
the following names:
TorchConfig.cmake
torch-config.cmake
Add the installation prefix of "Torch" to CMAKE_PREFIX_PATH or set
"Torch_DIR" to a directory containing one of the above files. If "Torch"
provides a separate development package or SDK, be sure it has been
installed.
-- Configuring incomplete, errors occurred!
See also "/Volumes/xs/tmp/libtorch_learn/example-app/build/CMakeFiles/CMakeOutput.log".

十分蛋疼了。我去pytorch提个issue,先挖个坑,回头过来填。