[論文レビュー] Purine: A bi-graph based deep learning framework
Purineは、演算子とデータテンソルから構成される有向非巡回二部グラフとしてニューラルネットワークをモデル化するバイグラフベースのディープラーニングフレームワークであり、メモリ転送と計算の自動重ね合わせを可能にする効率的でイベント駆動型の実行を実現する。ユニバーサルタスクディスpatchャーとグラフ構成を用いて、データ並列性とモデル並列性を一貫してサポートすることで、12GPUでGoogLeNetをバッチサイズ128で実行した場合に12倍の高速化を達成し、ほぼ線形のスケーリングを実現した。
In this paper, we introduce a novel deep learning framework, termed Purine. In Purine, a deep network is expressed as a bipartite graph (bi-graph), which is composed of interconnected operators and data tensors. With the bi-graph abstraction, networks are easily solvable with event-driven task dispatcher. We then demonstrate that different parallelism schemes over GPUs and/or CPUs on single or multiple PCs can be universally implemented by graph composition. This eases researchers from coding for various parallelization schemes, and the same dispatcher can be used for solving variant graphs. Scheduled by the task dispatcher, memory transfers are fully overlapped with other computations, which greatly reduce the communication overhead and help us achieve approximate linear acceleration.
研究の動機と目的
- ディープラーニングにおけるマルチGPUおよびマルチマシン環境での、データ並列性、モデル並列性、ハイブリッド並列性といった多様な並列化手法の実装を簡素化すること。
- イベント駆動型タスクディスpatchャーを用いて、メモリ転送を計算と重ねることで、分散学習における通信オーバーヘッドを低減すること。
- アルゴリズム設計と低レベルの並列化ロジックを分離するため、ディープネットワークをバイグラフとして抽象化する統一的かつ拡張可能なフレームワークを提供すること。
- 反復的学習プロセス(例:SGD)をグラフイテレーションにより効率的に実行し、計算グラフ内に循環依存を生じさせないようすること。
提案手法
- ディープニューラルネットワークを、2種類の頂点(関数である演算子とデータであるテンソル)を持つ有向非巡回二部グラフ(バイグラフ)として表現する。
- すべての入力テンソルが準備された時点で演算子の実行をトリガーするイベント駆動型タスクディスpatchャーを用い、自動スケジューリングと依存関係の解決を実現する。
- テンソルと演算子に「場所」プロパティ(ホスト名とデバイスID)を割り当て、GPUまたはCPUへの割り当てを明示することで、マルチデバイスおよびマルチマシン実行を透明に可能にする。
- デバイス境界を越えてデータを転送するための「Copy」演算子を導入し、GPU間およびマシン間通信を可能にする。
- グラフ構成を用いて並列化スキーム(データ並列性、モデル並列性、ハイブリッド)を実装し、同じディスパッチャを再利用することで、各設定ごとにカスタムコードを書く必要を排除する。
- 計算のアイドルフェーズ中にデータ転送をスケジューリングすることで、通信と計算を重ねあわせ、アイドル時間を最小限に抑え、効率を向上させる。
実験結果
リサーチクエスチョン
- RQ1統一的なバイグラフ抽象化は、ディープラーニングフレームワークにおける多様な並列化戦略の実装を簡素化できるか?
- RQ2イベント駆動型タスクスケジューリングを用いることで、分散学習における通信オーバーヘッドをどれほど効果的に隠せるか?
- RQ3従来、通信ボトルネックと見なされてきた全結合層に対しても、データ並列性を効率的に適用できるか?
- RQ41つのディスパッチャとグラフ構成を用いて、複数GPUおよび複数マシンでほぼ線形のスケーリングを達成できるか?
主な発見
- Purineは、12GPUを用いてGoogLeNetをバッチサイズ128で実行した場合、1秒間に1383.7枚の画像を処理し、12倍の高速化を達成した。
- メモリ転送と計算の有効な重ね合わせのおかげで、10GbEネットワークでも12GPUでほぼ線形のスケーリングを達成した。
- バッチサイズ32(GPUあたり)でも、Purineは12GPUで9.53倍の加速を達成しており、小規模バッチでも高いパフォーマンスを発揮することが確認された。
- プロファイリングの結果、CPUとGPU間のメモリコピ一がバックワードパスの計算と完全に重ね合わされており、唯一のわずかなボトルネックは最初の畳み込み層に起因していた。
- フレームワークはグラフイテレーションを用いてSGDを成功裏に実装し、パラメータ更新を別個のグラフに分割することで循環依存を回避した。
- ユニバーサルタスクディスパッチャの使用により、フレームワークの再アーキテクチャを施さずに、データ並列性、モデル並列性、ハイブリッド並列性のすべてをスムーズにサポートできた。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。