データ並列/モデル並列 (レイヤー間、レイヤー内)/パイプライン並列 -> ゼロ > Lora

  • データ並列処理 (データ並列処理、DP): カードがあると仮定すると、各カードはモデルを保存し、各反復 (反復/ステップ) はバッチデータを同じサイズのマイクロバッチに分割し、各カードはマイクロバッチに従って取得されます。バッチ データは個別に勾配を計算し、次に AllReduce を呼び出して勾配の平均を計算し、各カードはパラメータを個別に更新します。
  • モデルの並列性 (モデルの並列性/テンソルの並列性、MP/TP): 一部のテンソル/レイヤーは大きすぎて 1 枚のカードに収まらないため、テンソルを複数のピースに分割し、1 つのカードを 1 つのピースに格納します。
  • パイプライン並列処理 (PP): ネットワークをレイヤーごとに複数のグループに分割し、1 つのグループを 1 つのカードに格納します。

モデルの並列性

モデルの並列処理: レイヤー間モデルの並列処理 (レイヤー間) とレイヤー内モデルの並列処理 (レイヤー内)。
NUS の記事は、基本的に層内モデルの並列処理を目的としており、テンソル並列処理とも呼ばれます。
レイヤー内モデルの並列処理では、入力マトリックスまたはパラメーター マトリックスを 1 つの次元でセグメント化し、スライスをさまざまなデバイスに配置できます。典型的な例は、1D メガトロンです。
レイヤー間モデル並列とは、モデルのレイヤーを細分化することであり、パイプライン並列と呼んでいるフレームワーク会社も業界内にはたくさんありますが、レイヤー間モデル並列は、本当に合理化された場合にのみパイプライン並列と呼ぶことができるというのが私の見解です。 .
ここに画像の説明を挿入
1D 2D 2.5D 3D モデル並列の詳細な紹介:
GPT の異なるレイヤーの並列埋め込み自己攻撃 MLP

ゼロ

ゼロ 1 2 3

ZeRO: Memory Optimizations Toward Training Trillion Parameter Models が
SC 20 で公開されました。DeepSpeed プロジェクトは、もともと論文の ZeRO メソッドの公式な実装でした。
ZeRO-Offload: Democratizing Billion-Scale Model Training が ATC 21 に公開されました.
ZeRO-Infinity: Breaking the GPU Memory Wall for Extreme Scale Deep Learning が SC 21 に公開されました. ZeRO-Infinity は典型的な産業スタイルであり、非常に大規模なトレーニングを行います。
参照: https://zhuanlan.zhihu.com/p/428117575
deepspeed は主にこの方法を使用します

ローラ

低ランク適応

テンソル並列処理

Tensor Model Parallelism (Tensor Model Parallelism)、メガトロンはこの方法を使用
XA = Y

Row Parallelism (Row Parallelism)
は、A を行に従って 2 つの部分に分割することです。
ここに画像の説明を挿入

列平行
Y=[Y1,Y2]

MLP
最初の全結合層の場合: 列分割を使用する
2 番目の全結合層の場合: 行分割を使用する

おすすめ

転載: blog.csdn.net/weixin_36378508/article/details/129838193