Pytorch-ROCm DockerでPytorch-ROCmをビルドしてみる(ROCm2.4編）

https://qiita.com/T_keigo_wwk/items/42c018c202a58104da67
この続きといった感じです。

前回は動いてるのかどうか微妙・・と行った感じでしたが最近またDocker imageが更新されたりしたので実際動かしてみたいと思います。
ただこのDocker image、pytorchが元々インストールされているような便利な代物ではなく自前でビルドするのに必要な環境がそろってるだけでpullして即使えるような代物ではないと点で注意が必要です。
ビルドには半日近くかかります。

#ホストマシンでの作業
ここでは```~home/data```を作業ディレクトリにします

```
cd ~home/data
git clone https://github.com/pytorch/pytorch.git
cd pytorch
git submodule update --init --recursive
```

#Docker runさせる

```
$ sudo docker pull rocm/pytorch:rocm2.4_ubuntu16.04_pytorch 
$  docker run --name pytroch_rocm -it -v /home/***/data/:/data --privileged --rm --device=/dev/kfd --device=/dev/dri --group-add video rocm/pytorch:rocm2.4_ubuntu16.04_pytorch
```

以前とは異なり現在は一々gfx906などGPUアーキテクチャの指定が無用になりました
ここではホストマシンディレクトのマウントは```$HOME/data```をコンテナディレクトリの```/data```でしています。
***の部分はホームディレクトリの絶対パスなので```pwd $HOME```なりして入れてください

ここなどを参考に動かしていきたいと思います。
http://blog.gpueater.com/ja/2019/03/20/00013_rocm_pytorch/

最近までまともな公式ドキュメントはありませんでした最近ビルド方法が追加されたらしく今まで省略気味だったスクラッチでのビルド方法も一応載ってるようです。

https://github.com/ROCmSoftwarePlatform/pytorch/wiki/Building-PyTorch-for-ROCm





#コンテナ内での環境構築

```bash
　cd ~
 apt update
 apt upgrade
 apt install nano #viしかないため、viで十分です！って人は要らない
 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
 bash ./Miniconda3-latest-Linux-x86_64.sh 
#せっかくなのでbashrcにexport HCC_AMDGPU_TARGET=gfx906を追記しておくとよい(Vega20ならgfx906,Vega10ならgfx900,Polalisならgfx806)
 source .bashrc
 conda create -n py37 python=3.7
 conda activate py37
```

これでpy37環境を整えることができました。


#pytorch-rocmのビルド
なんでdockerコンテナでわざわざ一々buildせんといかんのだみたいな気持ちはあるんですが公式ドキュメントにそう書いてあるのでどうしようもないです。

```
cd /data/pytorch
 ./.jenkins/pytorch/build.sh 
```

大体5時間ほどかけて当方の環境ではビルドしました。とても時間がかかります


#pytorchのテスト

pip listを見てみます。

```
# pip list
Package    Version        
---------- ---------------
certifi    2019.6.16      
future     0.17.1         
numpy      1.16.4         
pip        19.1.1         
PyYAML     5.1.1          
setuptools 41.0.1         
six        1.12.0         
torch      1.2.0a0+2132ea1
typing     3.7.4          
wheel      0.33.4 
```

torchが入ったことがわかります。

テストスクリプトがコレで走るので走らせてみましょう

```
.jenkins/pytorch/test.sh
```

```
 pip list
Package         Version        
--------------- ---------------
absl-py         0.7.1          
attrs           19.1.0         
certifi         2019.6.16      
future          0.17.1         
grpcio          1.21.1         
hypothesis      4.24.6         
Markdown        3.1.1          
mypy            0.711          
mypy-extensions 0.4.1          
ninja           1.9.0.post1    
numpy           1.16.4         
Pillow          6.0.0          
pip             19.1.1         
protobuf        3.8.0          
PyYAML          5.1.1          
setuptools      41.0.1         
six             1.12.0         
tb-nightly      1.15.0a20190624
torch           1.2.0a0+2132ea1
torchvision     0.3.0a0+05ba3f5
typed-ast       1.4.0          
typing          3.7.4          
Werkzeug        0.15.4         
wheel           0.33.4 
```

追加で更にインストールされます

これでひとまずpytorchの環境構築は終了です。

ここらでタイミングでdocker commitなりしてコンテナを保存するとよいと思います。


#pip installなどで新規にコンテナ内でビルド済みpytorch-rocmをインストールする方法


```
conda activate hoge
```
など任意のpython環境を用意してからコンテナ内の

```
/pytorch/.jenkins/pytorch/test.sh
```
でbuild済みのtorchがインストールできます。