テクニカルガイド

ZeRO とシャード オプティマイザー

ZeRO (Zero Redundancy Optimizer) は、オプティマイザーの状態、勾配、重みを GPU 全体でシャーディングすることにより、データ並列処理による無駄なメモリの重複を排除します。

2分の読書最終更新日

概要

It lets you train enormous models with the simplicity of data parallelism but a fraction of the per-GPU memory.

ディープダイブ

通常のデータ並列処理では、すべての GPU がオプティマイザーの状態、勾配、パラメーターの冗長なフル コピーを保存します。これは、特にオプティマイザーの状態がモデル自体のサイズの数倍になる可能性がある Adam の場合、非常に無駄です。 DeepSpeed の Microsoft によって導入された ZeRO は、これらのテンソルを GPU 全体に分割することでこの冗長性を取り除き、各デバイスがスライスのみを所有するようにします。 ZeRO には 3 つの段階があります。ステージ 1 はシャード オプティマイザーの状態、ステージ 2 は勾配シャーディングを追加、ステージ 3 はパラメーター自体をシャードします。必要に応じて、GPU は通信を通じて不足しているスライスを収集し、計算して解放します。その結果、GPU あたりのメモリが大幅に削減され、データ並列処理の簡単なプログラミング モデルを維持しながら、数十億から数兆のパラメータ トレーニングが可能になります。

技術的な洞察

ZeRO は、余分な通信と引き換えにメモリを節約します。ステージ 3 では、レイヤーのフォワード パスの前に、オールギャザーがそのレイヤーの完全なパラメーターを各 GPU に収集します。その後、所有されていないスライスはメモリを再利用するために破棄されます。グラデーションは縮小散乱されるため、各 GPU は、所有するパラメーターに一致するグラデーション スライスのみを保持します。 PyTorch の FSDP (Fully Sharded Data Parallel) は、同じアイデアをネイティブに実装し、モジュールをラップしてオンザフライでシャードとリシャードを行います。

戦略的影響

費用と予算

アーキテクチャの決定により、パフォーマンスと運用コストが何年にもわたって推進されます。

より明確な判決

技術教育は、チームが最新のスタックだけでなく、適切なスタックを選択するのに役立ちます。

品質管理

より良いエンジニアリングの選択により、本番環境での信頼性に関するインシデントが減少します。

ZeRO とシャード オプティマイザーの将来

シャーディングは、珍しいオプションではなく、大規模なトレーニングのデフォルトになりつつあります。オフロードとのより深い統合 (ZeRO-Infinity を介してスライスを CPU または NVMe にプッシュする)、コストを隠すための計算とのオールギャザーおよびリデュース散乱のより適切なオーバーラップ、およびテンソルおよびパイプライン並列処理との組み合わせが期待されます。モデルが成長し続けるにつれて、メモリ効率の高いシャード オプティマイザーは、モデルを現実的なハードウェア予算に適合させる上で中心となります。

現実世界の実装

DeepSpeed ZeRO Stage 2 を使用して、GPU メモリがオーバーフローしてしまう数十億パラメータの言語モデルを微調整します。

PyTorch FSDP を使用したトレーニング。パラメーター、勾配、オプティマイザーの状態を GPU 全体でシャーディングし、オンデマンドでレイヤーごとに収集します。

ZeRO-Offload を適用してオプティマイザーの状態を CPU メモリにプッシュし、単一の GPU で VRAM の何倍も大きいモデルをトレーニングできるようにします。

GPU と CPU メモリが不足したときに NVMe ストレージからパラメータ シャードをストリーミングすることで、ZeRO-Infinity を使用して兆パラメータ モデルをスケーリングします。

リスクとガードレール

1 つのベンチマークを最適化すると、より広範なシステムの弱点が隠れる可能性があります。

インフラストラクチャとメンテナンスのコストは過小評価されがちです。

システムが複雑になるにつれて、セキュリティと可観測性のギャップが拡大する可能性があります。

実装ロードマップ

1

実装前にレイテンシ、品質、コストの目標を定義します。

2

現実的な負荷とデータ条件でのベンチマーク。

3

エラー、ドリフト、ユーザーへの影響を計測器で監視します。

4

スケーリングの前に、ロールバックとインシデント対応のパスを準備します。

探検を続けましょう

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the ZeRO and Sharded Optimizers quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

クイズを開始する

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

次のガイド

Lookahead と Lion オプティマイザー

よくある質問

What is ZeRO and Sharded Optimizers?

ZeRO (Zero Redundancy Optimizer) は、オプティマイザーの状態、勾配、重みを GPU 全体でシャーディングすることにより、データ並列処理による無駄なメモリの重複を排除します。これにより、GPU あたりのメモリの一部を使用しながら、データ並列処理のシンプルさで巨大なモデルをトレーニングできます。

普通のデータ並列処理と比較して、ZeRO はどのような冗長性を排除しますか?

標準的なデータ並列処理では、オプティマイザーの状態、勾配、重みの完全なコピーがすべての GPU に保存されます。 ZeRO はこれらをシャード化して、各 GPU がスライスのみを保持するようにします。

Adam ではオプティマイザーの状態が最大のメモリを消費することが多いのはなぜですか?

Adam は、パラメーターごとに 1 次モーメントや 2 次モーメントなどの実行推定を維持します。これを fp32 マスター ウェイトと組み合わせると、モデル自体のサイズが小さくなる可能性があります。

ZeRO ステージ 3 のシャードには、ステージ 1 および 2 にはないものは何ですか?

ステージ 1 ではオプティマイザーの状態をシャーディングし、ステージ 2 では勾配を追加し、ステージ 3 ではモデル パラメーターを GPU 全体でシャーディングすることでさらに進みます。

ZeRO ステージ 3 では、GPU はレイヤーのフォワード パスに必要なすべてのパラメーターをどのように取得するのでしょうか?

レイヤーを計算する前に、オールギャザーは各 GPU でその完全なパラメーターを組み立てます。完了すると、所有されていないスライスが解放され、メモリが再利用されます。

ZeRO スタイルのシャーディングをネイティブに実装する PyTorch 機能はどれですか?

PyTorch の Fully Sharded Data Parallel (FSDP) は、パラメーター、勾配、オプティマイザーの状態をシャード化し、それらをオンザフライで収集して再シャーディングし、ZeRO をミラーリングします。