技術指南

梯度檢查點

梯度檢查點(也稱為激活檢查點)是一種節省記憶體的技巧,它在前向傳播期間丟棄大多數中間激活,並在反向傳播期間動態重新計算它們。

概述

梯度檢查點(也稱為激活檢查點)是一種節省記憶體的技巧,它在前向傳播期間丟棄大多數中間激活,並在反向傳播期間動態重新計算它們。它可以讓您透過用額外的計算換取更低的記憶體使用來訓練更深、更大的網路。

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

深入探討

訓練神經網路通常會在前向傳播過程中儲存每一層的激活,因為反向傳播需要它們來計算梯度。對於深度模型來說,這些活化支配著記憶。相反,梯度檢查點僅在一組稀疏的“檢查點”層上保存激活,並丟棄其餘部分。當反向傳播到達啟動被刪除的區域時,它會重新執行該段的前向計算以重新產生所需的內容,然後繼續。大約每個 N 平方根層都放置檢查點,啟動記憶體從 N 階下降到 N 平方根階,而計算量僅增加約一次額外的前向傳遞(大約慢 20-30%)。這使得在同一 GPU 上適應更大的批量大小或更深的轉換器成為可能。

技術洞察

該技術利用了時間與記憶體的權衡。儲存所有啟動速度很快,但很耗記憶體;相對於耗盡記憶體的成本,在現代加速器上重新計算它們的成本很低。像 PyTorch (torch.utils.checkpoint) 這樣的框架包裝了一個模組,因此它的前向輸出被保存,但其內部結構在後向過程中被重新計算。選擇檢查點放置很重要:大約 sqrt(N) 段的均勻間距可以最大限度地減少總內存,同時僅添加一個額外的前向計算整體。

掌握梯度檢查點

梯度檢查點(也稱為激活檢查點)是一種節省記憶體的技巧,它在前向傳播期間丟棄大多數中間激活,並在反向傳播期間動態重新計算它們。它可以讓您透過用額外的計算換取更低的記憶體使用來訓練更深、更大的網路。梯度檢查點是一個技術構建塊,會大規模影響模型品質、基礎設施成本、延遲和可靠性。為了建立深入的理解,請將梯度檢查點視為一種操作模型,而不是單一功能:定義期望的結果,澄清假設,並將系統可以可靠地完成的任務與仍需要專家判斷的任務分開。

在實踐中,強大的團隊使用梯度檢查點根據可靠性和成本優化架構、資料和基礎設施選擇。他們記錄明確的成功標準,根據實際數據和工作流程進行測試,並根據觀察到的失敗模式而不是一次性基準測試勝利進行迭代。這就是理論理解轉變為跨產品、政策和營運的持久能力的地方。

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

戰略影響

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

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

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

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

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

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

梯度檢查點的未來

梯度檢查點現在是大型模型訓練的標準,並且越來越自動化,函式庫會為您選擇最佳檢查點位置。它與 FSDP、混合精度和卸載自然配合,以提高模型尺寸。期望「選擇性」檢查點僅重新計算廉價的操作,同時快取昂貴的操作(如注意力矩陣),加上 PyTorch 的 torch.compile 等工具中的編譯器驅動方法,自動決定保存哪些內容與重新計算以獲得最佳速度記憶體平衡。

現實世界的實施

透過丟棄和重新計算層激活,在單一 GPU 上訓練具有更大批量大小的深度轉換器。

在高解析度影像上微調視覺模型,否則啟動圖會溢出 GPU 記憶體。

擁抱 Face Transformers 啟用gradient_checkpointing=True,以在微調期間適應十億參數模型。

將檢查點與 FSDP 結合,使參數和活化都保持較小,從而能夠訓練非常大的語言模型。

實施模式

梯度檢查點實踐

透過丟棄和重新計算層激活,在單一 GPU 上訓練具有更大批量大小的深度轉換器。

透過丟棄和重新計算層激活,在單一 GPU 上訓練具有更大批量大小的深度變壓器 團隊在預先定義質量閾值、為邊緣情況保留人工升級路徑並隨著時間的推移跟踪生產力增益和錯誤成本時,通常會獲得更好的結果。

梯度檢查點實踐

在高解析度影像上微調視覺模型,否則啟動圖會溢出 GPU 記憶體。

在高解析度影像上微調視覺模型,否則啟動圖會溢出 GPU 記憶體 當團隊預先定義品質閾值、為邊緣情況保留人工升級路徑並隨著時間的推移追蹤生產力增益和錯誤成本時,通常會獲得更好的結果。

梯度檢查點實踐

擁抱 Face Transformers 啟用gradient_checkpointing=True,以在微調期間適應十億參數模型。

擁抱 Face Transformer,啟用梯度檢查點=True,以在微調過程中適應十億個參數的模型當團隊預先定義質量閾值、為邊緣情況保留人工升級路徑並隨著時間的推移跟踪生產力增益和錯誤成本時,通常會獲得更好的結果。

梯度檢查點實踐

將檢查點與 FSDP 結合,使參數和活化都保持較小,從而能夠訓練非常大的語言模型。

將檢查點與 FSDP 結合,使參數和活化都保持較小,從而能夠訓練非常大的語言模型。當團隊預先定義品質閾值、為邊緣情況保留人工升級路徑並隨著時間的推移追蹤生產力增益和錯誤成本時,通常會獲得更好的結果。

風險與防護欄

!

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

!

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

!

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

實施路線圖

1

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

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

2

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

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

3

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

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

4

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

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

不斷探索