概要
ZeRO (Zero Redundancy Optimizer) は、オプティマイザーの状態、勾配、重みを GPU 全体でシャーディングすることにより、データ並列処理による無駄なメモリの重複を排除します。これにより、GPU あたりのメモリの一部を使用しながら、データ並列処理のシンプルさで巨大なモデルをトレーニングできます。
ZeRO とシャード オプティマイザーは、大規模なモデルの品質、インフラストラクチャのコスト、レイテンシー、信頼性に影響を与える技術的なビルディング ブロックです。
ディープダイブ
通常のデータ並列処理では、すべての 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 (Zero Redundancy Optimizer) は、オプティマイザーの状態、勾配、重みを GPU 全体でシャーディングすることにより、データ並列処理による無駄なメモリの重複を排除します。これにより、GPU あたりのメモリの一部を使用しながら、データ並列処理のシンプルさで巨大なモデルをトレーニングできます。 ZeRO とシャード オプティマイザーは、大規模なモデルの品質、インフラストラクチャのコスト、レイテンシー、信頼性に影響を与える技術的なビルディング ブロックです。深い理解を得るには、ZeRO と Sharded Optimizer を単一の機能ではなくオペレーティング モデルとして扱います。望ましい結果を定義し、前提条件を明確にし、システムが確実に実行できることと、依然として専門家の判断が必要なことを分離します。
実際、ZeRO と Sharded Optimizer を使用する強力なチームは、信頼性とコストに照らしてアーキテクチャ、データ、インフラストラクチャの選択を最適化します。明示的な成功基準を文書化し、現実的なデータとワークフローに対してテストし、一度限りのベンチマークの成功ではなく、観察された失敗パターンに基づいて反復します。ここで、理論的な理解が、製品、ポリシー、運用全体にわたる永続的な機能に変わります。
アーキテクチャの決定により、パフォーマンスと運用コストが何年にもわたって推進されます。同時に、1 つのベンチマークを最適化すると、より広範なシステムの弱点が隠れる可能性があります。最も回復力のあるアプローチは、実験のスピードとガバナンスの規律を組み合わせることであり、パイロットを実行し、証拠を取得し、意思決定ログを公開し、モデルの動作、ユーザーの期待、規制要件の進化に応じて安全対策を継続的に更新します。
戦略的影響
アーキテクチャの決定により、パフォーマンスと運用コストが何年にもわたって推進されます。
アーキテクチャの決定により、パフォーマンスと運用コストが何年にもわたって推進されます。高品質の導入では、これが測定可能な運用ルール、所有権の境界、定期的なレビューの儀式に変換されるため、チームは曖昧さを拡大するのではなく、自信を拡大することができます。
技術教育は、チームが最新のスタックだけでなく、適切なスタックを選択するのに役立ちます。
技術教育は、チームが最新のスタックだけでなく、適切なスタックを選択するのに役立ちます。高品質の導入では、これが測定可能な運用ルール、所有権の境界、定期的なレビューの儀式に変換されるため、チームは曖昧さを拡大するのではなく、自信を拡大することができます。
より良いエンジニアリングの選択により、本番環境での信頼性に関するインシデントが減少します。
より良いエンジニアリングの選択により、本番環境での信頼性に関するインシデントが減少します。高品質の導入では、これが測定可能な運用ルール、所有権の境界、定期的なレビューの儀式に変換されるため、チームは曖昧さを拡大するのではなく、自信を拡大することができます。
現実世界の実装
DeepSpeed ZeRO Stage 2 を使用して、GPU メモリがオーバーフローしてしまう数十億パラメータの言語モデルを微調整します。
PyTorch FSDP を使用したトレーニング。パラメーター、勾配、オプティマイザーの状態を GPU 全体でシャーディングし、オンデマンドでレイヤーごとに収集します。
ZeRO-Offload を適用してオプティマイザーの状態を CPU メモリにプッシュし、単一の GPU で VRAM の何倍も大きいモデルをトレーニングできるようにします。
GPU および CPU メモリが不足したときに NVMe ストレージからパラメータ シャードをストリーミングすることで、ZeRO-Infinity を使用して兆パラメータ モデルをスケーリングします。
実装パターン
ZeRO とシャード オプティマイザーの実践
DeepSpeed ZeRO Stage 2 を使用して、GPU メモリがオーバーフローしてしまう数十億パラメータの言語モデルを微調整します。
DeepSpeed ZeRO Stage 2 を使用して、GPU メモリがオーバーフローしてしまう数十億パラメータの言語モデルを微調整します。チームは通常、品質のしきい値を事前に定義し、エッジ ケースに対する人的エスカレーション パスを確保し、生産性の向上とエラー コストの両方を長期的に追跡すると、より良い結果が得られます。
ZeRO とシャード オプティマイザーの実践
PyTorch FSDP を使用したトレーニング。パラメーター、勾配、オプティマイザーの状態を GPU 全体でシャーディングし、オンデマンドでレイヤーごとに収集します。
PyTorch FSDP を使用したトレーニング。パラメータ、勾配、オプティマイザーの状態を GPU 全体で分割し、オンデマンドでレイヤーごとに収集します。チームは通常、品質のしきい値を事前に定義し、エッジ ケースに対する人的エスカレーション パスを維持し、生産性の向上とエラー コストの両方を長期的に追跡すると、より良い結果が得られます。
ZeRO とシャード オプティマイザーの実践
ZeRO-Offload を適用してオプティマイザーの状態を CPU メモリにプッシュし、単一の GPU で VRAM の何倍も大きいモデルをトレーニングできるようにします。
ZeRO-Offload を適用してオプティマイザーの状態を CPU メモリにプッシュし、単一の GPU で VRAM の何倍も大きいモデルをトレーニングできるようにすることで、チームは通常、品質のしきい値を事前に定義し、エッジ ケースに対する人間によるエスカレーション パスを維持し、生産性の向上とエラー コストの両方を長期的に追跡することで、より良い結果を得ることができます。
ZeRO とシャード オプティマイザーの実践
GPU および CPU メモリが不足したときに NVMe ストレージからパラメータ シャードをストリーミングすることで、ZeRO-Infinity を使用して兆パラメータ モデルをスケーリングします。
GPU および CPU メモリが不足したときに NVMe ストレージからパラメータ シャードをストリーミングすることで、ZeRO-Infinity を使用して兆パラメータ モデルをスケーリング 通常、チームは、品質のしきい値を事前に定義し、エッジ ケースに対する人的エスカレーション パスを確保し、生産性の向上とエラー コストの両方を長期にわたって追跡すると、より良い結果が得られます。
リスクとガードレール
1 つのベンチマークを最適化すると、より広範なシステムの弱点が隠れる可能性があります。
インフラストラクチャとメンテナンスのコストは過小評価されがちです。
システムが複雑になるにつれて、セキュリティと可観測性のギャップが拡大する可能性があります。
実装ロードマップ
実装前にレイテンシ、品質、コストの目標を定義します。
実装前にレイテンシ、品質、コストの目標を定義します。各ステップを証拠ゲートとして扱います。基準が満たされない場合は、ロールアウトを一時停止し、ギャップを埋めてから、使用を拡大します。
現実的な負荷とデータ条件でのベンチマーク。
現実的な負荷とデータ条件でのベンチマーク。各ステップを証拠ゲートとして扱います。基準が満たされない場合は、ロールアウトを一時停止し、ギャップを埋めてから、使用を拡大します。
エラー、ドリフト、ユーザーへの影響を計測器で監視します。
エラー、ドリフト、ユーザーへの影響を計測器で監視します。各ステップを証拠ゲートとして扱います。基準が満たされない場合は、ロールアウトを一時停止し、ギャップを埋めてから、使用を拡大します。
スケーリングの前に、ロールバックとインシデント対応のパスを準備します。
スケーリングの前に、ロールバックとインシデント対応のパスを準備します。各ステップを証拠ゲートとして扱います。基準が満たされない場合は、ロールアウトを一時停止し、ギャップを埋めてから、使用を拡大します。