テクニカルガイド
モデルとパイプラインの並列処理
モデルが大きすぎて 1 つの GPU に収まらない場合、モデルとパイプラインの並列処理によってモデル自体がデバイス間で分割されます。
このガイドを聴くAIによるナレーション · ~2 min
概要
これにより、数千億のパラメータを持つ巨大な言語モデルのトレーニングが物理的に可能になります。
ディープダイブ
モデルの並列処理により、単一のモデルが複数の GPU に分割されるため、1 つのデバイスがすべての重みを保持する必要はありません。味は主に2つあります。テンソル (層内) 並列処理は、それぞれが出力の一部を計算する GPU 間で大規模な行列乗算を分割するなど、層内の計算を分割します。パイプライン (レイヤー間) 並列処理では、異なる連続レイヤーが異なる GPU に割り当てられるため、レイヤーのブロック 1 は GPU 0 に存在し、ブロック 2 は GPU 1 に存在し、組み立てラインのようにアクティベーションが前方に渡されます。単純なパイプラインの課題は「バブル」です。GPU 0 が最初のバッチで動作している間、ダウンストリーム GPU はアイドル状態になります。パイプライン化により各バッチがマイクロバッチに分割されるため、すべてのステージがビジー状態を維持し、使用率が大幅に向上します。
現実世界の実装
NVIDIA Megatron-LM を使用して GPT スタイルのモデルをトレーニングします。これは、各トランスフォーマー層の注意を分割し、テンソル並列処理を介して GPU 全体にフィードフォワード行列を分割します。
GPipe を使用して、巨大なビジョンまたは言語モデルのさまざまなレイヤーを個別のアクセラレータに配置し、マイクロバッチ処理でそれらを忙しくさせます。
DeepSpeed のパイプライン エンジンは、数千億のパラメータ モデルを多数のノードにわたるステージに分割します。
単一の 8 GPU サーバー内のテンソル並列処理と、複数のサーバーにわたるパイプライン並列処理を組み合わせて、1 台のマシンには大きすぎるモデルをトレーニングします。
モデルとパイプラインの並列処理の将来
フレームワークは、コンピューティングと通信のバランスをとるためにプロファイリングと検索を使用して、デバイス間でモデルを分割する方法を決定するという難しい問題をますます自動化しています。テンソル、パイプライン、およびデータ並列処理 (3D 並列処理) のより緊密な統合、パイプライン バブルをほぼ排除するためのよりスマートなマイクロバッチ スケジューリング、およびより高速な相互接続を備えたハードウェアにより、チップ間での単一レイヤーの分割がより安価になり、ますます大規模なモデルにとって日常的になることが期待されます。
実践する
なぜそれが重要なのか
- 費用と予算. アーキテクチャの決定により、パフォーマンスと運用コストが何年にもわたって推進されます。
- より明確な判決. 技術教育は、チームが最新のスタックだけでなく、適切なスタックを選択するのに役立ちます。
- 品質管理. より良いエンジニアリングの選択により、本番環境での信頼性に関するインシデントが減少します。
気をつけてください
- 1 つのベンチマークを最適化すると、より広範なシステムの弱点が隠れる可能性があります。
- インフラストラクチャとメンテナンスのコストは過小評価されがちです。
- システムが複雑になるにつれて、セキュリティと可観測性のギャップが拡大する可能性があります。
次のステップ
- 実装前にレイテンシ、品質、コストの目標を定義します。
- 現実的な負荷とデータ条件でのベンチマーク。
- エラー、ドリフト、ユーザーへの影響を計測器で監視します。
- スケーリングの前に、ロールバックとインシデント対応のパスを準備します。
探検を続けましょう
よくある質問
モデルとパイプラインの並列処理とは何ですか?
モデルが大きすぎて 1 つの GPU に収まらない場合、モデルとパイプラインの並列処理によってモデル自体がデバイス間で分割されます。これにより、数千億のパラメータを持つ巨大な言語モデルのトレーニングが物理的に可能になります。
モデルとパイプラインの並列処理はどのような基本的な問題を解決しますか?
モデルとパイプラインの並列処理により、モデル自体がデバイス間で分割され、単一の GPU が保持できるよりもはるかに大きなネットワークのトレーニングが可能になります。
テンソル (層内) 並列処理の分割はどのように機能しますか?
テンソル並列処理は、単一レイヤー内の計算を分割します。たとえば、大きな重み行列を分割して、各 GPU が出力の一部を計算します。
単純なパイプライン並列処理における「バブル」とは何ですか?
パイプライン ステップの初期では、下流ステージにはまだ入力がないためアイドル状態になり、GPU 時間を無駄にします。このアイドルギャップはバブルと呼ばれます。
パイプラインの並列化によってバブルはどのように軽減されるのでしょうか?
バッチをマイクロバッチに分割すると、複数のマイクロバッチが異なるステージを同時に占有することができ、すべての GPU をビジー状態に保ち、アイドル時間を短縮できます。
テンソル並列処理が通常単一ノード内に保持されるのはなぜですか?
テンソル並列処理は部分的な行列の結果を再結合するために頻繁に通信するため、NVLink を介したノード内の相互接続帯域幅が最も高い場所に配置されます。