在 Google Colab 中,GPU 記憶體並不會自動釋放,尤其是當發生 OutOfMemoryError
時,這可能會導致內存碎片或無法釋放的記憶體。要手動重設 GPU 記憶體,有幾種方法可以嘗試:
1. 重新啟動 Colab 內核
這是最簡單且最直接的方式,可以清除所有的記憶體分配:
- 點擊 Colab 介面上的 “Runtime”。
- 選擇 “Restart runtime”(重啟運行時)。
這樣可以清除所有進程並釋放 GPU 記憶體。
2. 手動釋放 GPU 記憶體
如果你不想重啟整個內核,可以手動清除一些 GPU 記憶體。試試以下方法:
使用 torch.cuda.empty_cache()
這個方法會清除未使用的記憶體,將它釋放回 GPU,但是不會完全重設 GPU 記憶體,這對釋放一些內存是有效的。
import torch
torch.cuda.empty_cache()
釋放已經不再需要的變數
如果你創建了不再需要的張量,可以顯式地刪除它們並清除內存:
del variable_name # 刪除不再需要的變數
torch.cuda.empty_cache() # 清除不再使用的內存
使用 gc.collect()
Python 的垃圾回收器有時無法及時清理不再使用的內存,手動觸發它可以幫助釋放記憶體。
import gc
gc.collect()
torch.cuda.empty_cache()
3. 使用環境變數 PYTORCH_CUDA_ALLOC_CONF
如果你在使用 PyTorch 時遇到記憶體分配問題,可以通過設置環境變數來調整 CUDA 記憶體的分配行為。這有時候可以幫助避免 GPU 記憶體碎片化。
import os
os.environ['PYTORCH_CUDA_ALLOC_CONF'] = 'max_split_size_mb:128'
這會設置 PyTorch 對內存的分配大小限制,從而減少碎片化的機會。
4. 減少 GPU 記憶體占用
在訓練模型時,若 GPU 記憶體不足,還可以考慮調整以下參數來減少內存占用:
- 減小 batch size:減少每次處理的數據量。
- 減少模型大小:嘗試較小的模型架構或參數。
- 混合精度訓練:使用
float16
精度來訓練模型,這樣可以節省大量記憶體。
# Example of using mixed precision
from torch.cuda.amp import autocast
with autocast():
output = model(input)
通過這些步驟,你可以釋放一些 GPU 記憶體,從而避免再度發生 OutOfMemoryError
。