为什么PyTorch使用这么多GPU内存来存储张量?

为什么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

我使用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 MiB
  • 计算每个张量元素的内存变化
  • (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使用是有开销的。我不能给你描述它的细节,也不能解释它为什么这么大。既然这就是你现在的问题,我将无法进一步提供帮助。祝你好运