テンソル並列とは
テンソル並列とは、巨大なAIモデルの計算を、1つの層の中で行う行列計算そのものを複数のGPUに分割し、同時に処理する手法です。モデルが大きくなると、その計算は1枚のGPUのメモリに収まりきりません。そこで、ひとつひとつの計算を何枚かのGPUで手分けして行い、最後に答えを合わせます。大きな割り算を複数人で分担し、結果を持ち寄るようなイメージに近いでしょう。
テンソル並列の仕組み
モデルの中身は、数字がぎっしり並んだ大きな表(テンソル)どうしのかけ算でできています。テンソル並列では、この表を縦や横にスライスし、それぞれの断片を別々のGPUが計算する仕組みです。各GPUは自分の担当ぶんだけを処理し、層の終わりで結果を持ち寄って1つにまとめます。注意したいのは、層を通るたびにGPU同士が答えを突き合わせる必要がある点です。そのため通信の量が多く、GPUをつなぐ配線の速さが性能を大きく左右します。
パイプライン並列やデータ並列との違い
大きなモデルを複数GPUで動かす方法には、いくつかの種類があります。データ並列はモデルを丸ごと複製し、扱うデータを分けて配るやり方です。パイプライン並列は、モデルを前半・後半といったステージに区切り、工程をバトンリレーのように受け渡します。これに対してテンソル並列は、1つの層の「中身」そのものを割る点が特徴です。3つのなかで最も通信が頻繁なため、同じサーバー内をNVLinkのような高速リンクで束ねたGPUに割り当てるのが定石になっています。メモリを節約する工夫であるZeROと組み合わせて使うこともあります。
経営から見たテンソル並列の意味
テンソル並列は、1枚のGPUには載らないほど大きなモデルを訓練・運用するための土台になる技術です。NVIDIAが2019年に公開したMegatron-LMという仕組みで広く知られるようになり、当時は83億パラメータのモデルを512枚のGPUで訓練できることを示しました。今日の大規模言語モデルを成り立たせている、いわば「巨大モデルを手分けして動かす」ための基本部品のひとつといえます。
Topicテンソル並列とNVLinkが「セット」で語られる理由
テンソル並列は、モデルの層を通り抜けるたびにGPU同士が途中結果を突き合わせます。つまり計算のあいだ中ずっと、GPU間で大量のデータをやり取りし続けるわけです。ここで配線が遅いと、せっかく手分けしても「答え合わせ待ち」で時間を食ってしまいます。だからテンソル並列を使うGPUは、ふつう同じサーバーの中でNVLinkのような超高速の専用リンクで束ねられます。地味な配線の話に見えて、巨大モデルが現実的な速さで動くかどうかを左右する勘どころなのです。
テンソル並列に関するよくある質問
- テンソル並列とパイプライン並列は何が違いますか?
- 分け方が違います。パイプライン並列はモデルを前半・後半などのステージに区切って工程を受け渡すのに対し、テンソル並列は1つの層の中の行列計算そのものを複数GPUに割ります。両者は組み合わせて使うこともあります。
- なぜテンソル並列は速いGPU接続が必要なのですか?
- 層を通るたびにGPU同士が途中結果を突き合わせるため、通信量がとても多くなるからです。配線が遅いと答え合わせ待ちで遅くなるので、同じサーバー内をNVLinkのような高速リンクで束ねたGPUに割り当てます。
- テンソル並列は個人でも使う技術ですか?
- 主にAIを開発する企業や研究機関が、1枚のGPUに載らない巨大モデルを訓練・運用するときに使う技術です。NVIDIAが2019年に公開したMegatron-LMで広く知られるようになりました。