梯度累積
梯度累積可讓您在更新權重之前對幾個小批量的梯度求和,從而在有限的 GPU 記憶體上模擬大批量。
概述
It is the standard workaround for training big models when memory is the bottleneck.
深入探討
通常,訓練步驟處理一批、計算梯度並立即更新參數。透過梯度累積,您可以在較小的微批次上運行多次前向和後向傳遞,將它們的梯度添加到參數緩衝區中,並且僅在 N 個微批次之後調用優化器步驟(並將梯度歸零)。有效批量大小變為微批量大小乘以 N,即使峰值記憶體僅保存一個微批量激活。這很重要,因為許多訓練方法都假設大批量來實現穩定的統計數據,並且像大型變壓器這樣的模型無法在單一設備上容納完整的目標批次。問題是:批量歸一化統計數據是按微批次計算的,因此層範數或組範數與累積更好地配對,並且您必須正確縮放損失以保持正確的有效學習率。
技術洞察
由於總損失的梯度是相加的,因此只要正確平均,在 N 個微批次上累積梯度在數學上相當於一大批次。實現通常在向後之前將每個微批次損失除以 N,因此累積梯度等於整個有效批次的平均值。您可以跳過optimizer.step() 和zero_grad() 直到第N 個微批次,用額外的計算時間換取減少的峰值記憶體。
戰略影響
成本與預算
多年來,架構決策決定著效能和營運成本。
更明確的決策
技術教育幫助團隊選擇正確的堆疊,而不僅僅是最新的堆疊。
品質管控
更好的工程選擇可以減少生產中的可靠性事故。
梯度累積的未來
隨著模型大小超過單設備內存,梯度累積將保持預設水平。它越來越多地與 DeepSpeed 和 FSDP 等框架中的混合精度、激活檢查點、ZeRO 分片和管道並行性相結合。預計自動化會更嚴格,庫會自動調整累積步驟以達到記憶體預算,並且在普通硬體上微調大型模型仍然很重要,包括消費級 GPU,它可以解鎖原本不可能進行的訓練。
現實世界的實施
透過累積超過 8 或 16 個微批次以達到數百個有效批次,在單一消費級 GPU 上微調大型語言模型。
訓練高解析度視覺或分割模型,即使 2 個批次也適合,但配方需要 32 個有效批次。
Hugging Face Trainer 和 PyTorch Lightning 公開了在有限 VRAM 設定中常規使用的gradient_accumulation_steps 設定。
透過累加匹配有效批量大小,在較小的硬體上重現論文的大批量結果。
風險與防護欄
優化一項基準測試可以隱藏更廣泛的系統弱點。
基礎設施和維護成本常常被低估。
隨著系統變得更加複雜,安全性和可觀察性差距可能會擴大。
實施路線圖
在實施之前定義延遲、品質和成本目標。
在實際負載和資料條件下進行基準測試。
儀器監控錯誤、漂移和使用者影響。
在擴展之前準備回滾和事件回應路徑。
不斷探索
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 個微批次中累積梯度,並在週期結束時僅更新一次。
哪個歸一化層與梯度累積配對得更乾淨?
批次歸一化計算每個微批次的統計數據,因此層或組歸一化可以避免與小微批次的不匹配。