技術指南

梯度累積

梯度累積可讓您在更新權重之前對幾個小批量的梯度求和,從而在有限的 GPU 記憶體上模擬大批量。

概述

梯度累積可讓您在更新權重之前對幾個小批量的梯度求和,從而在有限的 GPU 記憶體上模擬大批量。當記憶體成為瓶頸時,這是訓練大型模型的標準解決方法。

梯度累積是一個技術構建塊,會大規模影響模型品質、基礎設施成本、延遲和可靠性。

深入探討

通常,訓練步驟處理一批、計算梯度並立即更新參數。透過梯度累積,您可以在較小的微批次上運行多次前向和後向傳遞,將它們的梯度添加到參數緩衝區中,並且僅在 N 個微批次之後調用優化器步驟(並將梯度歸零)。有效批量大小變為微批量大小乘以 N,即使峰值記憶體僅保存一個微批量激活。這很重要,因為許多訓練方法都假設大批量來實現穩定的統計數據,並且像大型變壓器這樣的模型無法在單一設備上容納完整的目標批次。問題是:批量歸一化統計數據是按微批次計算的,因此層範數或組範數與累積更好地配對,並且您必須正確縮放損失以保持正確的有效學習率。

技術洞察

由於總損失的梯度是相加的,因此只要正確平均,在 N 個微批次上累積梯度在數學上相當於一大批次。實現通常在向後之前將每個微批次損失除以 N,因此累積梯度等於整個有效批次的平均值。您可以跳過optimizer.step() 和zero_grad() 直到第N 個微批次,用額外的計算時間換取減少的峰值記憶體。

掌握梯度累積

梯度累積可讓您在更新權重之前對幾個小批量的梯度求和,從而在有限的 GPU 記憶體上模擬大批量。當記憶體成為瓶頸時,這是訓練大型模型的標準解決方法。梯度累積是一個技術構建塊,會大規模影響模型品質、基礎設施成本、延遲和可靠性。為了建立深入的理解,請將梯度累積視為操作模型,而不是單一特徵:定義期望的結果,澄清假設,並將系統可以可靠地完成的任務與仍需要專家判斷的任務分開。

在实践中,强大的团队使用梯度累积根据可靠性和成本优化架构、数据和基础设施选择。他們記錄明確的成功標準,根據實際數據和工作流程進行測試,並根據觀察到的失敗模式而不是一次性基準測試勝利進行迭代。這就是理論理解轉變為跨產品、政策和營運的持久能力的地方。

多年來,架構決策決定著效能和營運成本。同時,優化一個基準測試可以隱藏更廣泛的系統弱點。最具彈性的方法是將實驗速度與治理規則結合:運行試點、捕獲證據、發布決策日誌,並隨著模型行為、使用者期望和監管要求的發展不斷更新保障措施。

戰略影響

多年來,架構決策決定著效能和營運成本。

多年來,架構決策決定著效能和營運成本。在高品質部署中,這會轉化為可衡量的操作規則、所有權邊界和定期審查儀式,以便團隊可以增強信心,而不是擴大模糊性。

技術教育幫助團隊選擇正確的堆疊,而不僅僅是最新的堆疊。

技術教育幫助團隊選擇正確的堆疊,而不僅僅是最新的堆疊。在高品質部署中,這會轉化為可衡量的操作規則、所有權邊界和定期審查儀式,以便團隊可以增強信心,而不是擴大模糊性。

更好的工程選擇可以減少生產中的可靠性事故。

更好的工程選擇可以減少生產中的可靠性事故。在高品質部署中,這會轉化為可衡量的操作規則、所有權邊界和定期審查儀式,以便團隊可以增強信心,而不是擴大模糊性。

梯度累積的未來

隨著模型大小超過單設備內存,梯度累積將保持預設水平。它越來越多地與 DeepSpeed 和 FSDP 等框架中的混合精度、激活檢查點、ZeRO 分片和管道並行性相結合。預計自動化會更嚴格,庫會自動調整累積步驟以達到記憶體預算,並且在普通硬體上微調大型模型仍然很重要,包括消費級 GPU,它可以解鎖原本不可能進行的訓練。

現實世界的實施

透過累積超過 8 或 16 個微批次以達到數百個有效批次,在單一消費級 GPU 上微調大型語言模型。

訓練高解析度視覺或分割模型,即使 2 個批次也適合,但配方需要 32 個有效批次。

Hugging Face Trainer 和 PyTorch Lightning 公開了在有限 VRAM 設定中常規使用的gradient_accumulation_steps 設定。

透過累加匹配有效批量大小,在較小的硬體上重現論文的大批量結果。

實施模式

梯度累積實踐

透過累積超過 8 或 16 個微批次以達到數百個有效批次,在單一消費級 GPU 上微調大型語言模型。

透過累積超過 8 或 16 個微批次來微調單一消費者 GPU 上的大型語言模型,以達到數百個有效批次。當團隊預先定義品質閾值、為邊緣情況保留人工升級路徑並隨著時間的推移追蹤生產力增益和錯誤成本時,通常會獲得更好的結果。

梯度累積實踐

訓練高解析度視覺或分割模型,即使 2 個批次也適合,但配方需要 32 個有效批次。

訓練高解析度視覺或分割模型,即使一批 2 個都適合,但有效的配方需要 32 個批次。當團隊預先定義品質閾值、為邊緣情況保留人工升級路徑並隨著時間的推移追蹤生產力增益和錯誤成本時,通常會得到更好的結果。

梯度累積實踐

Hugging Face Trainer 和 PyTorch Lightning 公開了在有限 VRAM 設定中常規使用的gradient_accumulation_steps 設定。

Hugging Face Trainer 和 PyTorch Lightning 公開了在有限 VRAM 設定中常規使用的gradient_accumulation_steps 設定。當團隊預先定義品質閾值、為邊緣情況保留人工升級路徑並隨著時間的推移追蹤生產力增益和錯誤成本時,通常會獲得更好的結果。

梯度累積實踐

透過累加匹配有效批量大小,在較小的硬體上重現論文的大批量結果。

透過累積匹配有效批量大小,在較小的硬體上重現論文的大批量結果 當團隊預先定義質量閾值、為邊緣情況保留人工升級路徑並跟踪一段時間內的生產力增益和錯誤成本時,通常會獲得更好的結果。

風險與防護欄

!

優化一項基準測試可以隱藏更廣泛的系統弱點。

!

基礎設施和維護成本常常被低估。

!

隨著系統變得更加複雜,安全性和可觀察性差距可能會擴大。

實施路線圖

1

在實施之前定義延遲、品質和成本目標。

在實施之前定義延遲、品質和成本目標。將每個步驟視為證據門:如果不符合標準,則暫停推出,縮小差距,然後再擴大使用。

2

在實際負載和資料條件下進行基準測試。

在實際負載和資料條件下進行基準測試。將每個步驟視為證據門:如果不符合標準,則暫停推出,縮小差距,然後再擴大使用。

3

儀器監控錯誤、漂移和使用者影響。

儀器監控錯誤、漂移和使用者影響。將每個步驟視為證據門:如果不符合標準,則暫停推出,縮小差距,然後再擴大使用。

4

在擴展之前準備回滾和事件回應路徑。

在擴展之前準備回滾和事件回應路徑。將每個步驟視為證據門:如果不符合標準,則暫停推出,縮小差距,然後再擴大使用。

不斷探索