pytorch写神经网络提示CUDA out of memory

我在用pytorch写一个三层的人工神经网络,数据量也不很大,近1万条数据,想放到GPU上训练,但是会报错空间不足,CUDA out of memory.
我有通过加@profile来看内存使用情况

@profile
    def __init__(self):
        super(BookSalesPrediction, self).__init__()
        self.fc1 = torch.nn.Linear(inputs.shape[1], 256)
        self.fc2 = torch.nn.Linear(256, 128)
        self.fc3 = torch.nn.Linear(128, 1)
    @profile
    def forward(self, x):
        x = torch.nn.functional.relu(self.fc1(x))
        x = torch.nn.functional.relu(self.fc2(x))
        x = self.fc3(x)
        return x

发现在进入这个神经网络前,已经占了30多G的空间了,然后去检查数据输入的部分,发现

# 读取y值
y= df['sale'].values
with torch.no_grad():
    y=torch.tensor(y).detach()
print(u'占空间:%.4f GB' % (psutil.Process(os.getpid()).memory_info().rss / 1024 / 1024 / 1024))

#logy
y = torch.clamp(y, min=1e-8)
Y=torch.log(y)
Y=Y.cuda()
print(u'占空间:%.4f GB' % (psutil.Process(os.getpid()).memory_info().rss / 1024 / 1024 / 1024))

Y=Y.cuda()这句话运行完,内存利用率就上去了,此时能占30多个G,我试了下把Y在另一个程序读取再处理,保存到.pt文件中,到这个程序中再读取.pt文件,再.cuda()还是会一样的结果,这是为什么,请大家帮忙解答。

你数据量不是1万条吗,如果每个样本都包含多个特征就用更小的数据批次,代码里要直接将y转换为torch.Tensor

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你一次性将1万条数据都加载到显存中?
你现在如果是这么做的话,说明你的硬件根本不支持你的做法,你应该是每次加载一部分数据训练,训练结束后加载其他部分,这也就是神经网络中batch size的作用。另外比较建议你用data loader的方式加载数据,每一批次根据你的显卡调整大小。