パイプライン並列学習

Pipeline Parallelism

パイプライン並列学習とは

パイプライン並列学習(Pipeline Parallelism)とは、深層学習モデルの層をグループに分割し、各グループを異なるGPUに配置して、データをパイプラインのように流して処理する分散学習の手法です。モデル並列の一形態であり、大規模モデルの学習においてGPUメモリの制約と計算効率のバランスを取る技術です。

パイプラインの仕組み

モデルの層を複数のステージに分割し、各ステージを異なるGPUに割り当てます。ミニバッチをさらに小さなマイクロバッチに分割し、各マイクロバッチをパイプラインに流します。GPU1がマイクロバッチ2を処理している間にGPU2がマイクロバッチ1を処理するというように、複数のGPUが同時に異なるマイクロバッチを処理します。

バブル問題

パイプライン並列の最大の課題はパイプラインバブル(bubble)です。パイプラインの充填と排出の際にGPUがアイドル状態になる時間が発生します。GPipe、PipeDream、Interleaved 1F1Bなどのスケジューリング手法がバブルの最小化を目指しています。マイクロバッチ数を増やすことでバブルの割合を減らすことが可能です。

実用での位置づけ

パイプライン並列はノード間の通信量がテンソル並列より少ないため、ノード間の並列化に適しています。大規模学習では、ノード内でテンソル並列、ノード間でパイプライン並列とデータ並列を組み合わせた3D並列が標準的な構成となっています。