banner
Fight4354

Fight4354

AI,Chem,Science,Study,Share,Hobby,LLM,Life,Sport

トレーニングの並行

自己写

训练並行の理由#

単一の GPU 計算には限界があり、複数の GPU を並行処理することで、トレーニング効率を向上させます。

训练并行の次元#

データ並行(DP)#

mp_size = 1、batch = 64、dp_size = 4 の場合
1 つのバッチを 4 つに分割し、それぞれの部分で 16 サンプルを処理します。各部分には完全なモデルパラメータがあります。
パラメータの更新は、4 つの部分の平均 Loss を合計し、その後にパラメータを更新します(実際には 1 つのバッチの Loss の平均 * 学習率)。
各バッチの計算が終わるたびにモデルパラメータの同期が必要です。

モデル並行(MP)#

mp_size = 4、batch = 64、dp_size = 1 の場合
各部分で完全なバッチのデータを計算する必要があり、各部分には 4 分の 1 のモデルパラメータしかありません。それぞれの部分の重みを更新し、前向き計算と逆向き計算の際にも通信が必要です。
MP にはグローバルパラメータの一貫性の要求はなく、各ランクのパラメータは元々異なるため、同期更新は必要ありません。

MP&DP#

実際のアプリケーションでは、MP と DP を一緒に使用できますが、上記のルールを守る必要があります。

GPT 写

训练并行のまとめ:DP / MP / DP+MP#

1. なぜトレーニング並行が必要なのか?#

単一の GPU のメモリと計算能力には限界があり、大規模な深層学習モデルを支えるのが難しいです。
複数の GPU を使用することで:

  • 計算負荷を分散する

  • 訓練可能なモデルの規模を拡大する

  • トレーニング速度を向上させる

深層学習のトレーニングの並行処理は一般的に 2 つのカテゴリに分けられます:

  • データ並行(Data Parallel, DP)

  • モデル並行(Model Parallel, MP)

これらは混合並行(DP + MP)として組み合わせることもできます。


2. データ並行(DP)#

仮定:

  • dp_size = 4

  • mp_size = 1

  • batch = 64

データ並行は 1 つのバッチを複数のサブバッチに分割します:

  • GPU0:16 サンプル

  • GPU1:16 サンプル

  • GPU2:16 サンプル

  • GPU3:16 サンプル

各 GPU は完全なモデルパラメータを保持しています。

各 GPU はローカルサンプルの勾配を独立して計算します:

g0 = ∇θ L0
g1 = ∇θ L1
g2 = ∇θ L2
g3 = ∇θ L3

その後、Allreduce (sum) を通じて勾配を同期します:

g_global = g0 + g1 + g2 + g3

最終的に dp_size で割って平均勾配を得ます:

g_avg = g_global / 4

各 GPU は同じ勾配を使用してパラメータを更新します:

θ ← θ - lr * g_avg

したがって、DP の本質は:

  • データの分割

  • 勾配の同期

  • パラメータの一貫性の保持


3. モデル並行(MP)#

仮定:

  • mp_size = 4

  • dp_size = 1

  • batch = 64

モデル並行はモデルパラメータを特定の次元で異なる GPU に分割します。
例えば全結合層の重み:

W = [ W0 | W1 | W2 | W3 ]

各 GPU は完全なバッチの入力 X(64 × d_in)を見ます。

各 GPU は自分の行列乗算を実行します:

GPU0: Y0 = X @ W0
GPU1: Y1 = X @ W1
GPU2: Y2 = X @ W2
GPU3: Y3 = X @ W3

完全な出力は結合されます:

Y = [Y0 | Y1 | Y2 | Y3]

したがって、前向き伝播は Allgather を通じて出力を結合する必要があります。


逆伝播#

各 GPU は自分が担当する勾配を計算します:

dW_i = X^T @ dY_i

しかし、入力勾配 dX はすべての GPU の寄与を合計する必要があります:

dX = dX0 + dX1 + dX2 + dX3

したがって、Allreduce (sum) が必要です。


モデル並行の核心思想#

MP はモデルを分割して独立にトレーニングするのではなく:

複数の GPU が協力して 1 回の前向きと逆向き伝播を完了し、活性化と勾配を同期する必要があります。

次のものを使用しなければなりません:

  • Allgather(活性化の結合)

  • Allreduce(入力勾配の合計)

  • ReduceScatter(Megatron-LM の最適化)


MP の特徴#

  • パラメータの分割

  • データの完全性(各 GPU は全バッチを見ます)

  • 各 GPU は自分のパラメータの断片のみを更新します

  • パラメータは元々異なるため、一貫性を保つ必要はありません

  • しかし、活性化 / 勾配は通信して同期する必要があります


4. 混合並行(DP + MP)#

実際の大規模モデルのトレーニングでは通常 DP と MP を同時に使用します。

GPU クラスターの構造は 2D グリッドと見なすことができます:

  • 行:DP グループ(異なるデータを処理)

  • 列:MP グループ(モデルの分割)

通信モード:

  • DP 次元:勾配の同期(Allreduce)

  • MP 次元:協力計算(Allgather / Allreduce / ReduceScatter)

DP+MP は GPT-3、PaLM、Megatron-LM などの大規模モデルのトレーニングの核心です。


5. まとめ#

データ並行(DP)#

  • データの分割

  • モデルの複製

  • 勾配の同期

  • パラメータの一貫性

モデル並行(MP)#

  • モデルの分割

  • データの完全性

  • 活性化 / 勾配の通信

  • パラメータの断片の独立更新

DP + MP#

  • 2 次元並行モード

  • 大規模モデルのトレーニングの基礎

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。