トは、データと計算をノードとし、それらの依存関係をエッジによって示す計算グラフとして表現される(楕円のノードがデータ、矩形のノードが計算を示している)。図では、計算グラフとして表現されたニューラルネットを、3つの部分ニューラルネットに分割しているが、この分割は前述のモデル並列のための決定のうち、(S1)に相当する。図中のグラフは、それ以外にも様々な分割が可能であるが、可能な分割パターンの数は、ニューラルネットの計算グラフに含まれるノードの数が大きくなるに従って、指数関数的に大きくなる。実際には、大規模ニューラルネットに対応する計算グラフは、数千・数万のノードを持つため、単純に全ての可能な分割を数え上げ、それらを比較して優れたものを選択することは、実質的に不可能である。また多数のGPUが利用できる場合、データ並列を併用するため、それぞれの部分ニューラルネットを複数のGPUに複製して配置する。これにより、モデル並列を用いるよりも実行効率を改善できる。そのため、どの部分ニューラルネットをいくつ複製するかも同時に決定する必要がある。これは、前述の決定の(S2))に相当する。図3の例では、合計で8台のGPUが利用可能であるという前提の元、合計8になるように、3つの部分ニューラルネットに、それぞれコピーの数を設定している。また、一般に1台のサーバは複数台のGPUを備えており(〜8台程度)、多数のGPUが必要な場合、複数のサーバを使用するのが普通である。そこで、それぞれの部分ニューラルネットを、その複製も含めて、どのサーバのどのGPUに配置するかを決定することで、実際にニューラルネット学習の並列処理が可能となる((S3)に相当)。ニューラルネットの分割方法・コピー数・GPU配置の決定の組合せは膨大な数に上るため、RaNNCでは、まず有望な組合せ(数千〜数万パターン程度)に絞り込んだ上で、それぞれの組合せについて、学習時の計算を部分的に実行しながら自動的に試行錯誤し、高速な学習速度を達成できるものを選択する(図4)。計算グラフの分割を決める基準は、第一に、部分グラフの学習パラメータ及びその計算のために必要なメモリサイズが、GPUのメモリに収まることであるが、そのほかに、部分グラフ同士の通信時間を極力小さくすることが重要となる。これは、ある部分ニューラルネットの計算結果を、後続の部分ニューラルネットに送る際に、長い通信時間がかかると、GPUの処理に空き時間(アイドル時間)が生じ、実行効率が低下するためである。GPUは相互に通信可能であるが、通常は同一サーバ内のGPU間の通信は、異なるサーバのGPU間の通信より大幅に高速である。そこでRaNNCは、できるだけ部分ニューラルネット間で通信されるデータ量が少なくなるように分割箇所を決めると共に、相互に多くのデータを通信する部分ニューラルネットの組合せを、できるだけ同一サーバ内のGPUに配置するようにする。また、RaNNCは表1のGPipe, PipeDream-2BW等でも利用されるパイプライン並列と呼ばれる方式を採用しているが、パイプライン並列では、各部分ニューラルネットの処理時間が均等なほど、アイドル時間が減少し、実行効率が改善する。部分ニューラルネットの処理時間は、そこに含まれる計算の内容だけではなく、データ並列の併用において使用するコピーの数によって決定される。そのため、部分ニューラルネットの処理時間を均等にするには、部分ニューラルネットへの分割と、使用するコピーの数を同時に考慮して、それらの組合せを決定しなければならない。単純な手法では、そうした組合せは無数にあり、単純に数え上げて優れたものを選ぶことはできない。そこでRaNNCでは、動的計画法によるアルゴリズムを導入し、効率的に有望な組合せのみを探索している。上記では、説明を簡単にするため、RaNNCによるニューラルネット分割のアルゴリズムは、概略のみを説明した。技術的な詳細については、著者らの論文[9] を参照されたい。評価実験RaNNCの速度を評価するため、モデル並列による学習を行う関連フレームワークとの比較実験を行った。比較対象として、表1に示したMegatron-LM、GPipe [11]、PipeDream-2BWを用いた。実験には、NVIDIA V100を8台備えたサーバを最大4台(100GbpsのInfiniBandで相互接続)を用いた。モデル並列を用いるフレームワークとして、表1のMesh-TensorFlowが知られているが、バックエンドに用いるフレームワークとしてTensorFlow [12]を用いており、PyTorchを用いる他のフレームワークとは厳密な比較が難しいため、ここでは比較対象から除外した。隠れ層サイズを2048(原論文の2倍)としたBERTについて、レイヤ数を変化させながら、事前学習の実行速度を調査した結果を図5 (a)に示す。GPUを32台用い、GPUごとのバッチサイズは8とした。レイヤ数が256の場合で、学習パラメータ数は129億となる。なお、GPipeのオリジナルの実装ではTensorFlowを使用しており、またデータ並列とモデル並列の併用が不可能なため、RaNNCとの比較が困難であった。そこで、PipeDream-2BWの著者らによって開発された、PyTorchを用い、かつデータ並列とモデル並列の併用41153-2 自動並列化深層学習ミドルウェアRaNNC
元のページ ../index.html#121