把写的 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

docker环境构建

拉取镜像

sudo docker pull dlckdgk/libtorch:frcnn # 拉取镜像 sudo docker run -it -d -v ~/Desktop:/workspace -p 9000:22 --name libtorchArm dlckdgk/libtorch:frcnn sudo docker exec -it libtorchArm bash

python环境

pytorch 官方给出的环境是用 conda 装的,然而悲剧的是官方并没有给出 aarch64 的安装文件,所以还是使用 pip 来安装。还有个问题是很多 python 库并没有发布对应架构下的包,好在编译 libtorch 需要的 python 环境较为简单。编译完之后导出 python 环境发现,编译 libtorch 必须的包应该只有 pyyaml(不太确定)。当然 cmake 和 gcc 等工具还是必须的。

安装 pyyaml 的命令:

apt install python3.7 python3-pip apt install vim cmake pip install pyyaml rm -rf /usr/bin/python /usr/bin/pip ln -s /usr/bin/python3.7 /usr/bin/python ln -s /usr/bin/pip3 /usr/bin/pip

编译libtorch

在编译之前可以使用 export 或者 cmake-gui 关闭一些不必要的编译选项来加快编译速度,

export USE_CUDA=False export BUILD_TEST=False cd pytorch mkdir build && cd build python ../tools/build_libtorch.py

整理libtorch

  1. 复制 pytorch 下 torch、caffe2、c10 以及 aten source 下的 ATen、TH 等文件夹到 libtorch/include 下,得到 libtorch 的 C++ 接口。
  2. 复制 build/lib 下编译好的库文件到 libtorch/lib 下。
  3. 复制 pytorch/torch/share/cmake 文件夹到 libtorch/share 下。

2. Libtorch1.8.0

$ git checkout v1.8.0 $ git submodule sync $ git submodule update --init --recursive $ pip install typing_extensions $ python tools/build_libtorch.py