FSDP(エフエスディーピー)とは

FSDPとは、AI開発で広く使われるPyTorchに標準搭載された、モデルの状態を複数のGPUに分担して持たせ、メモリを節約しながら訓練する仕組みです。1枚のGPUには載りきらない大きなモデルでも、保管する中身を手分けすることで複数GPUにまたがって訓練できます。考え方はメモリ節約技術のZeROとよく似ています。

英語表記:Fully Sharded Data Parallel(FSDP)

FSDPの仕組み

FSDPがするのは、モデルのパラメータや勾配、オプティマイザの状態を細かく分割し、各GPUに担当ぶんだけを持たせることです。実際に計算するときは、その層に必要な全データを一時的に集めてきて処理し、終わったらすぐに手放してメモリを空けます。つまり「必要なときだけ全部を借りてきて、使い終わったら返す」という動きです。こうして、ふだんは各GPUが軽い状態を保ちながら、巨大なモデルでも分担して動かせるようにしています。

DDPやZeROとの違い

PyTorchの従来のデータ並列であるDDPは、各GPUにモデルを丸ごとコピーします。これはモデルが1枚のGPUに収まる場合には手軽で速い反面、収まらない大きさになると使えません。FSDPは状態を分割することでこの壁を破り、大きなモデルにも対応します。発想の元は、MicrosoftのZeROと、Metaが公開したFairScaleという仕組みです。ZeROとFSDPは「状態を分担して持つ」という同じ考え方を、それぞれ別のチームが形にしたものだと捉えると分かりやすいでしょう。

経営から見たFSDPの意味

FSDPは、PyTorchを使う開発者が、特別な追加基盤を入れずに巨大モデルを訓練できるようにする標準機能です。2022年にPyTorch本体へ取り込まれ、それまで専用ツールが必要だった大規模訓練のハードルを下げました。AI開発の現場で最も広く使われる道具のひとつに、巨大モデルを分担して動かす力が最初から備わっている。これは、大規模AIに挑むチームのコストとスピードに直結する地味で重要な進歩です。

Topic同じアイデアが二つの名前で生きている

「複数GPUが抱える重複した状態を分担して持つ」というアイデアは、ほぼ同じ時期に二つの場所で形になりました。ひとつはMicrosoftのZeRO、もうひとつはMetaがFairScaleで公開したFSDPです。後者は2022年にPyTorch本体へ取り込まれ、いまや標準機能になっています。だからPyTorchでFSDPを使う人は、名前こそ違え、ZeROとよく似た発想の恩恵をそのまま受けていることになります。良いアイデアが特定の製品に閉じず、エコシステムをまたいで根づいていく好例です。

FSDPに関するよくある質問

FSDPとDDPは何が違いますか?
DDPは各GPUにモデルを丸ごとコピーするため、1枚のGPUに収まるモデル向けで手軽です。FSDPは状態を分割して持つため、1枚に収まらない大きなモデルも複数GPUにまたがって訓練できます。
FSDPとZeROはどう関係していますか?
どちらも「複数GPUが抱える重複した状態を分担して持つ」という同じ発想です。ZeROはMicrosoftのDeepSpeed由来、FSDPはMetaのFairScaleを経てPyTorchに標準搭載された実装、という違いがあります。
FSDPはいつから使えますか?
2022年3月のPyTorch 1.11で導入されました。元はMetaが2021年に公開したFairScaleの機能を、PyTorch本体へ取り込んだものです。

あわせて読みたい記事