Pytorch:为啥`tensor`变量占用的内存这么小?
Posted
技术标签:
【中文标题】Pytorch:为啥`tensor`变量占用的内存这么小?【英文标题】:Pytorch: Why is the memory occupied by the `tensor` variable so small?Pytorch:为什么`tensor`变量占用的内存这么小? 【发布时间】:2019-06-19 01:56:39 【问题描述】:在 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)
a_size
是 262288。b_size
是 72。
【问题讨论】:
【参考方案1】:答案分为两部分。来自sys.getsizeof
的文档,首先
所有内置对象都将返回正确的结果,但这对于第三方扩展不一定成立,因为它是特定于实现的。
因此,对于张量 __sizeof__
而言,可能未定义或定义与您预期的不同 - 此函数不是您可以依赖的。其次
只考虑直接归因于对象的内存消耗,而不考虑它所引用的对象的内存消耗。
这意味着如果torch.Tensor
对象仅包含对实际内存的引用,则不会在sys.getsizeof
中显示。确实如此,如果您改为检查底层storage 的大小,您将看到预期的数字
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
。
【讨论】:
真的很棒的答案,会给指向storage
的指针再+1。非常有帮助!以上是关于Pytorch:为啥`tensor`变量占用的内存这么小?的主要内容,如果未能解决你的问题,请参考以下文章
『PyTorch』第五弹_深入理解Tensor对象_下:从内存看Tensor
[Pytorch系列-19]:Pytorch基础 - Variable变量的使用方法与 Tensor变量的比较
PyTorch内存模型:“torch.from_numpy()”vs“torch.Tensor()”