データ並列(Data Parallelism)とは
Data Parallelism
モデルの複製を複数デバイスに配置し、ミニバッチを分割して並列に学習を進める分散学習手法
概要
データ並列は、分散学習における最も基本的な並列化手法の1つ。同一のモデルパラメータの複製(レプリカ)を複数のGPUやデバイスに配置し、1つのミニバッチをデバイス数に応じて分割してそれぞれのレプリカに割り当てる。 各デバイスは割り当てられたサブバッチを使って独立に順伝播・逆伝播を計算し、得られた勾配をAll-Reduceなどの集団通信によってデバイス間で同期・平均化してからパラメータを更新する。これにより、全デバイスのモデルパラメータは常に同一の状態を保つ。 PyTorchのDistributedDataParallel (DDP) やTensorFlowのMirroredStrategyなど、主要な深層学習フレームワークで標準的にサポートされる。 モデル並列がモデル自体を複数デバイスに分割するのに対し、データ並列はモデル全体が1つのデバイスのメモリに収まることを前提とするため、モデルサイズが大きくなるとメモリ制約に直面しやすい。この制約に対処するため、勾配・オプティマイザ状態・パラメータをデバイス間で分割して保持するZeRO (Zero Redundancy Optimizer) のような手法も派生している。
利点
- 既存フレームワークの標準機能として利用でき、実装が比較的シンプル
- デバイス数を増やすほどスループットが向上しやすく、スケールさせやすい
欠点
- モデル全体が1デバイスのメモリに収まる必要があり、超大規模モデル単独では不十分になりやすい
- デバイス数の増加とともに勾配同期の通信オーバーヘッドが大きくなる
関連用語
よくある質問
モデル並列との違いは何ですか?
データ並列はモデルの複製を各デバイスに配置しバッチを分割するのに対し、モデル並列はモデル自体を複数デバイスに分割して配置する点が異なる。両者は組み合わせて使われることも多い。
参考文献
- DocumentationPyTorch: DistributedDataParallel