目标:在树莓派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安装见作者之前的一篇文章
- 编译安装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)’
折腾了大半天,还是放弃了这种编译安装的方式
- whl直接安装pytorch(强烈推荐)
先按照前面的方式建立conda环境
然后我找到了别人编译好的whl文件
(有64位的文件,我DNA动了,下次搞起)
通过pip直接安装!!!
安装成功!!!
人生苦短,能简单还是简单一点吧…
最后离开conda环境
source deactivate
tips:这里我都没有换国内的镜像源进行安装。一开始想换源,但是发现清华源的配置有点问题,很多列表找不到,而且系统默认源的网速还可以就没有管他了,有知道怎么配置的小伙伴可以评论留言告诉一下我。