SANMAN

思いつきの考えを垂れ流すブログ

MicrosoftがFPGAでDeepLearningしてた

Alteraのリリースノートで知ってはいたが、Microsoftリサーチのホワイトペーパーを発見した。2015年にUCLAXilinxFPGA使って同様のこと(CNNの実装)をしているが、それより3倍くらい性能良い模様。

http://research.microsoft.com/pubs/240715/CNN%20Whitepaper.pdf

DeepLearningの一種Convolutional Neural NetworkをFPGAというか、自社製FPGAボード「Catapult」上にのせた。 このCatapultについては以前記事にした。 tkysktmt.hatenablog.com

Deep Learningについて

自分がどう考えているか簡単に。
Deepな層構造(3層以上)をもったNeural Networkを、どうにかして学習させることができたものをDeep Learningと呼ぶ。どうにかして学習させるその工夫はいろいろあり、現在のホットな研究対象だが、基本的には古い教科書にのっているNeural Networkを巨大にしたもの。そんなわけでDeep Learning自体が具体的なアルゴリズム1つを指すわけではなく、DeepなNeural NetworkをLearningさせる手法すべてに適用される呼称。

で、Deep Learning以前から、Neural Networkは生物のそれと同じく、Neuronモデルをたくさん用意すれば表現力が増すと考えられてきたのだが、実際はせいぜい3層ちょいが扱える限界だった。深い多層Neural Netをつかうには、ニューラルネットワーク職人が丹精込めてネットワーク構造や、パラメーター調整するしかなかった。 それが、近年のハードウェア性能の向上&学習アルゴリズムの改良により、実用的な限界を突破。昔からの予想通りNeruronモデルが増えることで表現力が増し、いままでコンピューターにできなかったことが出来るようになってきて注目を浴びている。

話題になるタイプのDeep Learningの特徴としては、「低層の自己組織化」が主流だと思う。特に汎用目的の場合、ネットワーク構造は全結合か結合なしで、内容に応じて適切なネットワーク構造が構築される、生物っぽいのが望まれていると思う。与えられた時空間な刺激からいかにして判別しやすいパターンを抽出してもらうかいった感じ。

CNNとはなにか

Deep Learningの一種で、画像認識に向いたDeepなNeural Network。端的にいうと人の視覚野のV1,V2の出力結果のようなものを得られるような工夫が低層でされている。

以下が詳しい。 vaaaaaanquish.hatenablog.com

どうやったか

こんな感じ。この次層のために再循環させるアイデア自体は自分も思いついていたが、ちゃんと実装されるとは。

ポイントは以下の3つ。

  1. 実行時に、複数の層構成をサポートすることができるソフトウェア構成エンジン。 これはハードウェアの再コンパイルを必要としない。これははハード的にはどの層にもなれる汎用のNeural Net(PEアレイ)を用意しておき、シーケンスによってソフトウェア的にカーネルの重みを変更するというものだろう。

  2. 効率的なデータバッファリング方式とオンチップの再配信ネットワーク。オフチップメモリへのトラフィックを最小限に抑えることができる。この仕組みと1の再構成の仕組みがあることで、1チップ上にDeepなNeural Network実現できる。

  3. 容易にスケールアップすることができるPE(処理要素)を空間的に分散配列。1000ユニットとかいける。PEの中身、特に演算部はUCLAとそんな変わらないと思う。 以下のような小規模Neural Netを表現可能にした演算ユニットだと思われる。

一般的なオペレーション

このCNNアクセラレータは、連続して複数の畳み込みの層を処理できる。 初期層の間に、入力画像ピクセルがローカルのDRAMからストリーミングされ、その後、マルチバンクの入力バッファに格納される。 これらの入力は、3Dコンボリューションのステップで独立した内積演算を実行するため、複数のPEのアレイにストリーミングされる。 トップレベルコントローラは、シーケンスシング、アドレッシング、各PEアレイへのデータの配信を調整する。 蓄積された結果は、特殊なネットワークオンチップに送信され、入力バッファへ再循環させる。これは次層の計算でつかうため。

Microsoftの結論

結果は有望。
専用ハードウェアを構築することで、現在のGPUで構築するよりも低消費電力で高レベルの性能を達成することができることを示している。

f:id:tkysktmt:20150613160456p:plain

今回はCatapultベースなのでStratix Vだったが、今後は最新のFPGA(Arria10やStratix10)に今回のデザインをマッピングすることによる、さらなる性能の向上。 また、Catapultの利点である多数のFPGAを組み合わせを用い、トレーニングと評価の並列化を検討しているなど。

ほか

Alteraのリリースノートの日本語版。GPUより3倍の電力効率だとか。Arria10の浮動小数点演算ユニット推し。 ホワイトペーパーやMSのブログではまだだったみたいだが、もうOpenCL使ってArria10のES品で実証したっぽい? 次のCatapultにはArria10載るんだろうか。

https://www.altera.co.jp/about/news_room/releases/2015/corporate/nr-microsoft-cnn-arria10hardfloatingpoint.highResolutionDisplay.html

あと、結論で使っている表で比較されているBest prior CNN on Virtex 7 485T [5]UCLAによる実装例。こちらはCNNをFPGAにインプリする場合のデザインについての報告。具体的で詳しい。

http://cadlab.cs.ucla.edu/~cong/slides/fpga2015_chen.pdf

おわりに

自分の思いつきアイデアをベースに読んでいるので、仕組みについては間違った解釈かも。あとでちゃんと調べてみる。

Alteraが本気の買収されたし、チップとしてのFPGAだったり、DRPだったりが、電気代も気にする方面から注目されそう。GPU勢は電気代無視して性能向上に励んでほしい。 IntelはAlteraと協業してたころからXeonFPGA統合するって言ってたのと、あつかいやすさからOpenCLなどといった形で広まってくのかね。もしかしたらコンパイラディレクティブで、「この処理は高位合成によりPLD領域にマップ」みたいな感じなこともできるのかな。