THE長文日記

長文とか短文とかのクレームは一切受け付けません

AMDのGPUで深層学習もバッチリできることがわかった


 連日の講演と取材対応とで、ここんとこ物理的に身体がオフィスにいられる機会が少なくて、せっかくVertex.aiの人たちが実装してくれたConv2D_transposeを試すことができなかったのだが、バグ報告したら、なぜかMacでは新しいバージョンがうまくビルドできなくてその原因を調べているとのこと。


https://i.gyazo.com/05012e77a0caf261cf9696ec8f7f5b37.png


 とはいえ、UbuntuAMD上のOpenCLで動けば問題ないのでとりあえず動かしてみたところ・・・バンザイ!大成功!


 というわけで、NVIDIAのチップにかわってAMDのチップでも深層学習が実用的に動かせることがわかりましたのでお知らせいたします。


 いろんな実装を動かしたいガチの研究者とかkerasではやりたいことができないという方以外はAMDでもぜんぜん問題ありません。


 ちなみにちょっと論文の実装をgithubから落としてきて試したいけどNVIDIAの売り上げに貢献するのは嫌だ、という人は都度課金のこれ(https://www.floydhub.com)を使うと良いみたいです。


 Vertex.aiの凄いところは単にOpenCLでTensorFlowのエミュレート(というかKerasのバックエンドのエミュレート)をしてるだけでなく、中間言語であるTile Codeを介することで、相手のアーキテクチャにあわせて異なるOpenCLコードを吐けることです。Tile Codeのプログラミング自体もけっこう興味深いので挑戦してみたい気がします(Tile codeについてはここ https://github.com/plaidml/plaidml/wiki/PlaidML-Op-Tutorial)。


 だからHIP-TensorFlowみたいにCPUより遅いOpenCLみたいなことになるわけでもなく、ただ普通に速い。


 逆に言えばMXNetとかChainerとかもTile Codeで書けば普通に速くできるわけで。パッと見たところ、TileCodeは動的にネットが変更されてもうまく動きそうな感じなので、TensorFlowが動的グラフに対応したことだし、kerasも動的グラフに対応したら自動的に対応してくれるといいな。ただ、いまのところ動的グラフがないと絶対実装できないもの、というのがあんまり例がないんだよね。


 あ、あとはまだRNNに対応してない。これは使う人少なくないと思うのでRNNの対応は急いで欲しいな



 ちなみにAMDのドライバのセットアップはNVIDIAのCUDAに比べると10000%くらい簡単です。

 いろいろ選択肢があるので最初は混乱するけど、基本的には AMDGPUPROをダウンロードしてきてインストールするだけ。


http://support.amd.com/en-us/kb-articles/Pages/AMD-Radeon-GPU-PRO-Linux-Beta-Driver–Release-Notes.aspx


 あとはplaidmlをインストールしてplaidml-setup動かせば動きます。


 混乱して野良OpenCLドライバのCloverとか入れるとおかしくなるので、間違って入れてしまった人はリムーブしておきましょう。


 何が入っているかはclinfoで確認できます。Cloverと出てたらicdとかをリムーブ。


 とりあえず以前は動かなかったACGANが動いたので、いろんなネットを一通り検証してみます

(※1/28追記)

 その他の動作報告

https://i.gyazo.com/c9fb2b1f319315c6ac298d75fad8eaab.jpg

 ExamplesのCifer10のResNet20は動作しました。

 Neural Style Transferは動作するものの動作が怪しい(なんか画像は生成されるが間違ってる)

 variational autoencoderはメモリ不足で実行できませんでした(というのは僕が入手できたAMDのチップが4GBしかなかったのでこれは仕方ない)。VegaならいけるだろうけどVegaの在庫がなくて買えない


 結論としては、今のところ一般画像分類などのタスクにおいて学習とインファレンス用としては全く問題なし(とりあえずチームとしてもまずはそこをひとつの目標にしていると思われる)。


 SSDとかR-CNN的なやつはまだ試してない

 YAD2KのYOLOが動けばとりあえず実用上問題ないかしらん