当使用 num_workers=32
运行 PyTorch 训练程序时,htop
显示出 33 个 Python 进程,每个进程都有 32 GB 的 VIRT
和 15 GB 的 RES
。
这是否意味着 PyTorch 训练正在使用 33 个进程 X 15 GB = 495 GB 的内存?但是,htop
仅显示整个计算机上使用了约 50 GB 的 RAM 和 20 GB 的 swap,而该机器有 128 GB 的 RAM。那么,我们如何解释这种差异?
是否有更准确的方法来计算主 PyTorch 程序及其所有子 DataLoader 工作进程使用的总内存量?
谢谢
htop
中的VIRT
大致指的是您的进程可以访问的RAM数量。而RES
则是实际消耗的RAM。据我所知,RES
是基于父进程的,因此查看父进程的RES
使用情况(将自己设置为树形视图)可以大致了解您总共使用了多少RAM。在GPU内存方面,nvidia-smi
也是一个很好的代理。 - John