Pytorch tensor.save() produces huge files for small tensors
pytorch存储一个tensor的时候,假如这个tensor是某一个大tensor的一部分,如果你直接存,那么他会存成那个大的tensor,虽然你只需要大tensor的一部分,这个时候我们需要使用clone的这个函数,新建一个tensor,这样就不会存成那个大的了,并且如果存储的数据较少,那么其实大部分的空间不是被你的数据占据了,而是会被torch.save塞进去的其他东西占据了,存的多的话就还好,它塞进去的东西占的比例就小了。
下面是测试样例:
import torch
import os
if __name__ == '__main__':
a= torch.tensor(64)
torch.save(a, "./a_tensor.pt")
torch.save(a.clone(), "./a_clone_tensor.pt")
a_size = os.path.getsize("./a_tensor.pt")
a_clone_size = os.path.getsize("./a_clone_tensor.pt")
print(a_size)
print(a_clone_size)
b = [i for i in range(100)]
b = [b for i in range(3)]
b = torch.tensor(b)
print(b.shape)
torch.save(b, "b_tensor.pt")
torch.save(b[0], "b0_tensor.pt")
torch.save(b[0].clone(), "b0_clone_tensor.pt")
b_size = os.path.getsize("b_tensor.pt")
b0_size = os.path.getsize("b0_tensor.pt")
b0_clone_size = os.path.getsize("b0_clone_tensor.pt")
print(b_size)
print(b0_size)
print(b0_clone_size)
结果(单位是字节B):
759
759
torch.Size([3, 100])
3127
3127
1527