树莓派4B (aarch64) 安装PyTorch 1.8 的可行方案
最终可行方案
试了一堆方案(源码编译、Fast.ai的安装文件等)之后,终于找到一个可行的方案。是在 PyTorch 官方讨论社区的一个帖子中找到的,在回复中一个大佬给出了自己在2021年1月为树莓派制作的一个 PyTorch 1.8 版本的安装方案。如果是想在树莓派上安装 PyTorch 的话,只需下载其中的一个 whl 文件,然后 pip install torch-1.8.0a0-cp37-cp37m-linux_aarch64.whl
即可。笔者目前测试的各功能正常,包括
- Python 接口
import torch
测试正常 - C++ 接口 Libtorch 构建自己的文件,并运行模型测试正常,关于 C++ Libtorch 的具体构建过程,可参考 PyTorch导出JIT模型并用C++ API libtorch调用。
踩坑过程碎碎念
笔者这一天试了许多种方案,踩了许多坑,最后才发现大佬提供的 whl 文件是最快、问题最少的方案。当然这是在笔者自己的设备的情况,以下提供几种尝试过,但是或多过少遇到了一些问题,有的最终行不通,有的则是功能不全的方案,记录一下,可能之后会用得到,也为看到本文的读者提供一点思路。有清楚下面这些问题的产生原因及解决方法的大佬也欢迎留言,感激不尽。
源码编译安装
以下源码树莓派编译安装 PyTorch 的步骤是翻译自 StackOverflow 的一个问答。
预先准备
扩展交换
首先,如果设备是树莓派3或者更低版本(也就是说,树莓派4及以上,内存3GB及以上可跳过此步),我们需要先扩展交换(sawp),因为编译安装的过程非常吃内存。
修改文件 /etc/dphys-swapfile
:
CONF_SWAPFILE=2048M
然后执行下面的命令来更新修改:
sudo dphys-swapfile setup
安装基本包
安装以下包:
sudo apt install build-essential make cmake git python3-pip libatlas-base-dev
Libtorch 的编译需要 CMake 版本 3.15 及以上,可以通过 cmake --version
来查看。如果低于 3.15 版本可以通过以下命令来安装新版本:
wget https://github.com/Kitware/CMake/releases/download/v3.18.0-rc1/cmake-3.18.0-rc1.tar.gz
tar -xzf cmake-3.18.0-rc1.tar.gz
cd cmake<version>
mkdir build
cd build
cmake ..
make
sudo make install
sudo apt remove cmake
sudo ln -s /usr/local/bin/cmake /usr/bin/cmake
sudo ldconfig
源码构建 PyTorch 并得到 ARM 后端的 Libtorch
再次提醒一下,如果内存小于3GB,则需要将交换增加到 2048MB。
安装所需的包:
sudo apt-get update
sudo apt-get install build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev
下载 PyTorch 源码:
git clone --recursive https://github.com/pytorch/pytorch --branch=release/1.6
cd pytorch
初始化所有子模块:
git submodule update --init --recursive
git submodule update --remote third_party/protobuf # 不然这里会有个bug
设置环境变量,将以下内容添加到 ~/.bashrc
文件:
export NO_CUDA=1
export NO_DISTRIBUTED=1
export NO_MKLDNN=1
export NO_NNPACK=1
export NO_QNNPACK=1
更新刚才的修改:
source ~/.bashrc
安装所需的 Python 依赖:
pip3 install setuptools pyyaml numpy
开始构建安装 PyTorch ,别忘了 -E
参数来确定环境变量都被用到,(可以歇会儿了,时间巨长):
sudo -E python setup.py install
检查安装是否成功:
python
import torch
torch.__version__
源码编译安装首先是被被github的网络状况恶心了大半天),因为要下一堆子模块,经常下着下着网络突然不行了,在下载完之后 sudo -E python setup.py install
,还是会遇到报错。
Fast.ai 安装文件
pip install torch -f https://torch.kmtea.eu/whl/stable.html
整个安装过程是顺利的,然后 import torch
测试也是没有问题的,成功后用 Libtorch CMake 构建自己的源文件也成功,但是运行时却报错 Illegal instruction (core dumped)
。
CMake Warning at /home/pisong/miniconda3/lib/python3.7/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:22 (message):
static library kineto_LIBRARY-NOTFOUND not found.
Call Stack (most recent call first):
/home/pisong/miniconda3/lib/python3.7/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:127 (append_torchlib_if_found)
CMakeLists.txt:4 (find_package)
看 CMake 的警告信息(虽然有这个警告,但是整个编译过程顺利完成了)应该是少库,笔者又源码编译了 kineto_LIBRARY
库之后还是不行,还是报 Illegal instruction (core dumped)
。
注意,此方法安装是正常的,在 Python 接口使用时也没遇到什么问题,但是用 Libtorch 构建出的自己的文件却不能正常运行。