大規模なモデルとデータを現実的な時間で学習するために、複数のGPUや計算ノードで学習を分担する分散深層学習を学ぶ項目です。2大方式であるデータ並列化とモデル並列化の仕組みと使い分けを理解します。

📖 概要

深層学習の性能はモデル規模とデータ量に大きく依存しますが、その分だけ学習時間も膨大になります。1台のGPUでは数週間かかる学習も珍しくなく、また巨大なモデルはそもそも1台のGPUのメモリに載りきらないこともあります。こうした課題に対し、複数のGPUや複数の計算機(ノード)を協調させて学習を高速化・大規模化するのが分散深層学習です。

分散の方法は「何を分割するか」で大きく2つに分かれます。データ並列化は、同じモデルの複製を各デバイスに持たせ、ミニバッチを分割して並列に処理する方式で、学習のスループット向上が目的です。モデル並列化は、モデル自体を分割して複数デバイスに配置する方式で、1台に載りきらない大規模モデルを扱うことが主な目的です。両者は排他的ではなく、大規模な学習では組み合わせて使われます。E資格では、それぞれの仕組み・目的・課題(通信や同期のオーバーヘッド)の対比が問われやすい項目です。

🔍 キーワード解説

分散深層学習

分散深層学習は、複数のGPU・複数ノードに計算を分担させて深層学習の学習(または推論)を行う技術の総称です。狙いは主に2つで、(1) 学習時間の短縮(スループットの向上)、(2) 単一デバイスのメモリに収まらない大規模モデル・大バッチの実現です。一方で、デバイス間の通信や同期が新たなボトルネックになるため、「計算の分割」と「通信コスト」のバランスをどう取るかが設計の中心課題になります。分割の対象によって、以下のデータ並列化とモデル並列化に大別されます。

データ並列化

データ並列化は、同一のモデルの複製(レプリカ)を各デバイスに配置し、ミニバッチを分割してそれぞれのデバイスで並列に順伝播・逆伝播を行う方式です。各デバイスで計算された勾配を集約(平均)し、すべてのレプリカが同じ更新を適用することで、モデルの一貫性を保ちます。勾配の集約には、全デバイス間で総和・平均を効率よく計算するAllReduceと呼ばれる集団通信や、勾配を中央のパラメータサーバに集めて更新後のパラメータを配り直すパラメータサーバ方式が用いられます。

また、更新のタイミングによって同期型と非同期型に分かれます。同期型は全デバイスの勾配が揃うのを待ってから更新するため学習の挙動が安定しますが、最も遅いデバイスに全体が引きずられます。非同期型は各デバイスが揃うのを待たずに更新するため待ち時間は減りますが、古いパラメータに基づく勾配(stale gradient)で更新してしまい、学習が不安定になりうるという欠点があります。データ並列化は実装が比較的容易で広く使われますが、デバイス数に比例して実効バッチサイズが大きくなるため、学習率の調整が必要になることがある点にも注意が必要です。

モデル並列化

モデル並列化は、モデルのパラメータや計算グラフそのものを分割し、複数のデバイスに分担させる方式です。各デバイスはモデルの一部だけを保持するため、1台のメモリに収まらない大規模モデルの学習が可能になります。分割の仕方には、層のまとまりごとに縦に切って各デバイスへ順に配置する方法(層間の分割)と、1つの層の中の巨大な行列演算を複数デバイスで分担する方法(層内の分割)があります。

層ごとに分割した場合、あるデバイスの出力が次のデバイスの入力になるため、素朴に実装すると前のデバイスの計算を待つ間、他のデバイスが遊んでしまいます。この遊休時間を減らすために、ミニバッチをさらに小さなマイクロバッチに分けて流れ作業のように処理するパイプライン並列と呼ばれる工夫が用いられます。モデル並列化はデバイス間でActivation(中間出力)のやり取りが発生するため通信設計が難しく、データ並列化と比べて実装の複雑さが高い方式です。

📝 試験でのポイント

💡 ポイント
  • 最重要は「何を分割するか」の対比です。データ並列化=データ(ミニバッチ)を分割しモデルは複製、モデル並列化=モデルを分割、という対応を確実に押さえましょう
  • 目的の違いも問われます。データ並列化は主に学習の高速化、モデル並列化は主にメモリに載らない大規模モデルへの対応です
  • データ並列化では「勾配の集約(平均)」が必須であること、AllReduceやパラメータサーバといった集約方法の名称を覚えておきましょう
  • 同期型と非同期型の違い(同期型は安定だが最遅デバイス待ち、非同期型は速いが古い勾配による不安定さ)は定番の対比です
  • モデル並列化のデバイス遊休問題と、その緩和策としてのパイプライン並列(マイクロバッチ化)も整理しておきましょう

📚 まとめ

分散深層学習は、複数のGPU・ノードで学習を分担し、学習時間の短縮と大規模モデルの実現を図る技術です。データ並列化はモデルを複製してミニバッチを分割し、勾配を集約して一貫した更新を行う方式で、高速化に向きます。モデル並列化はモデル自体を分割して配置する方式で、単一デバイスに収まらないモデルを扱えますが、通信・遊休の管理が課題です。両者の分割対象・目的・課題の対比を軸に整理しておきましょう。