LuAITools.com
提交工具
🧱AI
モデルが載らないなら、切り分ける

モデル並列

モデルが大きすぎて1枚に載らないとき、モデル並列はモデルをいくつかに切り分け、別々の層を別々のGPUに置いて、ひとつのモデルを協力して計算します。

モデル並列って何?

データ並列には隠れた前提があります。それは「各カードがモデル全体を載せられる」こと。しかしモデルが数百億、数千億パラメータになると、1枚のGPUではとうに載りません。モデル並列は「モデルそのものを切る」発想。異なる層(または同じ層の異なる部分)を別々のGPUに置き、複数カードが協力してひとつの巨大モデルを計算します。

データ並列との違いは?

データ並列はデータを分ける
各カードが完全なコピーを持ち、別々のデータを処理します。
モデル並列はモデルを分ける
モデルをいくつかに切り、各カードがその一部を担当。データは全カードを順番に流れます。
解決する課題が違う
データ並列は「遅い」を、モデル並列は「載らない」を解決します。

よくある2つの切り方

層で切る(層間並列)
1〜10層をGPU A、11〜20層をGPU Bへ。データはA→Bと流れ、組み立てラインのようです。
テンソルで切る(テンソル並列)
1つの層の中の行列演算を分割し、複数カードで並列計算して結果をつなぎます。Transformerの注意力のような大きな行列でよく使われます。

難しい点

通信が重い
層と層、テンソルとテンソルの間でデータを頻繁にやり取りするため、カード間の帯域が重要です。
負荷の偏り
各部分の計算量が違うと、速いカードが遅いカードを待つことになり効率が落ちます。
実装が複雑
データ並列のような「ほぼそのまま」ではなく、丁寧なエンジニアリングが必要です。

なぜ不可欠なのか

今日の超大規模モデルの訓練は、ほぼすべてモデル並列に頼っています。これがなければ、数千億パラメータのモデルは「置く」ことすらできず、訓練は到底無理です。

まとめ:モデル並列とは「モデルが大きくて載らないなら、いくつかに切り分け、複数カードで一緒に持ち上げる」こと。大規模AIに欠かせない技術です。

コメント