Memory leaks Pytorch:如何知道正在使用的GPU内存是否确实需要,或者是否存在内存泄漏

Memory leaks Pytorch:如何知道正在使用的GPU内存是否确实需要,或者是否存在内存泄漏,memory-leaks,deep-learning,pytorch,gpu,conv-neural-network,Memory Leaks,Deep Learning,Pytorch,Gpu,Conv Neural Network,我有3台特斯拉V100(16 GB)。我正在使用Efficient net(6300万个参数)对批量大小为20的(512512)图像进行迁移学习。 我的GPU内存使用率如下所示- 如您所见,它几乎填满了所有3个GPU(几乎80%)。 我的问题是,是否有任何理论方法可以计算所显示的GPU内存利用率是模型在特定映像和批大小下所要求的,或者我的GPU中是否存在内存泄漏?我不确定这是您要求的,但您是否尝试过这样做: 内存使用率=变量数量*每个变量的内存使用率 因此,如果您使用torch.float32

我有3台特斯拉V100(16 GB)。我正在使用Efficient net(6300万个参数)对批量大小为20的(512512)图像进行迁移学习。 我的GPU内存使用率如下所示-

如您所见,它几乎填满了所有3个GPU(几乎80%)。
我的问题是,是否有任何理论方法可以计算所显示的GPU内存利用率是模型在特定映像和批大小下所要求的,或者我的GPU中是否存在内存泄漏?

我不确定这是您要求的,但您是否尝试过这样做:

内存使用率=变量数量*每个变量的内存使用率

因此,如果您使用
torch.float32
张量,并且有125000个变量通过
.cuda()
发送到GPU。然后,您将在GPU上使用4G字节的内存。您可以与内存中的可用内存进行比较

另一个健全性检查是检查GPU在模型每次迭代中的内存使用情况,如果它翻了一番,那么您就有内存泄漏


希望这有帮助

一个问题:如何知道代码中变量的数量。另外,关于答案的第二部分——在我的例子中,第一个历元的内存大小增加,如图中所示,然后每个历元的内存大小保持不变。只需查看张量的大小和数据类型,就可以选择float32张量,因为它们占用的内存较少。由于您有6300万个参数,我认为这需要大量内存,内存泄漏会立即使您的机器崩溃。我所期望的是时代的行为。看起来还可以,但14分钟后会发生什么?也许你启动了验证循环?是的,验证循环开始了。我看到这篇文章,我需要一些时间来思考,