今天在kaggle上跑模型的时候发现,模型还没开始跑就已经占用了11G的显存。这时候就需要清除一下系统中缓存的显存占用。
显存
我们先来查看一下系统显存占用情况:
import torch
def get_gpu_memory():
gpu_memory = torch.cuda.memory_allocated() / 1024 / 1024 / 1024 # in MB
return gpu_memory
print(f"init GPU Memory Used: {get_gpu_memory()} GB")
init GPU Memory Used: 11.563772201538086 GB
然后我们来清除
from numba import cuda
cuda.select_device(0)
cuda.close()
再执行一下get_gpu_memory
发现占用的显存已经没了
init GPU Memory Used: 0.0 GB
另外,用下面这个方法也可以清除系统中缓存的显存占用
import torch
torch.cuda.empty_cache()
内存
顺便,我们来看看内存怎么查询和清除
- 查询内存占用情况
import psutil
# 获取系统内存占用情况
memory_info = psutil.virtual_memory()
# 获取总内存大小(以字节为单位)
total_memory = memory_info.total
# 获取已使用的内存大小(以字节为单位)
used_memory = memory_info.used
# 获取空闲内存大小(以字节为单位)
free_memory = memory_info.available
# 打印内存使用情况
print(f"Total Memory: {total_memory / (1024 * 1024 * 1024)} GB")
print(f"Used Memory: {used_memory / (1024 * 1024 * 1024)} GB")
print(f"Free Memory: {free_memory / (1024 * 1024 * 1024)} GB")
Total Memory: 31.357559204101562 GB
Used Memory: 0.91534423828125 GB
Free Memory: 29.996959686279297 GB
- 清除占用内存
import gc
gc.collect()