在树莓派上编译安装pytorch

在树莓派上安装最新版的pytorch不是一件容易的事情,因为pip只提供了一个旧版本的pytorch。
通过pip搜索torch
pip search torch
我们可以发现有如下两个树莓派的版本

  1. rpi3.torch (0.1.0)
  2. torch-raspi (0.4.0)

这两个版本,一个是0.1.0, 另外一个是0.4.0,都是比较老的版本。
目前pytorchv1.0.1已经出来,还整合了caffe2。因此想安装新版本的pytorch,我们只能自己在树莓派编译pytorch。

从pytorch源上进行编译安装

前提条件

首先sd最好是16Gb或者32Gb的,然后安装好系统后,对系统进行更新
sudo apt update && sudo apt upgrade
sudo apt install vim

增加交换区的大小到2G

首先通过命令打开交换区设置文件
sudo vim /etc/dphys-swapfile
接着找出常量CONF_SWAPSEIZE,把后面的默认的100改成2048。
然后执行以下命令激活交换文件系统:
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
接着安装依赖包
sudo apt-get install libopenblas-dev cython3 libatlas-dev m4 libblas-dev cmake

创建虚拟环境

这个时候我们可以用venv创建需要的虚拟环境,把pytorch跟其他python包隔离。可以通过一下命令:
python3 -m venv pytorch
`source pytorch/bin/activate
这个时候我们可以在命令窗口的提示符前面见到(pytorch),这样代表我们已经进入了虚拟环境了。

下载pytorch源代码

这个时候我们可以用git下载源代码了。
git clone --recursive https://github.com/pytorch/pytorch
打开pytorch安装目录:
cd pytorch
切换到我们想安装的版本,例如v1.0.1:
git checkout tags/v1.0.1 -b build
git submodule update --init --recursive

编译pytorch

这个时候我们就可以开始编译pytorch。
但是在编译pytorch之前,我们还是需要安装依赖的python包。安装依赖包:
pip install -r requirements.txt

设置环境变量

这一步非常重要,如果环境变量设置不正确,编译的过程会报错。例如:
Failed to run 'bash tools/build_pytorch_libs.sh --use-cuda --use-nnpack --use mkldnn --use qnnpack caffe2'
我们可以利用export命令,设置所需要的环境变量,例如我们把cuda支持去掉,因为树莓派不支持cuda。
export NO_CUDA=1
export NO_DISTRIBUTED=1
export NO_MKLDNN=1
export NO_NNPACK=1
export NO_QNNPACK=1
接着我们就可以利用命令:
python setup build
对pytorch进行编译,这个过程需要需要耗费几个小时。
当编译完成后,我们就可以利用命令进行安装了
python setup install
这样pytorch就完成安装了。

测试pytorch

现在我们再虚拟环境中,利用命令
python
就可以进去python的编译环境。
然后输进去下面的命令

import torch
a = torch.rand(5,3)

我们一般可以得到下面的结果

tensor([[0.4512, 0.6844, 0.2541],
[0.8479, 0.5679, 0.2709],
[0.2783, 0.6527, 0.8900],
[0.6391, 0.4194, 0.3088],
[0.7420, 0.7410, 0.4173]])

由于现在caffe2已经合并到pytorch,所以安装pytorch后,同时也安装了caffe2。
我们这个时候可以通过下面这段代码测试一下caffe2

from caffe2.python import workspace, model_helper
import numpy as np
x = np.random.rand(4, 3, 2)
workspace.FeedBlob(“my_x”, x)
x2 = workspace.FetchBlob(“my_x”)
print(x2)

这个时候我们可以得到下面到结果

[[[0.81060838 0.35865418]
[0.35568901 0.67212295]
[0.1332663 0.47914204]]

[[0.85494785 0.84664708]
[0.27500796 0.9747805 ]
[0.24910547 0.15672073]]

[[0.28877039 0.07946231]
[0.89988456 0.64606068]
[0.84067924 0.02291551]]

[[0.09549854 0.90223063]
[0.62950545 0.8257564 ]
[0.39615143 0.07896499]]]

你可能感兴趣的:(树莓派)