技術指南

GPU 記憶體管理和碎片

AI 框架如何分配、重用和回收 GPU 上的有限內存,以及為什麼即使技術上還有大量內存,剩餘間隙(碎片)也會導致內存不足錯誤。

概述

AI 框架如何分配、重用和回收 GPU 上的有限內存,以及為什麼即使技術上還有大量內存,剩餘間隙(碎片)也會導致內存不足錯誤。理解它是擬合大型模型和避免神秘崩潰的關鍵。

GPU 記憶體管理和碎片是一個技術構建塊,會大規模影響模型品質、基礎設施成本、延遲和可靠性。

深入探討

GPU 記憶體是固定且寶貴的:一張卡可能總共有 24、80 或 192 GB,由模型權重、啟動、梯度、最佳化器狀態和臨時緩衝區共享。呼叫驅動程式在每個操作上分配記憶體會很慢,因此像 PyTorch 這樣的框架使用快取分配器,預先獲取大塊並分發子塊,然後將釋放的區塊保留在池中以供重用。問題是碎片:當分配和釋放不同大小的張量時,可用空間會分成分散的區塊。您總共可以有 5 GB 空閒空間,但無法分配連續的 2 GB 張量,因為沒有一個間隙足夠大。這就是為什麼儘管看似有可用空間,訓練仍可能因記憶體不足錯誤而崩潰。

技術洞察

PyTorch 的 CUDA 快取分配器將記憶體分割成區塊流,並重複使用與請求大小相符的釋放區塊,從而避免昂貴的 cudaMalloc/cudaFree 呼叫。當分割的區塊無法重新組合時,就會出現碎片。 torch.cuda.empty_cache、PYTORCH_CUDA_ALLOC_CONF Expandable_segments 選項和記憶體快照等工具會有所幫助。較新的方法借用了虛擬記憶體的思想,將非連續的實體頁映射到連續的虛擬範圍,因此儘管有碎片,大型請求仍能成功。

掌握 GPU 記憶體管理和碎片

AI 框架如何分配、重用和回收 GPU 上的有限內存,以及為什麼即使技術上還有大量內存,剩餘間隙(碎片)也會導致內存不足錯誤。理解它是擬合大型模型和避免神秘崩潰的關鍵。 GPU 記憶體管理和碎片是一個技術構建塊,會大規模影響模型品質、基礎設施成本、延遲和可靠性。為了建立深入的理解,請將 GPU 記憶體管理和碎片視為一種操作模型,而不是單一功能:定義所需的結果,澄清假設,並將系統可以可靠地執行的操作與仍需要專家判斷的操作分開。

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

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

戰略影響

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

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

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

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

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

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

GPU 記憶體管理和碎片的未來

受作業系統的啟發,記憶體管理變得更加智慧和分頁。虛擬記憶體式分配器和分頁注意力(用於在推理過程中管理 KV 快取)等技術可顯著減少浪費和碎片。期望框架預設使用可擴展、碎片整理的分配器,透過內建分析器獲得更好的可見性,以及與卸載和重新計算的更緊密耦合,以便系統自動處理 GPU、CPU 和磁碟內存,以保持高利用率並很少發生崩潰。

現實世界的實施

儘管保留記憶體顯示可用空間,但訓練運行仍會因「CUDA 記憶體不足」而崩潰,透過設定 PYTORCH_CUDA_ALLOC_CONF 以啟用可擴展段來修復此問題。

使用 torch.cuda.memory_summary 或記憶體快照來診斷哪些張量和碎片正在佔用 GPU 的 80 GB。

vLLM 的 PagedAttention 管理固定大小頁面中的注意力 KV 緩存,以服務許多並發聊天請求,而不會浪費內存。

降低批量大小或啟用梯度檢查點以減少啟動記憶體並避免碎片驅動的記憶體不足故障。

實施模式

GPU 記憶體管理與碎片實踐

儘管保留記憶體顯示可用空間,但訓練運行仍會因「CUDA 記憶體不足」而崩潰,透過設定 PYTORCH_CUDA_ALLOC_CONF 以啟用可擴展段來修復此問題。

儘管保留記憶體顯示可用空間,但訓練運行仍會因「CUDA 記憶體不足」而崩潰,透過設定 PYTORCH_CUDA_ALLOC_CONF 來啟用可擴展段進行修復。當團隊預先定義品質閾值、為邊緣情況保留人工升級路徑並隨著時間的推移追蹤生產力增益和錯誤成本時,通常會獲得更好的結果。

GPU 記憶體管理與碎片實踐

使用 torch.cuda.memory_summary 或記憶體快照來診斷哪些張量和碎片正在佔用 GPU 的 80 GB。

使用 torch.cuda.memory_summary 或記憶體快照來診斷哪些張量和碎片正在消耗 GPU 的 80 GB 團隊在預先定義品質閾值、為邊緣情況保留人工升級路徑並隨著時間的推移跟踪生產力增益和錯誤成本時通常會獲得更好的結果。

GPU 記憶體管理與碎片實踐

vLLM 的 PagedAttention 管理固定大小頁面中的注意力 KV 緩存,以服務許多並發聊天請求,而不會浪費內存。

vLLM 的 PagedAttention 管理固定大小頁面中的注意力 KV 緩存,以在不浪費內存的情況下為許多並發聊天請求提供服務。當團隊預先定義品質閾值、為邊緣情況保留人工升級路徑並隨著時間的推移追蹤生產力增益和錯誤成本時,通常會獲得更好的結果。

GPU 記憶體管理與碎片實踐

降低批量大小或啟用梯度檢查點以減少啟動記憶體並避免碎片驅動的記憶體不足故障。

降低批量大小或啟用梯度檢查點以減少激活內存並避免碎片驅動的內存不足故障當團隊預先定義質量閾值、為邊緣情況保留人工升級路徑並隨著時間的推移跟踪生產力增益和錯誤成本時,通常會獲得更好的結果。

風險與防護欄

!

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

!

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

!

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

實施路線圖

1

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

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

2

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

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

3

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

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

4

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

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

不斷探索