Pytorch:为什么'Tensor'变量占用的内存这么小?

uinbv5nw  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(372)

在Pytorch 1.0.0中,我发现一个tensor变量占用的内存非常小,我想知道它是如何存储这么多数据的,下面是代码。

a = np.random.randn(1, 1, 128, 256)
b = torch.tensor(a, device=torch.device('cpu'))

a_size = sys.getsizeof(a)
b_size = sys.getsizeof(b)

是262288。是72。

kninwzqo

kninwzqo1#

答案分为两部分:从sys.getsizeof的文档来看,首先
所有内置对象都将返回正确的结果,但这不一定适用于第三方扩展,因为它是特定于实现的。
所以对于Tensor__sizeof__可能是未定义的,或者定义的与你期望的不同--这个函数不是你可以依赖的。
只计算直接归因于对象的内存消耗,而不计算它所引用的对象的内存消耗。
这意味着,如果torch.Tensor对象只包含对实际内存的引用,那么sys.getsizeof中就不会显示这个值。

import torch, sys
b = torch.randn(1, 1, 128, 256, dtype=torch.float64)
sys.getsizeof(b)
>> 72
sys.getsizeof(b.storage())
>> 262208

注意:我将dtype显式设置为float64,因为这是numpy中的默认值dtype,而torch默认使用float32

相关问题