You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nvidia-smi与PyTorch GPU内存占用报告不一致问题咨询

PyTorch与nvidia-smi GPU内存占用不一致的原因分析

当运行以下PyTorch代码时,内存快照显示仅占用2MiB,符合PyTorch最小内存块为2MiB的文档说明:

tensor = torch.randn(256, 256, device='cuda', dtype=torch.float16) 
snapshot = torch.cuda.memory._snapshot()
total_size = snapshot['segments'][0]["total_size"] / 1024 / 1024
print(total_size,"MiB")

但通过nvidia-smi查询时,显示已使用391MiB内存:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.125.06   Driver Version: 525.125.06   CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:41:00.0 Off |                  Off |
|  0%   34C    P8    14W / 450W |    391MiB / 24564MiB |      0%      Default |
|                               |                      |                  N/A |

这种差异的核心原因是两者统计的内存范围完全不同,具体包括以下几点:

  • CUDA上下文初始化开销:PyTorch首次调用CUDA相关操作时,会触发CUDA Runtime和GPU驱动的上下文初始化,这部分内存用于存储设备管理数据、驱动内部结构等,属于GPU全局占用的内存,会被nvidia-smi统计,但不会被PyTorch的内存快照计入。
  • PyTorch内存池预分配:为了提升内存分配效率,PyTorch的CUDA内存分配器会提前向GPU申请一块较大的内存池,后续tensor的内存分配直接从池中取用。nvidia-smi统计的是GPU被实际占用的总内存(包括整个内存池),而PyTorch的内存快照只统计池子里被tensor实际使用的部分。
  • 系统与其他进程占用:如果GPU同时承担显示输出任务,桌面环境(如Xorg、Wayland)会占用部分显存;此外NVIDIA相关服务、其他后台GPU进程也会占用显存,这些都被nvidia-smi纳入统计,但PyTorch只会统计自身进程内的内存使用。

内容的提问来源于stack exchange,提问作者Tommaso Bendinelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:13:17