Colab 的 GPU 記憶體並不會自動釋放,尤其是當發生 OutOfMemoryError 時

在 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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *