PyTorch的torch.cuda.max_memory_allocated()与nvidia-smi结果为何不一致?
PyTorch max_memory_allocated与nvidia-smi内存差异原因
你的字节转GB的计算完全正确,差异核心来自两者统计的内存范围截然不同:
1. torch.cuda.max_memory_allocated的统计边界
这个函数仅统计PyTorch为张量(Tensor)实际分配的内存,以下内存均不在其统计范围内:
- PyTorch初始化CUDA时生成的上下文内存(不同GPU型号下,这部分占用从几百MB到几GB不等)
- PyTorch为内存复用预留的缓存内存(已释放的张量内存不会立刻归还GPU,而是缓存供后续使用,这部分需用
torch.cuda.max_memory_reserved(device_id)才能统计) - 系统中其他进程(如其他Python程序、CUDA驱动、桌面后台进程等)占用的GPU内存
2. nvidia-smi的统计边界
nvidia-smi显示的是GPU的总已占用内存,包含所有进程的内存使用、CUDA驱动开销、PyTorch的上下文+缓存内存,以及任何占用GPU内存的内容。
对应你的场景:你观察到的32GB是GPU总占用量,其中13.5GB是PyTorch实际用于张量计算的内存,剩余部分就是上述未被max_memory_allocated统计的内存开销。
验证方法
- 执行
torch.cuda.max_memory_reserved(0)/(1024**3),该数值会更接近nvidia-smi中你的PyTorch进程单独占用的内存(仍不包含其他进程) - 关闭所有其他占用GPU的进程后,再对比nvidia-smi总占用与
max_memory_reserved的数值,差异会大幅缩小 - 用
nvidia-smi -l 1实时刷新内存数据,同时在代码中打印两个内存指标,可直观看到对应关系
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

