テンソル並列処理 vs パイプラインモデル並列処理:複数GPUでのAIモデル並列化
複数GPUでのAIモデル並列化:テンソル並列処理 vs パイプラインモデル並列処理
現代のAIモデルはますます大規模化し、単一GPUのメモリ(VRAM)を超えることがよくあります。これらのモデルを学習または実行するには、複数GPUでの並列化が不可欠です。主に2つの戦略、テンソル並列処理(TP)とパイプラインモデル並列処理(PP)が登場しています。どちらも計算を分散しますが、その方法は根本的に異なり、レイテンシ、スループット、ハードウェア要件に異なる影響を与えます。この記事では、それぞれの仕組み、オーバーヘッド、および各アプローチの最適なユースケースについて説明します。
パイプラインモデル並列処理(PP):層ごとの分割
パイプラインモデル並列処理では、モデルを垂直に分割します。ニューラルネットワークの層(レイヤー)を異なるGPUに分散します。例えば、GPU 0が最初の10層、GPU 1が次の10層を担当します。データは組み立てラインのようにGPUを流れます。GPU 0が自身の層を計算し、活性化をGPU 1に渡します。これにより、パイプラインバブルという固有の問題が発生します。各GPUは前のGPUが終了するのを待たなければならないため、アイドル時間が発生します。単純な構成では、GPUはデータを待つ間アイドル状態になり、全体的な効率が低下します。しかし、この欠点はバッチ(複数のリクエストを同時に)を処理する際に軽減されます。多くのリクエストが順次到着すると、パイプラインを満たすことができます。GPU 1がリクエストAを処理している間に、GPU 0はすでにリクエストBに取り組んでいます。これによりアイドル時間が隠蔽され、スループットが大幅に向上します。したがって、PPは単一リクエストのレイテンシがそれほど重要でない、高バッチスループットのシナリオに適しています。
テンソル並列処理(TP):行列ごとの分割
対照的に、テンソル並列処理はモデルを水平に分割し、各層内の個々の行列演算を複数のGPUに分散します。各GPUはすべての層の重みの一部(シャード)のみを保持します。層の最終結果を計算するには、すべてのGPUが協力する必要があります。部分計算を実行し、それらをall-reduceと呼ばれる同期操作で結合します。これには、実質的にすべての層でGPU間の絶え間ない通信が必要です。結果として生じる通信オーバーヘッドが、TPのパフォーマンスの重要な要素です。この通信速度は、使用されるインターコネクト技術に大きく依存します。NVLinkは、GPU間の専用高速リンクであり、数マイクロ秒でのデータ転送を可能にし、オーバーヘッドを無視できるほどにします。しかし、より低速なPCIeバスを使用する場合、データ転送がボトルネックになります。PCIeの帯域幅はGPU内部メモリの帯域幅よりも大幅に低くなります。データ交換を待つ時間は、計算時間全体の大きな割合を占める可能性があり、極端な場合には25%から50%にもなります。これにより並列化の利点が打ち消される可能性があります。PCIe上の典型的なall-reduceには数ミリ秒かかる場合があり、実際の計算はわずかマイクロ秒です。NVLinkがない場合、TPはしばしば非効率的です。
比較とオーバーヘッド
| プロパティ | パイプラインモデル並列処理(PP) | テンソル並列処理(TP) |
|---|---|---|
| 分割方法 | 層ごと(垂直) | 行列ごと(水平) |
| 通信頻度 | 層ブロック間のみ(低頻度) | すべての層で(非常に高頻度) |
| 通信量 | 大きな活性化データ(ブロックごとに1回) | 小~中程度のデータ(ただし非常に頻繁) |
| 主なオーバーヘッド | パイプラインバブル(アイドル時間) | all-reduce同期(レイテンシ) |
| レイテンシ(単一リクエスト) | 高い(逐次ステップのため) | 低い(並列計算のため) |
| スループット(バッチ) | 高い(バブルが隠蔽される) | 中程度(通信オーバーヘッドがスケールする) |
| ハードウェア要件 | PCIeで良好に動作 | NVLinkまたは同等の高速インターコネクトが必要 |
| 理想的なシナリオ | 大バッチ、マルチサーバー、PCIe環境 | NVLink搭載の単一サーバー、レイテンシ重視のアプリケーション |
結論
テンソル並列処理とパイプラインモデル並列処理の選択は、利用可能なハードウェアとパフォーマンス目標に大きく依存します。GPUがNVLinkで接続されており、単一リクエストのレイテンシを最小限に抑える必要がある場合、TPが優れた選択肢です。細粒度の並列化と低レイテンシを実現しますが、非常に高速なインターコネクトが必要です。PCIe接続のみが利用可能な場合、またはモデルが複数のサーバーに分散されている場合、PPの方が堅牢で効率的なオプションです。パイプラインバブルはバッチ処理によって軽減され、通信オーバーヘッドは低く抑えられます。実際には、両方の手法を組み合わせることがよくあります(例えば、ノード内ではNVLinkを使用したTP、ノード間ではネットワークを介したPP)。これらの違いを理解することは、AIにおけるマルチGPUシステムの効率的な利用にとって重要です。
一緒に取り組みましょう
さらに詳しい情報やプロジェクトのヘルプ、またはアイデアの構築が必要ですか?
簡単な質問でもフルプロジェクトでも、お気軽にどうぞ。お問い合わせいただき、あなたのアイデアを一緒に実現しましょう。
お問い合わせ →