Bootstrap

树莓派下安装pytorch(踩坑记录)

目标:在树莓派4b上安装conda运行pytorch

硬件平台:树莓派4b
操作系统:Raspberry Pi OS with desktop
环境:pytorch

1. 安装系统镜像
下载树莓派镜像
在这里插入图片描述
作者安装的为如图所示的版本
注意下载32位版本的(64位确实快,但是因为作者想在Berryconda下安装pytorch,而berryconda和miniconda只有32位版本,所以只能重装一次。。。虚拟环境的好处我就不多说了,自己体会多了就知道 /手动狗头)
使用

tips:sd卡格式化
使用SDFormatter,其他方式格式化不完全或不成功

系统烧录
采用Win32DiskImager进行写入,可以参考作者的另一篇文章

开机配置ssh和vnc
烧录完成后别急着启动树莓派,在boot目录下添加两个文件ssh(启动ssh服务)和wpa_supplicant.conf(开机自动连wifi)
在这里插入图片描述
wpa_supplicant.conf的内容如下:

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={	
         ssid="wifi名称"
         psk="密码"	
         key_mgmt=WPA-PSK	
         priority=1
}
#ssid:网络的ssid
#psk:密码
#priority:连接优先级,数字越大优先级越高(不可以是负数)
#scan_ssid:连接隐藏WiFi时需要指定该值为1

然后安装系统启动树莓派,最好连接串口看一下树莓派有没有正常启动(没连上wifi就用不了ssh了)
正常启动结果:
在这里插入图片描述
更新一下软件目录

sudo apt-get update

vnc安装见作者之前的一篇文章

  1. 编译安装pytorch(该方式强烈不推荐,坑太多,还是把时间放在有意义的地方吧…可以了解一下,不想看可以直接看步骤3)
    参考了知乎博主的文章

首先安装berryconda

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

如果提示这个错误说明你安装的是64位版本,需要重新安装树莓派系统
在这里插入图片描述
正常安装结果:
在这里插入图片描述
创建pytorch虚拟环境

conda create -n pytorch python=3.6

可以在树莓派上安装一些依赖

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

进入刚刚创建的pytorch环境

source activate pytorch

在这里插入图片描述
conda环境中安装Python依赖

conda install opencv cython numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing

ninja找不到可以用pip安装

pip install ninja

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

pip install numpy==1.16

接下来获取pytorch源码并切换到1.2.0分支,关闭不需要的依赖,具体的开关可以查看setup.py,里面有非常详细的说明。

git clone https://github.com/pytorch/pytorch.git
cd pytorch
git checkout v1.2.0
git submodule update --init --recursive

在执行git submodule update --init --recursive命令时可能会出现错误

fatal: clone of 'https://chromium.googlesource.com/linux-syscall-support' into submodule path '/home/pi/pytorch/third_party/breakpad/src/third_party/lss' failed Failed to clone 'src/third_party/lss' a second time, aborting Failed to recurse into submodule path 'third_party/breakpad在这里插入图片描述
这个错误网上的通用方法是:

git clone https://chromium.googlesource.com/linux-syscall-support

git后先在rdm/3rdparty/gbreakpad/src/third_party目录下创建lss目录,然后复制linux_syscall_support.h到lss目录下,但是在我这里还是会报错,显示无法递归
解决方案:
这里我采用电脑设置代理下载然后传到树莓派上的方法
首先电脑挂上代理,然后让git走代理的端口

git config --global http.proxy "localhost:port"
port根据自己的端口号进行修改

重新执行

git submodule update --init --recursive

就不会报错了

编译wheel

python setup.py bdist_wheel

结果还是出现了问题
在这里插入图片描述

In file included from /home/pi/pytorch/third_party/onnx/onnx/defs/shape_inference.h:4,
                 from /home/pi/pytorch/third_party/onnx/onnx/defs/schema.h:24,
                 from /home/pi/pytorch/caffe2/onnx/torch_ops/./schema.h:4,
                 from /home/pi/pytorch/caffe2/onnx/torch_ops/defs.cc:4:
/home/pi/pytorch/third_party/onnx/onnx/proto_utils.h: In function ‘bool onnx_torch::ParseProtoFromBytes(Proto*, const char*, size_t)’:
/home/pi/pytorch/third_party/onnx/onnx/proto_utils.h:34:66: error: no matching function for call to ‘google::protobuf::io::CodedInputStream::SetTotalBytesLimit(long long int, long long int)’

折腾了大半天,还是放弃了这种编译安装的方式

  1. whl直接安装pytorch(强烈推荐)

先按照前面的方式建立conda环境
然后我找到了别人编译好的whl文件
(有64位的文件,我DNA动了,下次搞起)
通过pip直接安装!!!
在这里插入图片描述
安装成功!!!
人生苦短,能简单还是简单一点吧…

最后离开conda环境

source deactivate

tips:这里我都没有换国内的镜像源进行安装。一开始想换源,但是发现清华源的配置有点问题,很多列表找不到,而且系统默认源的网速还可以就没有管他了,有知道怎么配置的小伙伴可以评论留言告诉一下我。

;