首先我要说一下为什么选择OrangePi为开发板来进行深度学习环境的搭建。其中最重要的问题就是价格,因为OrangePi便宜,相较于树莓派而言那几乎是差了将近一倍的价格。其次也是想要验证一下在这类ARM开发板上安装Tensorflow会遇到什么样的问题。这个安装方式也可能用于NanoPi、RK3399等ARM开发板上。
注:本篇的内容均为从零开始搭建会遇到的问题,请注意软件的版本,以及保证连着网运行。
硬件:OrangePi Zero Plus
CPU:全志H5 Cortex-A53四核64位
内存:512MB
存储卡:32GB(千万不要用16GB的卡)
用16GB的卡有在用一段时间后很大概率会报read-only system,我也不知道为什么会这样,也没有仔细尝试8GB的4GB的,但是16GB的确实有这样的问题,而且很多牌子我都试过,如果有哪位大神知道请来解答一下,谢谢。
注:CPU建议贴上散热片使用,温度过高CPU会降频导致性能下降。
系统:Armbian Bionic(没有图行界面的啊,要用自己装)
版本:Armbian_19.11.3_Orangepizeroplus_bionic_current_5.3.9
关于Armbian怎么使用,我在这就不做介绍了,毕竟网上有很多。我用的是putty通过ssh连接,初始的用户名为root、密码1234,一进去会先让你创建一个用户,我是以这个非root用户来完成所有操作的。
很显然Orangepi Zero的内存很小,内存会是安装Tensorflow最大的障碍,强烈吐槽一下为什么OrangePi不给Zero出1G内存版的,这对跑神经网络会有很大帮助。
先进行apt软件包的更新,因为我们之后很多python库会用apt安装。
sudo apt-get update
sudo apt-get upgrade
系统自带的Python版本为3.6.8,由于这个版本不方便我们周后在github上下载Tensorflow的安装包,因此先将Python通过apt升级至3.7。
sudo apt-get install python3.7 python3.7-dev python3-distutils
直接到Python官网上先下载一个pip的压缩包和一个setuptools的压缩包。下载好之后传到OrangePi中,可以用U盘拷进去,也可以用FileZilla传进去,rsync同步进去都可以,只要能放进去什么方法都行,后面下载Tensorflow也都一样。
pip下载地址:https://pypi.org/project/pip/#files
setuptools下载地址:https://pypi.org/project/setuptools/#files
我们先来解压安装setuptools,在终端下用unzip来解压。
unzip setuptools-42.0.2.zip
解压出来后cd到解压后的文件夹里编译安装。
sudo python3.7 setup.py build
sudo python3.7 setup.py install
pip的安装也类似。
tar -xvzf pip-19.3.1.tar.gz
tar解压出来后cd到文件夹里用python3.7编译安装。
sudo python3.7 setup.py build
sudo python3.7 setup.py install
其实这个pip应该也可以apt安装的,方法不唯一,安装完成后pip -V查看一下版本和所对应的python编译器对不对。
我们直接到gihub上下载编译好的Python安装包。
项目地址:https://github.com/lhelontra/tensorflow-on-arm
下载地址:https://github.com/lhelontra/tensorflow-on-arm/releases/
下载版本:tensorflow-1.14.0-cp37-none-linux_aarch64.whl(v1.14.0-Buster)
选择aarch64,架构问题我也不懂,反正我都试过,选这个就对了。
这里先不考虑下载2.0,因为2.0版本与之前的版本有很多兼容性问题,我们依旧选择老版本。
这里就到了最重要的一步,也是问题最多的一步了。
我们先开始用pip安装一下试试。
pip install tensorflow-1.14.0-cp37-none-linux_aarch64.whl
这里我们会碰到第一个需要解决的错误。
这个问题一开始我以为是我的sd卡满了,但df看了一下有的是空间而且我一张32GB的卡怎么可能不够。在查了“一堆”资料后,其实是tmp空间不足导致的,具体细节我也没细究,总之大概就是编译的空间不够造成的。
我们在当前目录下创建一个tmp文件夹来解决。
mkdir /home/username/tmp
export TMPDIR=/home/username/tmp
source ~/.bashrc
经常编译这种大文件的话可以把这个加到环境变量里,我们接着安装Tensorflow试试,这个时候应该可以正常安装了,我们可以再开一个终端用htop看看CPU、内存使用率。
现在理想状态我们耐心的等待一会儿应该就可以完成了。
出了个权限问题,我们加上–user。
pip install --user tensorflow-1.14.0-cp37-none-linux_aarch64.whl
好的接着等待一段时间,结果等了很久都没有反应,仔细观察发现界面不动了卡住了没反应了。如果开了htop可以很直观的看到内存全满了。
htop界面上显示Mem内存和Swp交换分区已经爆了,其实这种情况在任何linux上都有可能发生,原因就是编译的时候内存不足导致系统直接当掉。
内存我是没办法加了,当然也可以试试把内存吹下来换个1GB的,但是实在是太穷了内存颗粒我也买不起。硬的不行就只能考虑软的了,我们考虑增加swap分区来解决这个问题,接着查阅资料来解决这个问题。
重新上个电进入系统,把之前tmp的那段再打一遍,毕竟我还没有加到环境变量里。
关于swap分区给多少的问题,其实没有明确的规定,只要够用就可以了,我们这里给个1GB,当然更多也可以啦,毕竟32GB的卡很充裕。
dd if=/dev/zero of=/home/username/swap bs=1024 count=1024000
/sbin/mkswap /home/username/swap
sudo /sbin/swapon /home/username/swap
改完我们打开htop看看swap分区是不是变大了,这个在重启后同样就无效了,可以写个脚本开机运行一下后面两句,第一句dd开辟空间就不用一直做了。
这里我们可以发现这个swap空间实际上是累加上去的,现在我们继续安装Tensorflow。
这里报了一个h5py的安装错误,这个时候我们可以先用apt安装一下试试。
sudo apt-get install python3-h5py
如果报了其它包的安装错误都可以考虑用apt来安装试试,之后继续安装Tensorflow。
这个时候我们可以打开python3.7来看一下Tensorflow是否正常使用,我们import一下tensorflow。
python3.7
import tensorflow
tensorflow.__version__
在import tensorflow的时候会跳出来一大堆东西,不用在意不是报错,最后显示的就是对应的安装版本,这里我安装的是1.14.0。
至此Tensorflow在OrangePi的安装就告一段落,我们接着开始Keras的安装。
实际上安装完Tensorflow后,Keras的安装就没什么难度了。这里我们先用apt的方式来试试能否安装。
sudo apt-get install python3-keras
安装完成之后,我们同样可以打开python3.7,import keras看看版本。
import keras
keras.__version__
apt安装的版本这里为2.1.1,Keras和Tensorflow其实都是很吃版本的,不同版本的函数名以及内部结构可能都有使用上的差异。
模型的训练不可能放在嵌入式设备上完成,总是要移到性能更强的电脑上或服务器上的,这时候我们就要确保训练时的Keras版本和运行在OrangePi上的版本一致。
我的电脑上装的是Keras的2.2.4版本,因此这个时候我们可以通过pip来改变我们的Keras版本。
pip install --user keras==2.2.4
安装完后我们再打python3.7看一下是否改变了。
又又又又报错了,这个时候我们其实就可以优先考虑到还是版本问题导致的,我们可以尝试重新安装一下scipy或者升一下级。
pip install -U scipy
结果还是凉了。。。。。
那只能接着找资料了,看来是少了一些库,错误里也显示了没找到lapack/blas。我们用apt来安装。
继续升级scipy仍然会报一个错误,我们还是查询资料来解决,大致是报一个PEP517的错误,具体是啥我也不清楚,总之我们pip装一下试试。
pip install --user pep517
装完后我们再试试升级scipy。
pip install -U --user scipy
这回终于升级成功了,好了我们再次打开python3.7查看Keras是否能使用了。
import keras
keras.__version__
我在之前在一个安装了环境的系统上安装Tensorflow的时候出现过一次numpy的版本问题,同样是需要将numpy升级来解决。具体的解决办法点这。详细的我不过多描述了。
写了这么多,其实真的安装完才发现整套流程并不困难,但是一下小坑还是比较多的。希望这篇的内容可以帮助大家建立嵌入式系统下的AI环境,开发更强大的功能。
[1] https://blog.csdn.net/qq_29837161/article/details/83616364
[2] https://blog.csdn.net/bi_hu_man_wu/article/details/61416306
[3] https://www.cnblogs.com/zhangtianyuan/p/8143558.html
[4] https://www.cnblogs.com/UFO-blogs/p/9435549.html
[5] https://stackoverflow.com/questions/55962678/installing-chatterbot-but-getting-error-could-not-build-wheels-for-spacy-which
[6] https://www.jianshu.com/p/ac43a8175cc5