Raspberry Pi4B (树莓派4B) 安装深度学习 (Pytorch) 框架
CITRON-打杂
2022年06月09日 18:28

前言(废话)

本人对于嵌入式的知识就是白纸一张,但无奈项目要用,这两天一直在配环境。各种试错下终于安上了。本篇类似备忘录,只是方便日后再用到时不用套娃开爆浏览器标签。

本片只安装基于python的深度学习框架,使用C++的祝愿你早日来教俺。

由于给的试验机已经安好debian系统,其他不是ubuntu和debian版本的linux系统命令会有所不同。

安装Python3

目前arm上的python已经支持到了3.9,直接上最新版。

代码块
Shell
自动换行
复制代码
sudo apt-get install python3
复制成功

如果默认安装 sudo apt-get install python 则会自动安装 python2.7。

如果已经安装过python2.7,那使用命令 python 会默认进入python2.7。只有使用命令 python3 才会进入 python3.9。

安装numpy

需要在安装pytorch之前安装numpy,不然安装的pytorch将无法支持numpy。

代码块
Shell
自动换行
复制代码
pip3 install numpy
复制成功

样需要使用 pip3 安装python3的库,直接使用 pip 将安装成python2.7的依

安装OpenCV

代码块
Shell
自动换行
复制代码
sudo apt-get install python3-opencv
复制成功

同理使用 sudo apt-get install python-opencv 将装成python2.7的依赖。

进入python3.9中测试:import没有问题,安装成功

安装Pytorch+torchvision

之前基本不会出啥幺蛾子,这里就比较头疼了。由于官方没有提供ARM架构的二进制安装包,就需要自己扒源码下来make了。有一种比较快捷的方式就是那别人make好的轮子下下来直接装,但问题就是你的系统和使用的python版本跟make轮子的人刚好对得上那没问题,对不上就GG。

这里放两个提供轮子的大佬,有需要的可以去下

https://github.com/nmilosev/pytorch-arm-builds

https://github.com/Qengineering/PyTorch-Raspberry-Pi-64-OS (只提供64位)

使用 uname -a 和 getconf LONG_BIT 命令可以查看系统版本和位数

代码块
Shell
自动换行
复制代码
uname -a
getconf LONG_BIT
复制成功

查看系统版本和位数

反正俺用现成的轮子装就是各种GG,最后无奈还是决定自己make

首先就是安装一堆make要用到的库

代码块
Shell
自动换行
复制代码
sudo apt-get install libopenblas-dev libblas-dev m4 cmake cython python3-dev python3-yaml python3-setuptools
复制成功

设置一下build的选项

代码块
Shell
自动换行
复制代码
export NO_CUDA=1
export NO_DISTRIBUTED=1
export NO_MKLDNN=1 
export BUILD_TEST=0
export MAX_JOBS=4
复制成功

像CUDA这些不支持的选项都需要设置成 false,由于是在 Pi4 上编译,有四核,MAX_JOBS 可以设置为4,如果是 Pi4 之前的树莓派版本就只有单核。

下载源码(Pytorch)

代码块
Shell
自动换行
复制代码
git clone https://github.com/pytorch/pytorch --recursive 
cd pytorch
git checkout v1.7.0
git submodule sync
git submodule update --init --recursive
复制成功

俺安装的是1.7.0版本,想要安装别的版本也可以。

开始build (Pytorch)

代码块
Shell
自动换行
复制代码
python3 setup.py bdist_wheel
复制成功

注意: 需要使用 python3

不过大概build到55%的时候俺也遇到了错误

代码块
clike
自动换行
复制代码
No matching function for call to 'google::protobuf::io::CodeInputStream::SetTotalBytesLimit(long long int, long long int)' 
复制成功

查了一下大概是build需要的 protobuf 的版本跟安装的版本不匹配,安装的 protobuf 版本过低,更新一下就行

代码块
Shell
自动换行
复制代码
wget https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.18.2.tar.gz #下载源码
tar -zxvf v3.18.2.tar.gz # 需要找到下载的路径,一般是在 /home/pi/Downloads
cd v-3.18.2/
sudo ./autogen.sh
sudo ./configure # 生成Makefile文件来build
sudo make 
sudo make install   
sudo ldconfig # 更新共享库缓存
复制成功

显示一下 protobuf 更新后的版本

显示对应版本,更新成功

之后再build应该就不会有问题了,就只是需要漫长的等待了,俺是放着build就溜回家了,第二天早上来看的时候已经build完了。网上大概说是需要4-5小时。

进行安装(Pytorch)

build完后生成的轮子在 dist 文件夹下,使用 pip3 安装轮子即可

代码块
Shell
自动换行
复制代码
cd dist/
pip3 install ./torch-1.7.0a0-cp39-cp39-linux_armv7l.whl
复制成功

安装生成的轮子

由于项目是视觉相关,所以也会用到torchvision, 安装方法和Pytorch一样,可以找现有的轮子,也可以自己make。

编译torchvision

代码块
Shell
自动换行
复制代码
git clone https://github.com/pytorch/vision
cd vision
git checkout v0.8.1
git submodule sync
git submodule update --init --recursive
python3 setup.py bdist_wheel
复制成功

torchvision 编译的时间很快,大概十来分钟就好,俺运气好没碰上啥error, 只能祝各位好运。

安装torchvision

和pytorch一样,生成的轮子也在 dist 文件夹中

代码块
Shell
自动换行
复制代码
cd dist/
pip3 install ./torchvision-0.8.0a0+45f960c-cp39-cp39-linux_armv7l.whl
复制成功

安装生成的轮子

最后进python3测试一下

import 没有问题,安装成功

至此就完事了,如果后续有新的问题还会跟进。

对自己要有清晰的认知