テクニカルガイド

勾配の累積

勾配累積を使用すると、重みを更新する前にいくつかの小さなミニバッチにわたる勾配を合計することで、限られた GPU メモリ上で大きなバッチ サイズをシミュレートできます。

2分の読書最終更新日

概要

It is the standard workaround for training big models when memory is the bottleneck.

ディープダイブ

通常、トレーニング ステップは 1 つのバッチを処理し、勾配を計算し、パラメーターをすぐに更新します。勾配累積では、より小さいマイクロバッチで複数の前方および後方パスを実行し、それらの勾配をパラメーター バッファーに加算し、N 個のマイクロバッチの後でのみオプティマイザー ステップを呼び出します (勾配をゼロにします)。ピーク メモリには 1 つのマイクロバッチのアクティベーションしか保持されませんが、有効なバッチ サイズはマイクロバッチ サイズの N 倍になります。これは、多くのトレーニング レシピが統計を安定させるために大規模なバッチを前提としているため、また、大規模なトランスフォーマーのようなモデルは単一のデバイスに完全なターゲット バッチを適合させることができないため、重要です。問題点: バッチ正規化統計はマイクロバッチごとに計算されるため、層ノルムまたはグループノルムは累積とより適切に組み合わせることができ、有効学習率を適切に保つために損失を正しくスケールする必要があります。

技術的な洞察

合計損失の勾配は加算的なものであるため、適切に平均した場合、N 個のマイクロバッチにわたって勾配を累積することは、数学的には 1 つの大きなバッチに相当します。通常、実装では各マイクロバッチ損失を N で割ってから逆算するため、累積された勾配は有効なバッチ全体の平均と等しくなります。 N 番目のマイクロバッチまで optimizer.step() と zero_grad() をスキップし、余分な計算時間を犠牲にしてピーク メモリを削減します。

戦略的影響

費用と予算

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

より明確な判決

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

品質管理

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

勾配累積の未来

モデルのサイズが単一デバイスのメモリを上回るため、勾配累積は引き続きデフォルトのレバーとなります。 DeepSpeed や FSDP などのフレームワークで、混合精度、アクティベーション チェックポイント、ZeRO シャーディング、パイプライン並列処理との組み合わせが増えています。メモリ バジェットに合わせてライブラリが累積ステップを自動調整する、より緊密な自動化が期待されます。また、コンシューマ GPU を含む小規模なハードウェアで大規模なモデルを微調整することの重要性が継続し、他の方法では不可能なトレーニングが可能になります。

現実世界の実装

8 個または 16 個を超えるマイクロバッチを蓄積して、効果的な数百のバッチに達することで、単一のコンシューマ GPU 上で大規模な言語モデルを微調整します。

2 つのバッチでも適合する高解像度のビジョンまたはセグメンテーション モデルをトレーニングする場合、レシピには 32 の有効なバッチが必要です。

Hugging Face Trainer と PyTorch Lightning は、限られた VRAM セットアップで日常的に使用される gradient_accumulation_steps 設定を公開します。

蓄積を通じて有効なバッチ サイズを一致させることにより、論文の大バッチ結果をより小型のハードウェアで再現します。

リスクとガードレール

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 Gradient Accumulation 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

次のガイド

グラデーションの消失と爆発

よくある質問

What is Gradient Accumulation?

勾配累積を使用すると、重みを更新する前にいくつかの小さなミニバッチにわたる勾配を合計することで、限られた GPU メモリ上で大きなバッチ サイズをシミュレートできます。これは、メモリがボトルネックになっている場合に大規模なモデルをトレーニングするための標準的な回避策です。

勾配累積によって主に何ができるようになりますか?

更新する前に複数のマイクロバッチにわたる勾配を合計することで、すべてを一度にメモリに保持することなく、大きなバッチを模倣します。

蓄積中、いつオプティマイザのステップを呼び出して勾配をゼロにしますか?

N 個のマイクロバッチにわたる勾配を蓄積し、サイクルの最後に 1 回だけ更新します。

どの正規化層が勾配累積とよりきれいに組み合わされますか?

バッチノルムはマイクロバッチごとに統計を計算するため、レイヤーまたはグループノルムは小さなマイクロバッチの不一致を回避します。