パイプライン並列とは

パイプライン並列とは、巨大なAIモデルを前半・後半といった複数のステージに区切り、各ステージを別々のGPUに割り当てて、工場のベルトコンベアのように順に処理する手法です。1枚のGPUに載らない大きなモデルでも、層をいくつかのまとまりに分けて受け持たせれば、複数のGPUで分担して動かせます。テンソル並列と並んで、巨大モデルを手分けして動かすための代表的なやり方のひとつです。

パイプライン並列の仕組み

モデルをステージに区切り、たとえば前半の層をGPU1が、後半の層をGPU2が受け持ちます。データはGPU1で処理されてからGPU2へ渡される、というリレー形式です。ただし単純に分けるだけだと、GPU1が処理している間はGPU2が手持ち無沙汰になるという無駄が生まれます。そこで使われるのが、データを小さなマイクロバッチに刻んで次々に流し込む工夫です。先頭のひと塊がGPU2に進んだら、すぐ次の塊をGPU1に流す。こうして各GPUを途切れず働かせ、遊んでいる時間を減らします。

テンソル並列やデータ並列との違い

テンソル並列が1つの層の「中身」を割るのに対し、パイプライン並列は層をまたいで前後のステージに割ります。データ並列のようにモデルを丸ごと複製するわけでもありません。GPU同士がやり取りするのは主にステージの境目だけなので、テンソル並列より通信が控えめで済みます。そのため、配線がそれほど速くないサーバーをまたぐ構成でも使いやすいのが利点です。実際の大規模訓練では、データ並列やテンソル並列と組み合わせて使われることがよくあります。

経営から見たパイプライン並列の意味

パイプライン並列は、巨大なモデルを複数GPUのリレーで訓練・運用するための基本手法です。Googleが2018年に発表したGPipeという仕組みで広く知られるようになりました。1台では到底動かせない規模のAIを、ハードを連ねて現実的なコストと時間で動かす。派手さはありませんが、大規模言語モデルの開発を裏で支える縁の下の力持ちといえます。

Topicパイプラインに生まれる「泡」をどう埋めるか

層を前後のGPUに分けただけだと、最初は前のGPUが働き、後ろのGPUは仕事が回ってくるまで手持ち無沙汰のままです。この遊んでいる時間は「バブル(泡)」と呼ばれ、せっかくGPUを増やしても性能が伸びない原因になります。2018年のGPipeは、データを小さなマイクロバッチに刻んで途切れず流し込むことで、この泡を小さくしました。工場のベルトコンベアで、製品を小刻みに流せば後ろの工程も暇にならないのと同じ理屈です。「分けるだけでは速くならない」という現実への、シンプルで巧みな答えでした。

パイプライン並列に関するよくある質問

パイプライン並列とテンソル並列はどう使い分けますか?
テンソル並列は1つの層の中身を割るため通信が多く、高速リンクで束ねた近いGPU向きです。パイプライン並列は層をまたいで前後に割り通信が控えめなので、サーバーをまたぐ構成でも使いやすく、両者を組み合わせることも多いです。
「パイプラインのバブル」とは何ですか?
層を分けただけだと、前のGPUが処理する間、後ろのGPUが仕事待ちで遊んでしまう時間のことです。データを小さなマイクロバッチに刻んで途切れず流すことで、このバブル(遊休時間)を小さくします。
パイプライン並列はいつ登場した技術ですか?
Googleが2018年に発表したGPipeという仕組みで広く知られるようになりました。現在も大規模言語モデルの訓練で、データ並列やテンソル並列と組み合わせて使われています。

パイプライン並列に関連する記事