HTML5 Webook
119/194

そうな分割方法が、コピー数やGPU配置によっては、実際には高速な処理速度を達成することもある。モデル並列を用いる大規模ニューラルネット学習のための著名な既存フレームワークでは、これらの決定の多くは自動化されておらず(表1)、高い処理速度を得るためには、試行錯誤を通じて良い組合せを探しながらチューニングするほかない。そのため、高度な知識を持つ専門の技術者であっても、多数のGPUを用いた並列処理で、十分な処理速度を得られるまでには、相当の作業コストを要する。なお、表1に示した従来フレームワークのPipe-Dream-2BW [8]は、分割可能な箇所を人間が指定すると、限られた組合せ(せいぜい数十パターン程度)から、分割数やコピー数を自動で決定する機能を持つが、可能な分割数等はあらかじめ人間が指定しておく必要がある。RaNNCの概要前述の課題を解決し、大規模ニューラルネット学習を容易にするために、DIRECTと東京大学が共同で開発したのが、自動並列化深層学習ミドルウェアRaNNC (Rapid Neural Network Connector) である。RaNNCは現在、GitHubにおいてオープンソースで公開されている*1。ライセンスはMITライセンスとしており、商用目的を含め,無償で利用できる。3自動化適用できるニューラルネットの種類(S1)分割方法決定(S2)コピー数決定(S3)GPU配置決定Megatron-LM (NVIDIA)×××Transformerに限定Mesh-TensorFlow(Google)×××Transformerに限定GPipe (Google)×××制限無しPipeDream-2BW (スタンフォード大、 Microsoft)×○×制限無しRaNNC(著者らが開発)○○○制限無し表1 既存フレームワークとの比較class BERTNet(Module):...self.query= Linear(hidden, head)self.key= Linear(hidden, head)self.value= Linear(hidden, head)...一般的なニューラルネット定義従来技術class BERTNet(Module):...self.query_key_value=ColumnParallelLinear(hidden, 3*proj)self.dense= RowParallelLinear(proj, hidden)1台のGPUを想定した処理RaNNCclass BERTNet(Module):...self.query= nn.Linear(hidden, head)self.key= nn.Linear(hidden, head)self.value= nn.Linear(hidden, head)...それぞれの計算をどうやって複数のGPUに分担させるかを細かく指定大幅な書き換えが必要*GPU書き換え不要多数のGPUでの計算の分担を自動的に決定Megatron-LMでの記述例* BERTの学習のための一般的なニューラルネット定義(https://github.com/NVIDIA/DeepLearningExamples) に対してMegatron-LMのために書き換えられたニューラルネット定義(https://github.com/NVIDIA/Megatron-LM) (いずれもNVIDIA社による)のプログラム行数は2~3倍に増加GPUGPUGPUGPUGPUGPUGPUGPU図2 RaNNCの概要*1https://github.com/nict-wisdom/rannc1133-2 自動並列化深層学習ミドルウェアRaNNC

元のページ  ../index.html#119

このブックを見る