Python
機械学習
DeepLearning
Chainer
TensorFlow

Chainer2.0が近日リリース またそれとは別の大規模分散処理に対応したChainerもリリースされるらしい

More than 1 year has passed since last update.

日経ITPro 2017/01/27リリースの記事より
PFNの深層学習フレームワーク「Chainer」が大幅な高速化へ、分散処理に対応


この一年半ほどChainerを個人(学習とちょっとした研究)用に、また直近一年程度は業務案件でTensorFlowを使ってきました。

度々、この二者の違いは何かと考えましたが、Chainerが劣ってしまう点は複数ノードでの分散処理に対応していないことでした。
と言っても底辺フリーランサーが関わる案件では分散処理が必要になるほど大規模なデータセットに触れることはまずありませんが。

少なくとも32ノード/128GPUに対応するようです

image
(上記リンク先より転載)

1ノード/1GPUで20日以上を要した学習が32ノード/128GPUでは、なんと4.4時間まで短縮されたとのこと。
「20日以上」を20日として計算しても実に109倍の高速化に相当します。

また128GPUで1GPUに対し109倍の性能を実現したということは、実効効率は85.22%に達しており、異常と言って良いほどの高効率を達成しています。

自称底辺フリーランサーですが大規模分散処理だけは得意分野なので、ちょっとだけ語ってしまうとデータの関連性がな場合でも、なかなか85%なんて効率は出せません。しかも比較的関連性がである機械学習でこの効率を達成するのは快挙と言って過言で無いと思います。

余談ですが分散処理系システムでは「4つで3つ」なんて言葉をよく使うのですが、これは4台で3台分の性能を達成することを目標とする意味です。つまり実効効率75%ですね。しかし、この75%あくまでも目標値であり現実にはそう簡単に達成できるものではありません。

MXNetやCNTKでは大凡実効40~50%となっており、この程度は普通だと思うのですが、分散処理対応版Chainerではきっと凄い技術が使われているのでしょう。

ForwardはDataParallelで効率を上げられるでしょうが、Backwardはloss計算の手前で同期処理が必要になるため効率が低下すると思います。
loss計算後にはOptimizerによるbackpropagationが行われますが、これも分散で実行するのか、または1ノードで処理し更新されたWeightなどを各ノードに配信する方式か...

またTensorFlowの5倍を超える性能になりますので大規模案件での採用が期待されますね。

ちなみに分散ノード間結合技術としてはMPIとInfiniBandが使われるとのこと。
ITProの記事にも記載がありますが完全にスパコンの技術です。
Protocol Buffersと10GbEでなんとかなりませんでしょうか...(笑)

また我々のような「普通の人」の意見として、1ノード/4GPUなどの環境でも高速化されることを大いに期待します。

近日中にChainer2.0がリリースされるとのこと

ITPro会員でないと読めない2ページ目に書かれていますが

PFNは近日中に「Chainer 2.0」をリリースする予定だが、これは分散バージョンのChainerではない。
とのこと。

残念なことにITProの記事にはChainer2.0の詳細は全く記載されていませんでした。
「近日中」が具体的にいつなのかが気になりますね。

先日書かせて頂いた記事でTensorFlowも1.0がそろそろリリースされるとお伝え致しましたが、お互い切磋琢磨してどんどん良いフレームワークになって欲しいものです。(他力本願)

続報に期待します。