ROCmとCUDAの混在環境を作る際うまくいかなかったので教訓として残します。
CUDAは動いたのですがROCmはこの方法だと干渉してしまうのか原因が不明ですが動きません。
ググるとこれと大体同じやり方でCUDA環境を構築している人が多いように思われたので記事化しました。
またOpenCLに関してはコンパイル環境ではなくアプリケーションの実行環境です。
ポリシーですがここではUbuntu標準のnanoエディタを使いますのでそこは適時任意のエディタに読み替えていただくようおねがいします
#目次
・テスト環境
・環境構築
・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の標準ソフトでやりました
また予期せぬトラブルを避けるため、install時にサードパーティドライバのインストールなどはしない設定でinstallを行いました。
これは余り直接記事の本筋とは関係ありませんが日本語入力環境は
https://www.server-world.info/query?os=Ubuntu_16.04&p=japanese
以上を参考に構築しました。
##ドライバインストール
まずはカーネルバージョンを念の為確認、
~$ uname -a
Linux *** 4.15.0-45-generic #48~16.04.1-Ubuntu SMP Tue Jan 29 18:03:48 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
後にinstallするrcomでは4.13以降が必須なので事前に確認しておきます
次にCUDA環境を構築していきます。使用するCUDAバージョンはcuda9.2を使用します
CUDAのインストール方法は何通りも存在するので情報が錯綜して厄介な感じになっているのでこれ以外の方法もあることを
明記しておきます。
念の為これを忘れずにしてから本作業に入ります
環境構築の流れは
・ドライバーインストール
・CUDA tool kitのインストール
・ROCmのインストール
と言った流れになります
失敗要因としては下手にNVIDIAのGPUドライバーとtool kitのインストールを分離したところになります。
sudo apt update
sudo apt upgrade
次にNVIDIAのグラフィックドライバーを入れる準備をします
$ sudo lsmod | grep -i nouveau
nouveau 1724416 4
mxm_wmi 16384 1 nouveau
video 45056 1 nouveau
i2c_algo_bit 16384 2 amdgpu,nouveau
ttm 106496 2 amdgpu,nouveau
drm_kms_helper 172032 2 amdgpu,nouveau
drm 401408 9 drm_kms_helper,amdgpu,ttm,nouveau
wmi 24576 2 mxm_wmi,nouveau
こんな感じで出てきたらubuntuのnouveauドライバが生きてるのでこれを止めてからドライバのインストールをしたほうが無難
なようですのでドライバを止めに行きます
~$ cd /etc/modprobe.d/
この時blacklist.confというconfファイルが見つかりますがここでnouveauドライバを無効化するか、blacklist-nouveau.confを作って無効化する二通りのやりかたがあるみたいですがここではそのままblacklist.confに書きます
$ sudo nano blacklist.conf
$ sudo update-initramfs -u
$ sudo service gdm stop
blcaklist.confの最下行にblacklist nouveauと書いて保存して無効化します。
次に任意のディレクトリに戻ってドライバーのインストール作業をおこないます。
(この場合は~/driverというディレクトリを作って作業をおこないます)
また今回ダウンロードするのはversion410.93です。
$ cd
$ mkdir driver
$ cd driver
$ wget jp.download.nvidia.com/XFree86/Linux-x86_64/410.93/NVIDIA-Linux-x86_64-410.93.run
$ reboot
ここまでできたら一旦rebootしてログインする際は「Ctrl + alt + F1」でCUIに切り替えてログインして.runを入れた任意のディレクトリにcdして次のように.runを走らせます。
$ chmod +x NVIDIA-Linux-x86_64-410.93.run
$ sudo ./NVIDIA-Linux-x86_64-410.93.run
$ reboot
なんか青い画面が出てきたら基本的に全部OKを選択してエンターキーを押します。
再起動後立ち上げてみると
~$ nvidia-smi
Fri Feb 15 03:19:54 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.93 Driver Version: 410.93 CUDA Version: 10.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... Off | 00000000:05:00.0 On | N/A |
| 28% 54C P0 65W / 300W | 297MiB / 11175MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 922 G /usr/lib/xorg/Xorg 172MiB |
| 0 1549 G compiz 123MiB |
+-----------------------------------------------------------------------------+
と、出てきますここで疑問に思うのはCUDA version10.0と表示されるところです、なんせCUDA 9.2をこれから入れようとしてるのに勝手にCUDA10.0を入れたことにされてはたまりませんがこれの回答がstack overflowにありました
https://stackoverflow.com/questions/53422407/different-cuda-versions-shown-by-nvcc-and-nvidia-smi
cuda10.0をサポートするグラフィックドライバであると言う意味であって後方互換性は保たれていると言うことらしいです、それでもCUDA9.2と表示させたい場合はもっと古いドライバを探してあえて入れる必要がありそうです。
##CUDA-toolkitインストール編
nvccコンパイラなどのCUDAツール群がインストールされるパッケージを入れます。
以下のコマンドで入れようとするとどんなバージョンが入ってくるかわかったものではないので使用しないほうがいいです。
sudo apt install nvidia-cuda-toolkit
ではやっていきます
~$ mkdir cuda_tool_kit
~$ cd ./cuda_tool_kit/
~/cuda_tool_kit$ wget developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.2.148-1_amd64.deb
~/cuda_tool_kit$ sudo dpkg -i cuda-repo-ubuntu1604_9.2.148-1_amd64.deb
~/cuda_tool_kit$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
~/cuda_tool_kit$ sudo apt-get update
~/cuda_tool_kit$ sudo apt-get install cuda-9-2
でCUDA9.2がインストールできるはず、wgetで直接URLを叩くのではくデペロッパーのサイトから落としたい場合は
https://developer.nvidia.com/cuda-92-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1604&target_type=debnetwork
からどうぞ
このままだとパスが通ってないので使えませんのでパスを通します
export PATH=/usr/local/cuda-9.2/bin:${PATH}
~/.bashrcなどに以上を書いて保存して
~$ source .bashrc
以上をします
~$ which nvcc
/usr/local/cuda-9.2/bin/nvcc
~$ 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
これでパスが通ったことが確認できます。
次にROCm環境の構築をしていきますが環境が混在した時のパフォーマンスの変化などを調べたいのでluxmark(OpenCLによるレンダリングベンチマーク)でテストします
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
スコアとして21000前後でした、事前にVegaFEで測定したときは45000ぐらいあったのでUbuntu+OpenCL環境だとNVIDIAのGPUではパフォーマンスが出せないのかもしれません。
##ROCm環境構築編
次にAMDでCUDAのコードを変換して実行することで知られているROCm環境の構築をやっていきます。
$ 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'
$ reboot
再起動後立ち上がったら
$ sudo apt update
$ sudo apt-get install rocm-dev
$ sudo usermod -a -G video $LOGNAME
$ sudo apt install clinfo
次に.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
以上をbashrcに追加
次に
$ source .bashrc
$ reboot
以上でパスが通りますので再起動してます.
$ sudo /opt/rocm/bin/rocminfo
hsa api call failure at line 900, file: /data/jenkins_workspace/compute-rocm-rel-2.1/rocminfo/rocminfo.cc. Call returned 4104
となってしまいます。
うまく行った時と手順が若干違うようにそのせいかなと思います。のでこうやるとCUDAしか何故か動かないですよって話です。
成功編も同日掲載予定です。
参考サイト
https://developer.nvidia.com/cuda-92-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1604&target_type=debnetwork
NVIDIAのデペロッパー向けのサイトです
#成功編
最近アクセスがあってうまく行ってない方をRTしてる方が居ましたので掲載します。