树莓派4开箱及PyTorch配置记录

开箱

定了一个多月的树莓派4 4G版终于到货了,这一代接口上有些变化,4核A72的CPU发热也大很多,因此在等到货的过程中我就买了:

  1. 水晶壳,主要是为了上风扇,到处搬的时候也要安全些;4代我打算先测试AI性能,被动散热就先不弄了
  2. A1的TF卡,目前Linux还不支持A2的新增指令,加上A2的卡现在太贵,必要性不大;U1、U3这些无所谓,主要是随机读写性能
  3. 5V 3A的电源和Type-C的线,目前4代供电设计有Bug,最好用傻充、傻线,我就箱子里翻了个小米手机头子
  4. Micro HDMI转HDMI线,这个最关键

到手就开箱拍照了,Made in UK,感觉做工还是可以的。主要的芯片都贴在正面,散热相对好处理些,室温28度,有风扇无散热片低负载的情况下CPU在49度左右,感觉还是比较高的。

第一感觉,开机速度非常快,大概十来秒就显示桌面了,之前心心念念的USB-Boot也没有多大必要了,微型U盘随机读写也快不到哪儿去。手上没有4K屏,2K带鱼屏是可以直接点亮的。系统方面目前就只有Raspbian可以用,Ubuntu的适配还需要等待。多媒体方面,测试了下B站是可以流畅播放的,各种日常操作都是比较顺滑的,TF卡的读写性能也完全够用,装apt包、编译不存在IO瓶颈。

目前发现的主要问题是蓝牙适配MX Anywhere 2s鼠标还有些问题,会导致整个蓝牙挂掉,但是这个鼠标在Ubuntu下也有问题,应该不是树莓派的锅。折腾Linux还是搞套无线键鼠,比蓝牙稳定得多。

配置

  1. 软件源

首先不知什么原因,即使挂了代理Raspbian的源依然是龟速,需要切换到国内镜像,参考这里,把stretch改成buster就可以了。

2. 远程访问

直接在树莓派配置工具里点开ssh和vnc就可以了,人生苦短,有现成的就不要去折腾,即使我们玩树莓派本身就是折腾。访问vnc需要装realvnc的客户端,还是很稳定的,最近两年tightvnc变得很难配,realvnc是个不错的替代。

4代的WIFI是支持5G的,要注意设置地区,我的路由器为了支持Switch使用了日本地区和信道,同样需要在树莓派配置工具中配置。2.4G没有这个问题,但是容易和2.4G无线键鼠、蓝牙之类的相互干扰。

3. Berryconda

不建议安装Miniconda的armv7l二进制包,它的包都很久没有更新了。直接使用Berryconda,armv7l版本可以在rpi4上正常使用,下载并安装:

wget https://github.com/jjhelmus/berryconda/releases/download/v2.0.0/Berryconda3-2.0.0-Linux-armv7l.sh
chmod a+x Berryconda3-2.0.0-Linux-armv7l.sh
./Berryconda3-2.0.0-Linux-armv7l.sh

然后就可以建立虚拟环境:

conda create -n pytorch python=3.6

4. Pytorch

接下来参考这里Pytorch官方源代码安装说明官方Caffe2树莓派编译脚本,开始安装Pytorch。

首先是apt,能够在apt装的包就尽量不要用pip或者conda了,综合知乎文章和Caffe2官方脚本,目前找不到libatlas-dev,就不装了,Caffe2官方脚本也没有要这个。其他的像glog之类,是可以选装的,后面setup.py如果检测到就会自动使用:

sudo apt-get install libopenblas-dev m4 libblas-dev cmake

接下来安装Python依赖。apt、pip、conda三者是有一定重叠的,遇到问题可以灵活调整,反正目标就是满足依赖的版本要求。要小心虚拟环境有可能读不到apt安装的全局site,尽量使用conda和pip。

conda install opencv numpy pyyaml cython

Berryconda的numpy是1.15版本的,有个Bug会导致torch不能用,这里我们再用pip装一个1.16(是的,2个版本可以共存):

pip install numpy==1.16

接下来获取pytorch源码并切换到1.2.0分支,关闭不需要的依赖,具体的开关可以查看setup.py,里面有非常详细的说明。不用担心fpu配置,Pytorch会自动识别并添加相应的配置项:

git clone https://github.com/pytorch/pytorch.git
cd pytorch
git checkout v1.2.0
git submodule update --init --recursive
export NO_CUDA=1
export NO_DISTRIBUTED=1
export NO_MKLDNN=1
export NO_TEST=1

好了,可以开始编译wheel:

python setup.py bdist_wheel

1.2.0使用的protobuf有一个Bug会导致报undefined reference to `__atomic_fetch_add_8’的错误,参考Pytorch Issue,升级protobuf到最新即可解决:

git submodule update --remote third_party/protobuf

执行这一句之后重新编译就可以了。

由于有了4G内存,并行编译再也不用担心爆内存了。4个核心全开,整个编译过程中内存占用最多1.6G左右(所以2G版的应该也可以)。编译速度挺快的,用了NO_TEST,2个多小时搞定。编译的时候,有风扇无散热片的CPU在59度左右,感觉还好。

最后就是安装编译好的wheel包了:

cd dist
pip install ./torch-1.2.0a0+8554416-cp36-cp36m-linux_armv7l.whl

我已经在树莓派4上跑了一个人脸检测+跟踪的网络,由于模型比较大,每一帧需要500ms左右(显卡上几毫秒)。接下来就是找一些适合移动端的网络来试试了。

    原文作者:xiedidan
    原文地址: https://zhuanlan.zhihu.com/p/79807661
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞