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
作成中🪴
Reference
この問題について(DeepSpeed Pipeline Parallelism), 我々は、より多くの情報をここで見つけました
https://velog.io/@nawnoes/DeepSpeed-Pipeline-Parallelism
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
def forward(self, inputs):
x = inputs
for layer in self.layers:
x = layer(x)
return x
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)
Reference
この問題について(DeepSpeed Pipeline Parallelism), 我々は、より多くの情報をここで見つけました https://velog.io/@nawnoes/DeepSpeed-Pipeline-Parallelismテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol