トレンドトピック
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
あなたはGoogleのMLエンジニアの面接を受けていますね。
インタビュアー:1,000台のGPUでLLMを訓練する必要があります。すべてのGPUが学習したものを共有するにはどうすればよいでしょうか?
あなた:中央のパラメータサーバーを使って重みを集約し、再分配してください。
面接終了。
見落とした内容は以下の通りです:
マルチGPUトレーニングにおける主要なランタイムボトルネックの1つは、GPU同期中に発生します。
たとえば、データ並列処理によるマルチ GPU トレーニングでは、次のようになります。
- 同じモデルが異なる GPU に分散されます。
- 各 GPU は、データセット全体の異なるサブセットを処理します。
これ👇をチェックしてください
これにより、デバイスごとに異なる勾配が生じます。
したがって、各GPUデバイスのモデルパラメータを更新する前に、勾配を他のすべてのデバイスに伝えて同期させる必要があります。
次に、2つの一般的な戦略を理解しましょう!
アルゴリズム1) 全還元
明らかな方法は、グラデーションをあるデバイスから他のすべてのデバイスに送信して同期させることです。
しかし、これは高い帯域幅を消費します。
すべてのGPUが「N」要素を持ち、「G」GPUが存在すると、合計でG*(G-1)*N要素👇が転送されます
すべての要素を1つのGPUに転送し、最終値を計算して他のすべてのGPUに返送することで最適化できます。
これは大きな進歩です。
しかし今は単一のGPUが勾配を受け取り、計算し、返信しなければならず、これはスケールしません。
アルゴリズム2) 環還元
フェーズ#1) シェア削減
まず、勾配は各GPUでGセグメントに分割されます(G = 総GPU数)。
これ👇を見て
反復では、各 GPU はセグメントを次の GPU に送信します。
- GPU1 は a₁ を GPU2 に送り、GPU2 は b₁ に加算されます。
- GPU2 は b₂ を GPU3 に送信し、GPU3 は c₂ に加算されます
- GPU3 は c₃ を GPU4 に送り、GPU4 は d₃ に加算されます
- GPU4 は d₄ を GPU1 に送信し、GPU1 は d₄ に加算されます
これ👇をチェックしてください
このプロセスを再度行います:
- GPU1は(d₄+a₄)をGPU2に送り、そこでb₄に加算されます。
- GPU2は(a₁+b₁)をGPU3に送り、そこでc₁に加算します。
- GPU3は(b₂+c₂)をGPU4に送り、そこでd₂に加えられます。
- GPU4は(c₃+d₃)をGPU1に送り、そこでa₃に加算します。
これ👇を見て
最終的な反復では、以下のセグメントが次のGPUに転送されます。
これにより、各GPUが1つのセグメント全体を持ち、その完全なセグメントを他のすべてのGPUに転送できる状態になります。
これ👇を見て
フェーズ#2) シェアオンリー
各GPUが1つのセグメントを持っているので、その完全なセグメントを他のすべてのGPUに転送できます。
このプロセスは上で説明したものと似ているため、詳細は控えます。
以下👇に反復1を示します
次に、2回目と3回目の反復を行います。
これらはフェーズ1で学んだ内容と似た方法で実施されます。
これ👇を見て
はい、どうぞ!
GPU間のモデルの重みは同期されています。
転送される要素は「シングルGPUマスター」方式と同じですが、このリング方式は1つのGPUに全負荷をかけないため、はるかにスケーラブルです。
これ👇を見て

デフォルトでは、ディープラーニングモデルは複数のGPUがあっても、学習には1つのGPUのみを使用します。
モデルを訓練する理想的な方法は、トレーニングワークロードを複数のGPUに分散させることです。
この図はマルチGPUトレーニング👇のための4つの戦略を示しています
362.5K
トップ
ランキング
お気に入り

