データ並列学習とは
データ並列学習(Data Parallelism)とは、分散学習の手法の一つで、同じモデルのコピーを複数のGPUに配置し、学習データを分割して各GPUで同時に処理する方式です。最もシンプルで広く使われる分散学習の形態であり、モデルが単一のGPU に収まる場合に有効です。
| ひとことで言うと | 同じモデルを各GPUに複製し、データを分けて同時に学習する方式。 |
|---|---|
| 何がうれしいか | 実装が簡単で効果も大きい。分散学習の第一選択。 |
| 注意点 | モデルが1枚のGPUに収まることが前提。収まらなければ他の方式へ。 |
データ並列の仕組み
学習データのミニバッチを各GPUに均等に分配し、各GPUが独立にフォワードパスとバックワードパスを実行します。各GPUで計算された勾配をAllReduce操作で集約し、すべてのGPUが同じ勾配でモデルパラメータを更新します。これにより、GPUの数に比例して実効的なバッチサイズが増加し、学習速度が向上します。
1モデルを全GPUに複製同じものを配置
▶
2データを分割各GPUが別の分を担当
▶
3並行して計算それぞれ勾配を算出
▶
4勾配を平均全GPUで共有
▶
5同じ更新を適用モデルを同期
PyTorchでのデータ並列
PyTorchではDistributedDataParallel(DDP)がデータ並列の標準的な実装です。DataParallelは単一ノード向けの簡易版ですが、通信効率に劣るためDDPが推奨されています。DDPは勾配のバケット化とAllReduceの通信・計算のオーバーラップにより、高い通信効率を実現します。
スケーリング時の課題
GPU数が増えると実効バッチサイズが大きくなり、学習の収束に影響を与える場合があります。ウォームアップ学習率スケジューリングやLARS/LAMBオプティマイザなどのテクニックが、大バッチ学習での性能低下を防ぐために使われます。