DeepSpeed Pipeline Parallelism

4254 ワード

DeepSpeed Pipeline Parallelism


深度速度で使用するPipelineの平行性を整理
https://www.deepspeed.ai/tutorials/pipeline/マニュアルを参照
深さ速度v 0.3からパイプ分流術をサポートします.Pipeline Parallelisticsはモデルの層を分割することにより,深さ学習においてメモリと計算効率を向上させる.深さ速度トレーニングエンジンは、Megatron−LMのようにモデル並列性と組み合わせることができる流水ライン並列性およびデータを提供する.深さ速度グループは最近,3 D並列表示により兆元のパラメータを学習できるようになった.
DeepSpeed: Extreme-scale model training for everyoneを参照

深さ蓄積はパイプの平行度を抽出するための勾配蓄積である.学習に用いるバッチは、pipeline stageに従って並列処理されるマイクロバッチ(micro-batch)に分けられる.マイクロレイアウトの場合、順方向パスがフェーズで完了すると、アクティブメモリはパイプライン内で次のフェーズと通信する.次のmicro-batchの逆伝達が完了すると、アクティブ勾配はパイプラインに沿って後方に通信します.各backpassは勾配を領域的に蓄積し、その後、すべてのデータ並列グループは勾配を並列に約簡略化する.最後に、オプティマイザはモデルの重量を更新します.

上の図では、深さ速度は、8つのマイクロレイアウト2-way data parallelismおよび2-stage pipeline parallelismを用いて学習されることがわかる.GPU 0と2は流水ラインで並列に行われ、forwardFとbackwardはBで交互に行われ、勾配は並列データのGPU 1と3の値とともにall-reduceARである.

Pipeline Plallelismの起動


深さ速度は流水線の並列学習過程の簡素化と加速を追求する.以下では,AlexNetモデルを用いて,深さ速度におけるハイブリッドデータとパイプ並列学習について議論する.

Expressing Pipeline Models


Pipelineパラレルを実現するには、レイヤのシーケンスで表示する必要があります.forward passでは、各レイヤは前のレイヤの出力を入力として使用する必要があります.パラレルラインのためには、次のフォームに従う必要があります.

Basic

def forward(self, inputs):
    x = inputs
    for layer in self.layers:
        x = layer(x)
    return x
pipelineパラレルモデルの場合、torch.nn.Sequentialは便利なコンテナであり、深さで修正せずにパラレル化を使用することができる.
net = nn.Sequential(
    nn.Linear(in_features, hidden_dim),
    nn.ReLU(inplace=True),
    nn.Linear(hidden_dim, out_features)
)
from deepspeed.pipe import PipelineModule
net = PipelineModule(layers=net, num_stages=2)
PipelineModuleモジュールはlayersパラメータによってモデルを構築する層シーケンスとして使用され、初期化後netは2つの流水ラインレベルに分けられ、対応するGPUに移行する.2つのGPUよりも多くのGPUがある場合,深さ速度はハイブリッドデータを用いて並列化される.
GPUの総数はパイプラインステージの数に分けることができるはずです.(GPU総数/パイプライン状態数)
メモリ効率モデルの開発:Memory-Efficient Model Constructionを参照

AlexNet


作成中🪴