樹莓派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 installsudo 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 構建出的自己的文件卻不能正常運行。