2026年11月15日(日) 記事を探す決算カレンダー広告掲載このサイトについて
トップ › 仕組み
仕組み

データ並列とは GPUごとに別のデータで学習し結果を平均、メタはLlama 3で128組に

データ並列は、学習のデータを多数のGPUに分け、それぞれが同じモデルの写しで計算して結果を平均する方法です。マイクロソフトの研究者は、写しの重複を削るZeROで、1,000億個を超える重みのモデルを400基のGPUで学習できたと報告しました。

ポイント
  • データ並列は、GPUごとに別のデータで計算し、勾配を全員で平均してから重みを更新する方法です。
  • 単純な形では、どのGPUもモデル全体の写しを持つため、メモリの使い方に無駄があります。
  • マイクロソフトのZeROやPyTorchのFSDPは、重みや学習の状態を分けて持ち、重複を減らします。
  • メタはLlama 3 405Bで、1万6,384基のGPUを128組のデータ並列に分けました。

データ並列は、分散学習の中で最も基本の分け方です。料理にたとえると、同じレシピ(モデル)を全員に配り、材料(データ)を分けて同時に作らせ、出来の反省点(勾配)を持ち寄って、レシピを一斉に書き直すやり方です。

計算して、平均して、そろえる

学習は、データを入れて答えを出す「順方向」と、答えのずれから重みの直し方(勾配)を求める「逆方向」をくり返します。データ並列では、各GPUが自分の分のデータで順方向と逆方向を計算します。

次に、全GPUの勾配を足し合わせて平均を取ります。この集団での通信を「オールリデュース」と呼びます。全員が同じ平均の勾配で重みを直すため、モデルの写しは常に同じに保たれます。GPUの数を2倍にすれば、1回に処理できるデータも2倍になります。

写しの重複という無駄

単純なデータ並列では、すべてのGPUがモデル全体を持ちます。学習では、重みのほかに、勾配や、最適化の計算(Adamなど)が使う値も要ります。よく使われる組み合わせ(16ビットの重みと勾配、32ビットの重みの控え、Adamの2種類の値)では、重み1個あたり16バイトになります(計算)。

学習に要るメモリの目安(重み1個あたり16バイトとして計算)
モデルの重みの数学習の状態の合計(計算)H100(80GB)の何基分(計算)
80億個128GB1.6基分
700億個1.12TB14基分
4,050億個6.48TB81基分

途中の計算結果(活性化)の分は含まない。

そこで、学習の状態を全GPUに分けて持たせる方法が生まれました。マイクロソフトの研究者が2019年に発表した「ZeRO」は、データ並列とモデル並列での記憶の重複をなくす方法です。論文は、1,000億個を超える重みのモデルを400基のGPUで学習し、毎秒15ペタFLOPSを出したと報告しています。当時の最先端の10倍の性能としました。PyTorchでは同じ考え方を「FSDP(完全シャーディングのデータ並列)」として組み込んでいます。

Llama 3での使い方

メタはLlama 3 405Bの学習で、データ並列を4種類の分け方の一番外側に置きました。8,192基の段階で64組、1万6,384基の段階で128組です。1回に学習するデータの量は1,600万語分に固定したため、組が増えるほど1組あたりの量は減りました。GPUの計算能力の使用率(MFU)が43%から41%に下がったのは、このためだと論文は説明しています。

メタはFSDPで最適化の値と勾配を分けて持つ一方、重みは順方向の後に分け直さない設定にしました。逆方向で重みを集め直す通信を1回省くためです。勾配の平均は32ビットで行い、学習の安定を保ちました。

2026年10月28日のPyTorch 2.15版では、FSDPの第2版で、ルーターの重みなど精度に敏感な部分だけを32ビットのまま残す設定などが加わりました。

関連する用語

  • オールリデュース:全GPUの値を足し合わせ、結果を全員に配る通信。
  • FSDP:重み・勾配・最適化の値を分けて持つデータ並列。
  • ZeRO:マイクロソフトの研究者が示した、記憶の重複を削る方法。DeepSpeedに入っている。
  • バッチサイズ:1回の更新に使うデータの量。

DeepSpeedは今、PyTorch Foundationの事業の一つです。

この記事は公開資料をもとに作成しています。売買をすすめるものではありません。誤りを見つけたら訂正します(編集方針)。

関連する記事