RadeonだけどMLがしたい!(DirectMLで遊んでみる)

基本的に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で一発ですね。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip install tensorflow-directml==1.15.5
pip install tensorflow-directml==1.15.5
pip install tensorflow-directml==1.15.5

次にKerasがないとダメな人なのでKerasを入れます。TensowFlowが1.15.5なので、それに合わせてKerasは2.3.1が良いようです。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip install keras==2.3.1
pip install keras==2.3.1
pip install keras==2.3.1

あとはよく使うものも適当に入れます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip install matplotlib opencv-python matplotlib pydot
pip install matplotlib opencv-python matplotlib pydot
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 を入れて比較してみます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)