PytorchをRaspberry pi 3B+にインストール(2021/2/13)

#目次
0.はじめに
1.環境
2.やり方
3.よくわからなかった方法
4.参考サイト
#0.はじめに
ラズパイにTensorflowを入れて、Optimizerの編集を行っていたのだが、自分の求めるOptimizerがPytorchで実装されているのを発見した。そのため、Pytorchをラズパイにインストールすることを思い立った

最初は[これ](https://medium.com/hardware-interfacing/how-to-install-pytorch-v4-0-on-raspberry-pi-3b-odroids-and-other-arm-based-devices-91d62f2933c7)を参考にしていたのですが、buildで３日以上かかってフリーズしたので、途中から[こちら](https://qiita.com/yyojiro/items/d91b02149aa6480ded80)を参考にしました。
このページの2.6以降は参考にしたページとほぼ同じです。

#1.環境
以下の環境で行った

|  デバイス |  Raspberry Pi 3B+  |
| ---- | ---- |
|  OS  | Raspbian buster  |
| python | 3.7.3 |
|  Pytorch  | 1.9  |

ラズパイのセッティングから始める人は
[ここらへんのサイト](https://www.indoorcorgielec.com/resources/raspberry-pi/raspberry-pi-os%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/)を参考にしてください

#2.やり方
##2.0 デフォルト　pythonを変更する
ラズパイはpython2系とpython3系が入ってます。デフォルトがpython2になってるので、変更しておきます。
後々、エラーが出るのを防ぎます。
[こちら](https://www.souichi.club/raspberrypi/python3-default/)を参考にしました。

```
cd /usr/bin
sudo unlink python
sudo ln -s python3 python
```

##2.1 Upgrade Update
まず、upgrade 及び　updateを行った

```
sudo apt update && sudo apt upgrade
```

1~2時間かかります。

##2.2 Swapfile
次にスワップファイルのメモリを増やします。
ラズパイはデフォルトで100MBしかないです。
どこのサイトを見ても2GBくらいに増やしているので、2GBに増やしましょう。
増やさないとメモリめちゃくちゃ使って時間かかりすぎるらしい...

[こちら](https://qiita.com/nyas/items/f4d0675061ee8cdcc3e7)を参考にしました。
etcの中にあるdphys-swapfileを編集します。
編集権限がないときはchmodで編集権限を変更してください。

```
cd /etc/
sudo chmod 7 dphys-swapfile
vim dphys-swapfile
```

更新部分は

```
#CONF_SWAPSIZE=100
```

の箇所を2048にします。

終わったらrestartします。

```
sudo /etc/init.d/dphys-swapfile restart
```
##2.3 依存情報
次に依存情報？パッケージをインストールします。
参考にしていたサイトが英語で記述されていてprerequisiteと書いてあったのですがこれ依存情報って意味あるんですかね...

```
sudo apt install libopenblas-dev libblas-dev m4 cmake cython python3-dev python3-yaml python3-setuptools
```
##2.4　Pytorch
いよいよPytorchをgitで入れます

```
mkdir pytorch_install && cd pytorch_install
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
```

めっちゃ時間かかりました。
別のことしてていいです。
2時間くらいかかります。
適当な電源でやってたら、ラズパイが落ちるのでちゃんとした電源でやってください。

```
export NO_CUDA = 1 
export NO_DISTRIBUTED = 1 
export NO_MKLDNN = 1 
export NO_NNPACK = 1 
export NO_QNNPACK = 1
```

環境変数の設定です。
いらないものを使わないように設定します。

パッチ当てをしておきます。

```
git submodule update --remote third_party/protobuf
```
##(不要の可能性あり)
このステップは不要の可能性があります。直接buildするときは必要ですが、./build_raspberrypi.shからビルドするので不要かもしれません(要検証)

この後、buildを行うのですが、typing_extensions の　moduleが入っていない場合は次の作業をしてください。(python3.8以上なら不要らしいです）
Rasbian OS Buster を使っているとpython3.7.3になっていると思うので、下の作業をしてください。
Rasbian OSにはpython3　と　python2が入っているので、pip3 の代わりにpipで入力してしまうと、python2の環境にインストールされるらしいので注意

```
sudo pip3 install typing_extensions
```

versionの確認はhome　ディレクトリまで戻ってから

```
python3 -V
```

で確認してください。(pytorchのディレクトリの中では確認できなかったため)

##2.5 スクリーンセーバーの設定(推奨)
先に、スクリーンセーバーを設定することをお勧めします。
デフォルトだと、10分でラズパイがスリープモードになります。

```
sudo apt-get install xscreensaver
```

インストール後に、ラズパイを再起動、メニューの設定の中にスクリーンセーバーが追加されます。
セーバーを無効にしておきましょう。

##2.6 PytorchのBuild
Buildを行います　
[こちら](https://qiita.com/yyojiro/items/d91b02149aa6480ded80)の記事にあるように、並列処理の箇所を編集します


[python3 setup.py build]

で行うと２晩以上かかります。なので、次のように編集して処理をします。

```
cd pytorch/scripts
sudo vim build_raspberrypi.sh
```

make -j 2を1に書き換えます。

```
make -j 1 || exit 1
```

これでビルドしましょう。

```
./build_raspbian.sh 
```

終わったら、/pytorchのディレクトリまで戻って、whlファイルからインストールします。

```
sudo python3 setup.py bdist_wheel
```
/pytorch/dist　の中にwhlファイルが出来上がります。

#2.7 ファイルの移動
なぜか、torchの参照ファイルがusr/local/lib/python3.7/dist-packages/torchの中にある必要があったので、usr/local/bin の中にあったtorch_shm_manager をusr/local/lib/python3.7/dist-packages/torch/binにコピーしました。
同様にlibtorchファイルも５種類くらい　usr/local/libからusr/local/lib/python3.7/dist-packages/torch/libに移動させました。

#2.8 確認

```
python3

import torch
torch.__version__
exit()
```
無事、pytorchが入っていることが確認できたと思います。
僕の環境だと1.9が入っていました。


#3 バージョンが色々合わなかったやつです。

https://medium.com/secure-and-private-ai-writing-challenge/a-step-by-step-guide-to-installing-pytorch-in-raspberry-pi-a1491bb80531

#4.参考サイト
[ラズパイのOSの入れ方が載ってるサイト](https://www.indoorcorgielec.com/resources/raspberry-pi/raspberry-pi-os%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/)

[スワップファイルの作り方を教えてくれたサイト](https://qiita.com/nyas/items/f4d0675061ee8cdcc3e7)

[入れ方を教えてくれたサイト](https://medium.com/hardware-interfacing/how-to-install-pytorch-v4-0-on-raspberry-pi-3b-odroids-and-other-arm-based-devices-91d62f2933c7)

[pytorchのgithub](https://github.com/pytorch/pytorch)

[デフォルトのpythonのバージョンを変える方法](https://www.souichi.club/raspberrypi/python3-default/)