モデル並列(Model Parallelism)とは、ニューラルネットワークのモデル自体を複数のGPUに分割して配置する並列化手法です。1台のGPUのメモリに収まりきらない大規模モデルの学習を可能にするために使用され、大規模言語モデルの開発において不可欠な技術です。
モデル並列の必要性
GPT-3(1750億パラメータ)やGPT-4(推定数兆パラメータ)のような超大規模モデルは、1台のGPUのVRAM(80〜192GB)に収まりません。モデル並列により、モデルのレイヤーやテンソルを複数のGPUに分割することで、単一GPUのメモリ制約を超えた巨大モデルの学習が可能になります。
| ひとことで言うと | 1つの大きなモデルを分割して、複数のGPUに分けて載せる方式。 |
|---|---|
| どこで使う | 1枚のGPUに収まらない、数千億パラメータ級のモデルの学習。 |
| 注意点 | GPU間の通信が頻発し、効率が落ちやすい。高速な相互接続が前提。 |
モデル並列の種類
モデル並列は大きく2つに分けられます。パイプライン並列はモデルのレイヤーを層方向に分割し、テンソル並列は個々のレイヤー内のテンソル(行列)を分割します。通常、これらを組み合わせて使用し、さらにデータ並列と組み合わせた3D並列化が大規模学習の標準的なアプローチです。
1モデルが大きすぎる1枚に載らない
▶
2層で分割前半と後半を別GPUへ
▶
3順に処理GPU間でデータを受け渡す
▶
4巨大モデルも学習可通信速度が鍵
課題とトレードオフ
モデル並列はデータ並列と比較して通信量が多く、実装が複雑です。GPU間で中間活性化値を転送する必要があるため、NVLinkのような高帯域インターコネクトが重要です。また、パイプラインの「バブル」(一部GPUが待機している時間)を最小化するための工夫(マイクロバッチングなど)が学習効率に大きく影響します。