树莓派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 即可。笔者目前测试的各功能正常,包括

踩坑过程碎碎念

笔者这一天试了许多种方案,踩了许多坑,最后才发现大佬提供的 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 构建出的自己的文件却不能正常运行。

Logo

更多推荐