把写的libtorch调用模型的程序移植到了下Ubuntu下发现没有问题,libtorch提供了预编译好的库。放到基于Arm的国产主机上就提示libtorch.so不是动态库文件,需要从源代码编译libtorch。不过没啥难点,踩坑文。
获取源码
git clone https://github.com/pytorch/pytorch --recursive && cd pytorch
git checkout v1.2.0 # 真的勇士敢于在master分支下编译
#下载编译需要的子模块
git submodule sync
git submodule update --init --recursive
python环境
pytorch官方给出的环境是用conda装的,然而悲剧的是官方并没有给出aarch64的安装文件,所以还是使用pip来安装。还有个问题是很多python库并没有发布对应架构下的包,好在编译libtorch需要的python环境较为简单。编译完之后导出python环境发现,编译libtorch必须的包应该只有pyyaml(不太确定)。当然cmake和gcc等工具还是必须的。
安装pyyaml的命令:
pip install pyyaml
不使用tools下的脚本而直接用cmake来编译的话可能python环境都不需要了...
编译libtorch
在编译之前可以使用export或者cmake-gui关闭一些不必要的编译选项来加快编译速度,类似:
export USE_CUDA=False
export BUILD_TEST=False
官方提供了一键式编译工具,在pytorch/tools/build_libtorch.py。只需要运行:
#pytorch$
mkdir build && cd build
python ../tools/build_libtorch.py
就会在build下生成对应的文件,我们需要的动态库文件libtorch.so在build/lib/下。
整理libtorch
- 复制pytorch下torch、caffe2、c10以及aten\source下的ATen、TH等文件夹到libtorch/include下,得到libtorch的C++接口。
- 复制build/lib下编译好的库文件到libtorch/lib下。
- 复制pytorch/torch/share/cmake文件夹到libtorch/share下。
得到的libtorch主要结构:
libtorch.
├─include
│ ├─ATen
│ ├─c10
│ ├─caffe2
│ ├─TH
│ ├─THCUNN
│ ├─THNN
│ └─torch
├─lib
└─share
└─cmake
├─ATen
├─Caffe2
├─Gloo
└─Torch
如果你需要pytorch编译可以参考一下这篇
ps:还是对CMakeLists不太熟啊。