GPU 分散通信テクノロジー: PCle、NVLink、NVSwitch

大規模モデルの時代に入ってからは、大規模モデルの開発が人工知能の中核となっていますが、大規模モデルのトレーニングには大量の GPU リソースと長いトレーニング時間が必要になるため、実際には複雑な作業となっています。

さらに、単一の GPU ワーカー スレッドではメモリが限られており、多くの大規模モデルのサイズは単一の GPU の範囲を超えます。そのため、複数の GPU にまたがるモデル トレーニングを実装する必要があります。このトレーニング方法には、分散通信と NVLink が含まれます。

分散通信と NVLink について話すとき、私たちは魅力的で進化している技術分野にいます。次に、分散通信の原理と、効率的な分散通信を実現するのに役立つ技術である NVLink の進化について簡単に紹介します。

分散通信とは、コンピュータ システム内の複数のノードを接続して、ノード同士が通信し、共同作業を行って共通のタスクを完了できるようにすることです。NVLink は、高速で低遅延の通信テクノロジであり、通常、GPU または GPU を他のデバイスに接続して、高性能コンピューティングとデータ転送を実現するために使用されます。

分散並列処理

現在、ディープラーニングは大規模モデル、つまり基盤モデルの時代に入りました。大規模モデルは、その名の通り「大きい」ことに重点を置いています。主に以下の側面が含まれます。

  • データサイズが大きい

大規模モデルでは通常、自己教師あり学習法が使用されるため、データの注釈付けやトレーニング、研究開発のコストが削減され、大量のデータによってモデルの一般化能力とパフォーマンスが向上します。

  • 大きなパラメータスケール

モデルパラメータの規模が拡大し続けると、モデルはデータ内の複雑な関係やパターンをより適切に捉えることができ、既存のモデル構造の精度の限界をさらに打破することが期待されます。

  • 高い計算能力要件 

大規模なデータとパラメータにより、モデルを単一のマシンで実行して計算することは不可能です。一方では、コンピューティング ハードウェアの継続的な進歩が必要であり、他方では、AI フレームワークに分散並列トレーニング機能も必要です。

したがって、上記の問題を解決するには、分散並列戦略を導入する必要があります。

データの並列性

データ並列 (DP) は、複数の GPU にデータを分散することで並列処理を実現する、一般的に使用されるディープラーニング トレーニング戦略です。データ並列フレームワークでは、各 GPU (または作業ユニット) がモデルの完全なコピーを保存するため、各 GPU は割り当てられたデータのサブセットに対して順方向および逆方向の伝播計算を独立して実行できます。

データ並列ワークフロー:

  • パラメータ同期: トレーニングを開始する前に、すべての作業ユニットがモデル パラメータを同期して、各 GPU 上のモデル コピーが同一であることを確認します。
  • データ配信: トレーニング データはバッチに分割され、各バッチはさらにサブセットに分割され、各 GPU はデータの 1 つのサブセットの処理を担当します。
  • 独立した勾配計算各 GPU は、データのサブセットに対して順方向および逆方向の伝播を独立して実行し、対応する勾配を計算します。
  • 勾配集約: 計算が完了したら、すべての作業単位の勾配を集約する必要があります。これは通常、ネットワーク通信を介して実現されます。たとえば、All-Reduce アルゴリズムを使用すると、異なる GPU 間で勾配を効率的に平均化できます。
  • パラメータの更新: 勾配が平均化されると、各 GPU はこの平均化された勾配を使用して、モデルのコピーのパラメータを更新します。
  • プロセスの繰り返し: このプロセスは、モデルがデータセット全体でトレーニングされるまで、各データ バッチで繰り返されます。

データ並列処理の利点と課題:

データ並列化により、トレーニング プロセスをより多くの GPU に水平に拡張できるため、トレーニングが高速化されます。その利点は、実装が簡単で、利用可能なハードウェア リソースに合わせて作業単位の数を柔軟に調整できることです。現在、多くのディープラーニング フレームワークが組み込みサポートを提供しています。

しかし、並列 GPU の数が増えると、保存するパラメータのコピーが増えるため、メモリのオーバーヘッドが大きくなります。さらに、勾配集約ステップでは、GPU 間で大量のデータを同期する必要があり、特に作業ユニットの数が増えると、システムのボトルネックになる可能性があります。

データ並列処理における非同期同期方式の応用:

データ並列処理における通信ボトルネックの問題を解決するために、研究者はさまざまな非同期同期方式を提案してきました。これらの方式では、各 GPU ワーカー スレッドは、他のワーカー スレッドが勾配計算と同期を完了するのを待たずに、他のスレッドとは独立してデータを処理できます。このアプローチにより、通信によって発生するデッド タイムが大幅に短縮され、システムのスループットが向上します。

実装の原則は、勾配計算段階で、各 GPU が独自の順方向および逆方向の伝播を完了した後、他の GPU を待たずに勾配を即座に更新することです。さらに、各 GPU は、すべての GPU が同期ポイントに到達するのを待たずに、必要に応じて最新の利用可能なグローバル重みを読み取ります。

ただし、このアプローチには欠点もあります。異なる GPU 上のモデルの重みが同期されない可能性があるため、ワーカー スレッドは勾配計算に古い重みを使用する可能性があり、統計効率が低下する可能性があります。つまり、精度が厳密に保証されません。

モデルの並列性

モデル並列 (MP) とは、一般に、大規模なディープラーニング モデルを複数のコンピューティング ノードに分散してトレーニングすることを指します。各ノードはモデルの一部を担当します。この方法は主に、単一のコンピューティング ノードではモデル全体を処理できない状況を解決するために使用されます。モデル並列処理は、パイプライン並列処理 (PP) やテンソル並列処理 (TP) など、いくつかの戦略にさらに細分化できます。

モデル並列処理は、単一のコンピューティング ノードではモデルのすべてのパラメータに対応できないという問題を解決する方法です。各ノードが完全なモデルのデータの異なるサブセットを処理するデータ並列処理とは異なり、モデル並列処理では、モデルのさまざまな部分を複数のノードに分散し、各ノードがモデルのパラメータの一部のみを担当します。これにより、単一ノードのメモリ要件と計算負荷を効果的に削減できます。

モデル並列処理では、ディープ ニューラル ネットワークの複数のレイヤーを分割して、異なるノードに割り当てることができます。たとえば、連続する複数のレイヤーをグループ化し、レイヤーのグループを 1 つのノードに割り当てることができます。この階層的な戦略により、各ノードは割り当てられたモデル パラメーターの一部のみを処理できるため、メモリとコンピューティング リソースの使用が削減されます。

ただし、単純なモデル並列実装では、順次依存関係を持つレイヤーは前のレイヤーの計算が完了するまで待機する必要があるため、待機時間が長くなり、計算リソースが効率的に使用されない可能性があります。

この効率の低下を減らすために、パイプライン並列 (PP) が提案されました。パイプライン並列処理では、大量のデータ バッチが複数の小さなマイクロバッチに分割されます。各マイクロバッチは比例して高速に処理され、各ワーカーは次のマイクロバッチが利用可能になるとすぐにその処理を開始するため、パイプラインの実行が高速化されます。十分なマイクロバッチがあれば、ワーカー (GPU カード) を最大限に活用でき、ステップの最初と最後のアイドル時間の「バブル」を最小限に抑えることができます。

パイプライン並列処理では、各ノードが異なるモデル レイヤーを順番に処理し、パイプラインのようにマイクロバッチがノード間を流れます。勾配はすべてのミニバッチで平均化され、モデル パラメータの更新に使用されます。

パイプラインの並列処理では、モデルをレイヤーごとに「垂直」に分割します。また、レイヤー内の特定の操作を「水平」に分割することもできます。これは、効率をさらに向上させるために、テンソル並列 (TP) トレーニングと呼ばれることがよくあります。

テンソル並列処理では、モデル内の大規模な行列乗算演算が、複数のコンピューティング ノードで並列に実行できる小さな部分に分割されます。たとえば、Transformer モデルでは、行列乗算が大きな計算ボトルネックになっています。テンソル並列処理では、重み行列を小さなブロックに分割し、それぞれを異なるノードで並列に処理できます。

実際には、モデル並列処理には、パイプライン並列処理とテンソル並列処理の組み合わせが含まれます。ノードはモデルの一部を担当し (モデル並列処理)、異なるマイクロバッチを同時に処理できます (パイプライン並列処理)。また、このノード内では、大規模な行列演算を複数のプロセッサにさらに分割できます (テンソル並列処理)。このような組み合わせにより、分散コンピューティング リソースを最大限に活用し、大規模モデル トレーニングの効率を向上させることができます。

AIフレームワークの配布

モデルのトレーニングでは、どの並列戦略を使用する場合でも、その本質は、モデルを「垂直」または「水平」に分割し、個別の分割を異なるマシンに配置して計算し、コンピューティング リソースを最大限に活用することです。

現在の AI フレームワークでは、モデルのトレーニングを高速化するために、通常、複数の戦略を混合した並列アプローチが採用されています。複数の並列戦略のトレーニング モデルをサポートするには、異なる「分割」モデル部分がどのように通信するかを考慮する必要があります。

AIトレーニンググラフセグメンテーション

AIトレーニンググラフセグメンテーション

上図に示すように、AIコンピューティングフレームワークでは、元のネットワークモデルを分割し、異なるマシンに分散してコンピューティングを行う必要があります。ここでは、モデル内にSendノードとRecvノードを挿入することで通信を行います。

さらに、分散モデルトレーニングでは、モデルがセグメント化されているため、さまざまなモデルパーツが配置されているマシンにモデルパラメータを配置する必要もあります。トレーニングプロセスでは、さまざまなモデルノードのパラメータの相互作用と同期が行われるため、データとパラメータのノード間の同期も必要になります。これが分散トレーニングです。

これまでソフトウェアレベルでの分散戦略とアルゴリズムを紹介してきました。次に、ハードウェア上で通信がどのように実装されているかを見てみましょう。

通信ハードウェア

分散通信は、特に大規模なモデルや大量のデータを扱う場合、AI トレーニングにおいて非常に重要です。分散通信では、次の図に示すように、異なるデバイスまたはノード間でのデータ転送と調整が行われ、並列コンピューティングとモデル パラメータの同期が実現されます。

GPU サービス構造

GPU サービス構造

マシン内通信に関しては、いくつかの一般的なハードウェアがあります。

  • 共有メモリ: 複数のプロセッサまたはスレッドが同じ物理メモリにアクセスできるため、メモリ内のデータの読み取りと書き込みによって通信できます。共有メモリは、同じマシン上での並列コンピューティングに適しています。
  • PCIe (Peripheral Component Interconnect Express): PCIe バスはコンピューティング デバイスを接続するための標準インターフェイスであり、通常は GPU、アクセラレータ カード、またはその他の外部デバイスを接続するために使用されます。PCIe バスを通じて、異なるコンピューティング デバイス間でデータを転送し、分散コンピューティングを実現できます。
  • NVリンク: NVLink は、NVIDIA が開発した、GPU 間の直接通信を可能にする高速相互接続テクノロジです。NVLink は、PCIe よりも高い帯域幅と低いレイテンシを提供できるため、より高い通信パフォーマンスが求められるタスクに適しています。

マシン間通信に関して、一般的なハードウェアには次のものが含まれます。

  • TCP / IPネットワーク: TCP/IP プロトコルはインターネット通信の基礎であり、ネットワークを介して異なるマシン間でデータを転送できるようにします。分散コンピューティングでは、TCP/IP ネットワークはマシン間の通信とデータ転送に使用できます。
  • RDMA (リモート ダイレクト メモリ アクセス) ネットワーク: RDMA は、CPU を介さずにデータを 1 つのメモリ領域から別のメモリ領域に直接転送できる高性能ネットワーク通信テクノロジです。RDMA ネットワークは、低遅延で高スループットのデータ転送を実現する高性能コンピューティング クラスターの構築によく使用されます。

ハードウェアを理解した上で、通信を実現するためには集団通信機能を提供するライブラリが欠かせません。その中でも、最もよく使われる集団通信ライブラリの一つがCPU上で広く使われているMPI(Message Passing Interface)です。NVIDIA GPU上では、最もよく使われる集団通信ライブラリがNCCL(NVIDIA Collective Communications Library)です。

NVLink と NVSwitch

NVLink と NVSwitch

上の図に示すように、NCCL ライブラリを通じて、NVLink または NVSwitch を使用して異なる GPU を相互に接続できます。NCCL はアルゴリズム レベルで外部 API を提供し、これを介して複数の GPU 間での集合通信操作を簡単に実行できます。NCCL の API は、ブロードキャスト、リダクション、グローバル リダクション、グローバル同期などの一般的な集合通信操作をカバーしており、開発者に豊富で効率的な並列コンピューティング ツールを提供します。

集団コミュニケーション

集団通信は、プロセス グループ内のすべてのプロセスが関与するグローバル通信操作です。これには、送信、受信、コピー、グループ内プロセス バリア同期 (Barrier)、ノード間プロセス同期 (signal + wait) などの一連の基本操作が含まれます。これらの基本操作を組み合わせて、通信テンプレートのセット (通信プリミティブとも呼ばれます) を形成できます。たとえば、1 対多のブロードキャスト、多対 1 のギャザー、多対多のギャザー (all-gather)、1 対多のスキャッター (scatter)、多対 1 のリデュース、多対多のリデュース (all-reduce)、リデュースとスキャッターの組み合わせ (reduce-scatter)、多対多 (all-to-all) などです。以下では、そのうちのいくつかを簡単に紹介します。

集団コミュニケーション

集団コミュニケーション

Gather 操作は、複数のデータ送信者と 1 つのデータ受信者による多対 1 の通信プリミティブです。クラスター内の複数のノードから 1 つのノードにデータを収集できます。その逆の操作は Scatter に相当します。

ブロードキャストは、0 つのデータ送信者と複数のデータ受信者を持つ 0 対多の通信プリミティブです。ノード自身のデータをクラスター内の他のノードにブロードキャストできます。上図に示すように、マスター ノード XNUMX がブロードキャストを実行すると、マスター ノード XNUMX から他のノードにデータがブロードキャストされます。

Scatter は、1 対多のデー​​タ分散です。GPU カード上のデータをシャードに分割し、他のすべての GPU カードに分散します。

AllReduce は、複数のデータ送信者と複数のデータ受信者を持つ多対多の通信プリミティブです。クラスター内のすべてのノードに対して同じ Reduce 操作を実行し、クラスター内のすべてのノードに対するデータ削減操作の結果をすべてのノードに送信できます。簡単に言うと、AllReduce は、クラスター内の各 GPU カードのすべての GPU カード (SUM など) のデータを削減する、多対多のデー​​タ削減操作です。

AllGather は、複数のデータ送信者と複数のデータ受信者を持つ多対多の通信プリミティブです。クラスター内の複数のノードからマスター ノード (Gather) にデータを収集し、収集したデータを他のノードに配布できます。

AllToAll 操作は、各ノードのデータをクラスター内のすべてのノードに分散し、各ノードはクラスター内のすべてのノードのデータも収集します。AllToAll は AllGather の拡張です。違いは、AllGather 操作では、異なるノードによって特定のノードから収集されるデータは同じであるのに対し、AllToAll では、異なるノードによって特定のノードから収集されるデータは異なることです。

NVLink と NVSwitch は、NVIDIA が導入した 2 つの革新的なテクノロジーであり、CPU と GPU、GPU と GPU が連携して効率的に通信する方法を再定義します。

NVLink は、高度なバスおよび通信プロトコルです。NVLink は、ポイントツーポイント構造とシリアル伝送を使用して、中央処理装置 (CPU) とグラフィックス処理装置 (GPU) を接続します。また、複数のグラフィックス処理装置 (GPU) を接続するためにも使用できます。

NVSwitch: 高速相互接続テクノロジー。独立した NVLink チップとして、最大 18 個の NVLink インターフェイスを提供し、複数の GPU 間で高速データ転送を実現します。

これら 2 つのテクノロジの導入により、GPU クラスターやディープラーニング システムなどのアプリケーション シナリオで通信帯域幅が向上し、レイテンシが低減され、システム全体のパフォーマンスと効率が向上します。

NVLink開発

NVLink開発

上図に示すように、NVLinkはPascalアーキテクチャからHoppeアーキテクチャまで2024世代の開発と進化を経てきました。1800年のGTCカンファレンスで、NVIDIAはBlackwellアーキテクチャを発表し、その中でNVLinkが再度アップデートされ、相互接続帯域幅がXNUMXGB/sの第XNUMX世代NVLinkがリリースされました。

NVLink がアップデートされるたびに、各 GPU の相互接続帯域幅は継続的に向上しています。NVLink 間で相互接続できる GPU の数も、第 4 世代の 18 個から第 XNUMX 世代の XNUMX 個に増加しています。最新の Blackwell アーキテクチャでは、相互接続できる GPU の最大数は増加していません。

NVLink開発2

NVLink開発

上図からわかるように、P100ではNVLink40本あたり100GB/sしかありませんが、第100世代のV50からHXNUMXではNVLinkXNUMX本あたりXNUMXGB/sとなっています。リンク数を増やすことで全体の帯域幅が拡大しています。

NVSwitch 開発

NVSwitch テクノロジは、Volta アーキテクチャから Hopper アーキテクチャまで、300 世代にわたって進化と発展を遂げてきました。各世代で GPU ごとに相互接続されるチップレットの数は 900 個で一定であり、相互接続の基本構造は安定して一貫しています。NVLink アーキテクチャのアップグレードにより、NVSwitch は NVLink が特に担うチップ モジュールであるため、GPU 間の帯域幅は Volta アーキテクチャの XNUMXGB/秒から Hopper アーキテクチャの XNUMXGB/秒へと大幅に増加しました。

次に、サーバー内の NVLink と NVSwitch の関係を見てみましょう。

NVSwitch 開発

NVSwitch 開発

上図に示すように、P100 には NVLink のみがあり、GPU は CubeMesh を介して相互接続されています。P100 では、各 GPU に 4 つの相互接続があり、4 つごとに CubeMesh が形成されます。

V100 では、各 GPU は NVSwitch を介して別の GPU と相互接続できます。A100 では、NVSwitch がさらにアップグレードされ、多くのリンクが節約されました。各 GPU は、NVSwitch を介して他の GPU と相互接続できます。

H100 では、新たな技術革新がありました。8 台のマシンに 100 枚の H900 GPU カードがあり、100 枚の H100 カード間の双方向相互接続帯域幅は 72 GB/秒です。DGX H4 システムでは、100 つの NVSwitch が NVLink ネットワーク スイッチを介して他の DGX H100 システムに接続するための 72 個の NVLink4 接続を予約しており、これにより DGX H3.6 SuperPod システムの形成が容易になります。XNUMX 個の NVLinkXNUMX 接続の合計双方向帯域幅は、約 XNUMX TB/秒です。

まとめ

ビッグモデルの時代において、人工知能の開発は強力なコンピューティング リソース、特に GPU リソースにますます依存するようになっています。これらの大規模モデルをトレーニングするには、モデル トレーニング タスクを複数の GPU またはコンピューティング ノードに分散する分散並列戦略を採用する必要があります。これには、データ並列処理やモデル並列処理などの戦略だけでなく、異なるコンピューティング ユニット間でのデータの高速転送と同期を確保するための NVLink や NVSwitch などの効率的な分散通信テクノロジも必要です。

大規模モデルの時代の AI フレームワークは、さまざまな分散並列戦略をサポートする必要があるだけでなく、効率的なノード間通信をサポートするために、NVLink や NVSwitch などの分散通信テクノロジを取り入れて考慮する必要もあります。

今後、モデルのサイズが拡大するにつれて、コンピューティング リソースの需要は高まり続けます。分散並列戦略を継続的に最適化し、より効率的な分散通信テクノロジを開発する必要があります。これは、ソフトウェア上の戦略最適化の更新だけでなく、ハードウェア レベルでの最適化の更新も含まれます。

NVLink と NVSwitch は、ディープラーニング モデルのトレーニングの速度と効率をさらに向上させるために、継続的に更新されています。これらの通信技術の革新と進歩を理解することで、より大規模なモデルをより適切にトレーニングし、人工知能をさらに深いレベルに押し上げることができます。

コメント

上へスクロール