シングル カード トレーニングが DistributedDataParallel トレーニングに変更されました

1. 2 つの分散トレーニング方法

1.DataParallel (DP): 実装が簡単で、コードが少なく、起動が高速です。しかし、速度が遅く、負荷の不均衡の問題があります。単一プロセス、マルチスレッド。メイン カードは、他のカードよりも多くのビデオ メモリを占有します。 Apex を使用した混合精度トレーニングはサポートされていません。これは、ずっと前に Pytorch 公式によって提供された解決策です。 Python GIL の制限により、DP の動作原理は、バッチ サイズの入力データを複数の GPU に均等に分割して計算することです (ここで、バッチ サイズは分割する GPU の数より大きくなければならないことに注意してください)。


2. DistributedDataParallel (DDP): All-Reduce モード。元々は分散トレーニング (複数のマシンと複数のカード) を目的としていましたが、単一のマシンと複数のカードにも使用できます。構成は少し複雑です。マルチプログレス。データの分布は比較的バランスが取れています。新世代のマルチカードトレーニングメソッドです。 torch.distributed ライブラリを使用して並列処理を実現します。 GPU および CPU の分散トレーニング サポートを含む分散サポートは、マルチマシン ネットワーク間でテンソル データを交換するための MPI のようなインターフェイスを提供する torch.distributed ライブラリによって提供されます。いくつかの異なるバックエンドと初期化方法をサポートしています。 DDP は、Ring-Reduce のデータ交換方式により通信効率を向上させ、複数のプロセスを起動することで Python GIL の制限を緩和することで、学習速度を向上させます。

2. DDP の実装手順

1. インポートが必要なパッケージ

このうち、dist はマルチスレッド通信を担当し、DDP はモデルの配信を担当します。

2. 通信プロセスの初期化

local_rank が -1 に設定されている場合

3. DistributedSampler を使用してデータをカプセル化する 

4. モデルを cuda に配置し、カプセル化します。

 5. トレーニング中にデータをデバイスに保存します

注文の実行:

python3 -m torch.distributed.launch --nproc_per_node=4 --master_port=60055 train.py --GPUS 4,5,6,7

おすすめ

転載: blog.csdn.net/m0_62278731/article/details/134185975