Raspberry Pi 3B+ に　pytorch 1.9を入れる(2021/2/16)

#注意

この記事は未完成です。

torch_visionの入れ方がわかりません
誰かわかったら教えてください。
buildの際に次のエラーメッセージがでます

```
/home/pi/vision/torchvision/csrc/ops/autograd/deform_conv2d_kernel.cpp:3:10:
fatal error: torch/autograd.h:そのようなファイルやディレクトリはありません
```

また、一部ファイルを移動させる必要があります。
改善策がわかれば教えてください。

#目次
0.忙しい人向け(調整中)
1.はじめに
2.準備
3.入れ方
4.参考サイト

#0.忙しい人向け(調整中)
torch_visionなんていらない！versionも1.9でいい！！って人はwhlファイルをgithubにあげたので、インストールして使ってください。
torchvisionは必要って人はブラウザバックしてください。
このページでは解決できませんでした。
version　もっと新しいのがいいって人は、１〜３までを参考にして入れてください。

#0.1 whlファイルからインストール

```
sudo git clone https://github.com/Naoya-Yokota/pytorch1.9forraspberrypi
cd pytorch1.9forraspberrypi
sudo pip3 install torch-1.9.0a0+1903b32-cp32-cp37m-linux_armv7l.whl
```

pytorchが入ります。
ただ、案の定、一部ファイルが入りません。
それらは別に持ってくる必要がありそうです。

```
cd /usr/local/lib/python3.7/dist-packages/torch
sudo git clone https://github.com/Naoya-Yokota/rasfiletorch
```
rasfiletorchの中身のbinとlibを取り出して、torchの下に展開します。


#1.はじめに
前回、無事にpytorchを入れることができたのですが、typing_extensionsに関する箇所が不明だったので検証しました。
その上で、改めてまとめます。

今回の環境は次の通り

|  デバイス |  Raspberry Pi 3B+  |
| ---- | ---- |
|  OS  | Raspbian buster  |
| python | 3.7.3 |
|  Pytorch  | 1.9  |
#2準備
##2.1 スクリーンセーバー
とりあえず、前回と同じでスクリーンセーバーを設定することをお勧めします。
デフォルトだと、10分でラズパイがスリープモードになります。

入れてない人は

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

##2.2 モジュールの追加
typing_extensionsを追加します。
python 3.8以上ならおそらく不要です。
ファイル中の

```
from typing_extensions import ~~
```
の箇所をfrom typingにすれば動作すると思います。

raspbian buster　ならpython 3.7.3なので次の処理を行ってモジュールを追加します。

```
sudo pip3 install typing_extensions
```

##2.3 スワップファイルの設定
ビルドに大量のメモリを消費するので、あらかじめ使用できる量を増やしておきます。

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

```
#CONF_SWAPSIZE=100
```

の箇所を2048にします。

終わったらrestartします。

```
sudo /etc/init.d/dphys-swapfile restart
```

#3 pytorchのインストール
##3.1 git hubからダウンロード

それなりに時間がかかります

```
sudo git clone --recursive https://github.com/pytorch/pytorch
```

##3.2 build 
ここが一番時間がかかります。

まずはビルドに必要なパッケージを入れます。

```
sudo apt-get install libopenblas-dev cython  libatlas-base-dev m4 libblas-dev python3-dev cmake python3-yaml
```

不要なものを使わないように設定します。

```
export NO_CUDA = 1 
export NO_DISTRIBUTED = 1 
export NO_MKLDNN = 1 
export BUILD_TEST=0
export MAX_JOBS=2
```

バッチ当てを行います。

```
git submodule update --remote third_party/protobuf
```

先人に習って並列処理の箇所を編集します。


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

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

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

いよいよbuildを行います。

```
./build_raspbian.sh 
```
半日くらいかかるので気長に待ちましょう。

##3.3 インストールする

whlファイルから作ります
pytorchのファイルに入ってsetup.pyからパッケージを作りましょう。

```
cd pytorch
sudo python3 setup.py bdist_wheel
```

出来たらpytorch/distに移動してインストールします

```
cd dist
sudo pip3 install torch-1.9.0a0+1903b32-cp32-cp37m-linux_armv7l.whl
```

##3.4 ファイルの移動
なぜかPATHがうまく通らない箇所があるのでファイルを移動します。

```
cd  /usr/local/lib/python3.7/dist-packages/torch
sudo mkdir lib
sudo mkdir bin
```

次に、なぜか/usr/local/libに大量にいる　libtorchを移動させます。

```
cd /usr/local/lib
sudo cp libtorch_global_deps.so /usr/local/lib/python3.7/dist-packages/torch/lib
sudo cp libtorch_python.so /usr/local/lib/python3.7/dist-packages/torch/lib
sudo cp libshm.so /usr/local/lib/python3.7/dist-packages/torch/lib
sudo cp libtorch.so /usr/local/lib/python3.7/dist-packages/torch/lib
sudo cp libc10.so /usr/local/lib/python3.7/dist-packages/torch/lib
sudo cp libtorch_cpu.so /usr/local/lib/python3.7/dist-packages/torch/lib
```

次に/usr/local/binの中にいるtorch_shm_manager を移動させます

```
cd /usr/local/bin
sudo cp torch_shm_manager /usr/local/lib/python3.7/dist-packages/torch/bin
```

これでpytorchが動くはずです
確かめましょう。

```
python3 
import torch
torch.__version__
```

無事にバージョンが表示できたと思います。

#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/)