データ並列とは、大規模な機械学習モデルの訓練を効率化するため、巨大な訓練データを複数の計算資源に分割し、それぞれが異なるデータを同時に処理する並列化手法です。モデル全体の構造は各デバイスに複製しつつ、計算を分散させることで学習時間を大幅に短縮できます。
データ並列とは
データ並列とは、訓練データを分割して複数のGPUなどの計算資源に割り当て、それぞれが並行して勾配計算を行うことで学習を高速化する手法です。
詳しく解説
ディープラーニングの大規模化に伴い、膨大な訓練データの処理には莫大な時間がかかるようになりました。データ並列では、利用可能な複数のGPUやノードに全く同じモデルの複製を配置し、入力データだけを分割してそれぞれのデバイスに読み込ませます。各デバイスは独立して順伝播と逆伝播を行い、自身の担当データに対する勾配を計算します。その後、全てのデバイスで計算された勾配を集約し、モデルのパラメータを同期・更新することで、単一のデバイスを使うよりも圧倒的に短い時間で学習を完了させることができます。このプロセスにおいて、パラメータの同期には勾配共有などの通信処理が不可欠です。
具体例・使われ方
例えば、100万枚の画像データを使った画像分類モデルの訓練を行う際、4基のGPUを使用するデータ並列を適用します。この場合、1つのGPUあたり25万枚の画像を割り当て、それぞれのGPUで同時に畳み込みニューラルネットワークの計算を進めます。計算が終わったらお互いの勾配を持ち寄り、パラメータを更新して次のバッチ処理へ移行します。
似た用語との違い
モデル並列が巨大なネットワーク構造自体を分割して複数のデバイスに配置するのに対し、データ並列はモデル全体を各デバイスに複製し、データ側を分割して処理する点が異なります。モデルが大きすぎてメモリに載らない場合はモデル並列、データ量が膨大で処理に時間がかかる場合はデータ並列が選択されます。
注意点
データ並列を大人数のデバイスで行う場合、デバイス間の通信ボトルネックが性能低下の原因となることがあります。また、バッチサイズを実質的に大きくしすぎると、汎化性能が低下する恐れがあるため、適切な学習率の調整や勾配共有の最適化が必要です。