基本的にAMDが多い私のクライアント環境ですが、ことマシンラーニングにおいて、CUDAがサポートが基本になっていますよね。
TensorFlowやPyTorchでは標準のGPUサポートはCUDAが対象つまりNVIDIAのGPUが必要です。
以前はKeras+PlaidMLを使用していた時期もありましたが、どうにも更新が最近されていないのもあり、結局GeForceに移行してTensorFlowGPUを使っていたりしてました。
最近、DirectMLの存在を知りました。GPUを使うのにCUDAではなく、DirectX12を使うことでNVIDIA以外のGPUが使えるみたいです。今どきのGPUなら大抵DirectX12はサポートしてるはず。つまりRadeonでもマシンラーニングができるチャンスです。
LinuxだとROCmの選択肢もありのようですが、正直使ったことはないのでよくわからないです。
DirectMLはTensorFlow1.15.5のようです。TensorFlowは2しか触ったことがなく、ちょっとこの辺は要勉強かな。
とりあえず動かしてみるのを目的にします。
まずPythonはPython 3.6.8を以下からダウンロードしてインストール。
https://www.python.org/downloads/release/python-368/
次にTensorFlow-DirectMLをインストール。現時点で最新版の1.15.5を入れます。このバージョンからPRE-RELEASEじゃないようです。pipで一発ですね。
pip install tensorflow-directml==1.15.5
次にKerasがないとダメな人なのでKerasを入れます。TensowFlowが1.15.5なので、それに合わせてKerasは2.3.1が良いようです。
pip install keras==2.3.1
あとはよく使うものも適当に入れます。
pip install matplotlib opencv-python matplotlib pydot
とりあえずこれだけで、Radeonを使ってTensorFlowを動かせます。
同一ハードを使った検証はまだできてないのですが、おんなじモデルで動かした感じ PlaidMLに比べて初期化は早く、メモリの使用量は少ないように思えました。そもそもVRAMの違う環境なのでその影響の可能性はありますが……。
実行速度はVega8(512 SP)&DirectMLで5.5Sec、RX5700XT(2560 SP)& PlaidML で1.54Sec程度でした。クロックはVega8が約800MHzで RX5700XT は1.6GHz以上あるので、SP数の差とクロックの差を考えると DirectML 悪くなさそうに思えます。
次はRX5700XTの環境にも DirectML を入れて比較してみます。