Ubuntu16.04LTS環境でCUDA9.2+ROCm2.1環境を構築してAMD/NVIDIA混成GPU環境を作る

一回環境構築に失敗しましたが今回は成功したので失敗記事と比較しながらやっていきたいと思います。
途中まで大体同じです

目的としてCUDA9.2とROCm2.1の混在環境をクラッシュ等させずに構築するまでもっていくこと。
そこからtensorflowなどの構築ができるようにすることです。

※　2019/07/04に追記
現時点でこの方法でインストールされるROCm　versionは2.5なので気をつけてください。




#目次
・テスト環境
・環境構築
・OpenCLベンチマーク LuxMark(OpenCLレンダリング）
・TensorFlow環境編
・各種運用手法



#テスト環境

CPU Xeon E5-2603 v4
MB  msi-x99 Gaming7
RAM DDR4-2400 32GB
GPU0 NVIDIA GTX1080Ti
GPU1 AMD Vega Frontier Edition
OS Ubuntu16.04.5 LST kernel version 4.13
テスト実行日　2019 02/14-02/16

以上のような環境においてテストを行った

#環境構築
##OSインストール
http://releases.ubuntu.com/16.04/ubuntu-16.04.5-desktop-amd64.iso
からisoを落として任意のUSBメモリにライティングします。
自分はubuntuの標準ソフトでやりました
![Screenshot from 2019-02-14 17-59-09.png](https://qiita-image-store.s3.amazonaws.com/0/232732/b6e5e66b-c834-8d88-a957-5139bb0fc4c0.png)
また予期せぬトラブルを避けるため、install時にサードパーティドライバのインストールなどはしない設定でinstallを行いました。


##CUDA環境構築

```bash
sudo apt update
sudo apt upgrade  
```


環境構築の流れは

・ドライバー+CUDA tool kitのインストール
・ROCmのインストール

大まかにいうとこんな感じです、デペロッパーからtool kitをダウンロードしてインストールするときGPUドライバーも一緒にインストールされるので大変便利です。

ここではcuda-repo-ubuntu1604_9.2.148-1_amd64.debをダウンロードして使います
※これはUbuntu16.04LSTでないとインストールできないパッケージなので今更16.04は古いと思う人も多いと思うので気をつけてください。
https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu

ココらへんから該当するパッケージを探してください。

```
$ wget developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.2.148-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1604_9.2.148-1_amd64.deb
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda-9-2
```

以上でドライバとtool kitが入ったはずです
~/.bashrcに以下のパスを追加して

```
export PATH=/usr/local/cuda-9.2/bin:${PATH}
```

次に再起動して

```
$ nvidia-smi
```

これでドライバとGPU名が表示されたらCUDAインストールはひとまず成功と言えます。
 CUDA Version: 10.0 って表示されてる問題は以下の通りになります。


https://stackoverflow.com/questions/53422407/different-cuda-versions-shown-by-nvcc-and-nvidia-smi

大まかな意訳をするとCUDAのランタイムAPIのバージョンとnvidia-smiで表示されるバージョンはドライバAPIのサポートするバージョンであって別物。ランタイムAPIがちゃんと9.2でインストールされてても関係ないとのことです。


```
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Tue_Jun_12_23:07:04_CDT_2018
Cuda compilation tools, release 9.2, V9.2.148
```

確かにrelease 9.2となっています。


##ROCm環境構築
CUDAより正直楽です

```
$ sudo apt update
$ sudo apt dist-upgrade
$ sudo apt install libnuma-dev
$ wget -qO - http://repo.radeon.com/rocm/apt/debian/rocm.gpg.key | sudo apt-key add -
$ sudo sh -c 'echo deb [arch=amd64] http://repo.radeon.com/rocm/apt/debian/ xenial main > /etc/apt/sources.list.d/rocm.list'
$ sudo apt update
$ sudo apt install -y rocm-dkms
```

これをして
.bashrcに

```
export ROCM_PATH=/opt/rocm
export HCC_HOME=/opt/rocm/hcc
export HIP_PATH=/opt/rocm/hip
export PATH=$HCC_HOME/bin:$HIP_PATH/bin:$PATH
```
パスを通して再起動したらROCm環境自体は構築終了です。


ひとまず今回はOpenCLによるベンチマーク（luxmark)をやって終わりにします。

luxmarkは任意のディレクトリで

```
$ wget https://github.com/LuxCoreRender/LuxMark/releases/download/luxmark_v3.1/luxmark-linux64-v3.1.tar.bz2
$ tar xf ./luxmark-linux64-v3.1.tar.bz2 
$ rm luxmark-linux64-v3.1.tar.bz2
$ cd ./luxmark-v3.1/
$ ./luxmark
```
以上でベンチマークが実行されます

マルチGPU設定（GTX1080TI+VegaFE)にて
![Screenshot from 2019-02-15 21-56-58.png](https://qiita-image-store.s3.amazonaws.com/0/232732/8fad6c5c-9cda-39f2-77e0-aa815dd68e46.png)


VegaFEにて
![Screenshot from 2019-02-15 22-05-26.png](https://qiita-image-store.s3.amazonaws.com/0/232732/b31b6358-63da-9ddb-1097-f112e0b056e0.png)

ちょっとスコアが悪い気もしますが一応UbuntuでもAMD,NVIDIA混在環境が可能であることがわかりました
今後の進展としてはTensorFlowやHIP-CUDA間の互換などをテストしていきたいと思います。





#引用
https://qiita.com/_JG1WWK/items/56d897dadaae7db47f57
Ubuntu16.04とCUDA9.2とROCｍの両方の実行環境を構築しようとし失敗した話

https://developer.nvidia.com/cuda-92-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1604&target_type=debnetwork
CUDA Toolkit 9.2 Download


https://qiita.com/shrimp_f/items/0c2909e3d958540af570
ubuntu16.04にてcudaのインストール方法

https://qiita.com/bohemian916/items/46df7c50c7001bc56239
CUDAインストールの罠

http://swytel.hatenablog.com/entry/2018/06/25/153153
Ubuntu 16.04LTSにCUDA 9.2を入れた時のメモ


http://ogimotokin.hatenablog.com/entry/2018/07/05/093438
【環境構築】Ubuntu16.04＋GTX1080＋Cuda9.2＋cudnn7.1＋ROS Kineticのワークマシン導入


自己記事の参照もいろいろ多くなりましたが、他皆様の参考資料が多くて助かりました
感謝申し上げます。




2019/02/16 タイトルの誤字を修正