データ並列学習

Data Parallelism

データ並列学習とは

データ並列学習(Data Parallelism)とは、分散学習の手法の一つで、同じモデルのコピーを複数のGPUに配置し、学習データを分割して各GPUで同時に処理する方式です。最もシンプルで広く使われる分散学習の形態であり、モデルが単一のGPU に収まる場合に有効です。

データ並列の仕組み

学習データのミニバッチを各GPUに均等に分配し、各GPUが独立にフォワードパスとバックワードパスを実行します。各GPUで計算された勾配をAllReduce操作で集約し、すべてのGPUが同じ勾配でモデルパラメータを更新します。これにより、GPUの数に比例して実効的なバッチサイズが増加し、学習速度が向上します。

PyTorchでのデータ並列

PyTorchではDistributedDataParallel(DDP)がデータ並列の標準的な実装です。DataParallelは単一ノード向けの簡易版ですが、通信効率に劣るためDDPが推奨されています。DDPは勾配のバケット化とAllReduceの通信・計算のオーバーラップにより、高い通信効率を実現します。

スケーリング時の課題

GPU数が増えると実効バッチサイズが大きくなり、学習の収束に影響を与える場合があります。ウォームアップ学習率スケジューリングやLARS/LAMBオプティマイザなどのテクニックが、大バッチ学習での性能低下を防ぐために使われます。