PyTorch中两类GPU内存统计值差异及内存泄漏疑问
PyTorch CUDA内存差异与内存泄漏疑问解答
核心差异原因
先明确两个函数统计的内存范围:
torch.cuda.memory_allocated(device=device):仅统计PyTorch当前活跃张量实际占用的GPU内存,比如模型参数、正在使用的输入/输出张量等。torch.cuda.mem_get_info(device=device)返回的total - unused是GPU的整体已用内存,包含以下几部分:- PyTorch内存分配器缓存的空闲内存(释放的张量内存未立刻归还GPU系统)
- CUDA上下文本身的开销(首次初始化CUDA时创建,占用几百MB到1GB)
- 其他进程(如CUDA工具、其他Python程序)占用的GPU内存
- PyTorch内部临时操作产生的、已释放但未清理的内存
差值是否属于内存泄漏?
这个固定差值大概率不是内存泄漏,属于正常现象。判断内存泄漏的标准是:随着代码重复执行(比如训练循环),torch.cuda.memory_allocated()的数值持续增长,且没有对应未释放的张量存在。如果只是初次运行后出现固定的差值,基本是上述缓存、上下文开销导致的。
你的代码与结果参考
current_memory = torch.cuda.memory_allocated(device=device) # return current GPU memory total_free_memory = torch.cuda.mem_get_info(device=device) # returns the total, unused GPU memory total = mem_get_info[1] unused = mem_get_info[0] used_memory = total - unused
运行结果:
total: 11.77GBused_memory: 4.63GBcurrent_memory: 3.1GB
内容的提问来源于stack exchange,提问作者TaeUk Noh
相关产品推荐
相关产品推荐

