为什么PyTorch使用这么多GPU内存来存储张量?
我使用Pytork做了一个简单的测试,包括测量当前GPU内存使用情况,创建一个特定大小的张量,将其移动到GPU,然后再次测量GPU内存。根据我的计算,存储张量的每个元素大约需要6.5k字节!以下是细分:为什么PyTorch使用这么多GPU内存来存储张量?,pytorch,Pytorch,我使用Pytork做了一个简单的测试,包括测量当前GPU内存使用情况,创建一个特定大小的张量,将其移动到GPU,然后再次测量GPU内存。根据我的计算,存储张量的每个元素大约需要6.5k字节!以下是细分: 在创建张量之前使用GPU内存,如nvidia smi:384 MiB所示 创建包含100000个随机元素的张量: a=torch.rand(100000) 将张量传输到GPU: device=torch.device('cuda')) b=a.to(设备) 传输后使用的GPU内存:1020
nvidia smi
:384 MiB所示a=torch.rand(100000)
device=torch.device('cuda'))
b=a.to(设备)
(1020-384)*1024*1024/len(b)
#答案是6668.94336
至少可以说,这很奇怪。为什么需要6.5 KiB的GPU内存来存储单个float32
元素
更新:根据Robert Crovella在评论中的建议,我创建了另一个tensor
c
,然后将其移动到d
上的CUDA设备。GPU内存使用率没有增加。因此,PyTorch或CUDA似乎需要636mib来进行引导。为什么呢?这个内存是用来做什么的?这对我来说太多了 创建第一个张量a
并将其移动到b
上的设备后,测量GPU内存使用情况。然后创建另一个张量c
,并移动到d
上的设备。然后再测量一次。使用这两个测量值之间的差异。我用你的建议更新了问题。这有点奇怪。为什么PyTorch或CUDA需要636MIB来引导?这很正常。这就像问为什么Windows或Linux操作系统需要内存来运行一样,我认为这不是一个有效的比较。对于Windows或Linux,您谈论的是一个内核、许多驱动程序、一个完整的用户界面、许多在后台运行的应用程序,等等。因此,我无法理解为什么需要所有这些内存来引导CUDA/PyTorch。我们可以同意不同意。设置一个GPU供CUDA使用是有开销的。我不能给你描述它的细节,也不能解释它为什么这么大。既然这就是你现在的问题,我将无法进一步提供帮助。祝你好运创建第一个张量a
并将其移动到b
上的设备后,测量GPU内存使用情况。然后创建另一个张量c
,并移动到d
上的设备。然后再测量一次。使用这两个测量值之间的差异。我用你的建议更新了问题。这有点奇怪。为什么PyTorch或CUDA需要636MIB来引导?这很正常。这就像问为什么Windows或Linux操作系统需要内存来运行一样,我认为这不是一个有效的比较。对于Windows或Linux,您谈论的是一个内核、许多驱动程序、一个完整的用户界面、许多在后台运行的应用程序,等等。因此,我无法理解为什么需要所有这些内存来引导CUDA/PyTorch。我们可以同意不同意。设置一个GPU供CUDA使用是有开销的。我不能给你描述它的细节,也不能解释它为什么这么大。既然这就是你现在的问题,我将无法进一步提供帮助。祝你好运