我在用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
不知道你这个问题是否已经解决, 如果还没有解决的话:运行时,CPU的利用率70%+,GPU0的利用率恒为1%,GPU1的利用率不到20%,磁盘利用率大幅增加。为什么CPU的利用率仍然这么高?而GPU的利用率却不是很高?之前用CPU跑的时候,每次CPU的利用率都接近100%。难道是我电脑显卡不好?!
你一次性将1万条数据都加载到显存中?
你现在如果是这么做的话,说明你的硬件根本不支持你的做法,你应该是每次加载一部分数据训练,训练结束后加载其他部分,这也就是神经网络中batch size的作用。另外比较建议你用data loader的方式加载数据,每一批次根据你的显卡调整大小。