【发布时间】:2018-09-04 03:56:55
【问题描述】:
遵循 jcjohnson 提出的一个想法,为了在受限的内存环境中生成神经风格的大图像,我试图在 updateOutput 和 updateGradInput 中将层激活从 gpu 来回移动到 cpu。例如
if (torch.type(previousModule) == 'cudnn.ReLU' or torch.type(previousModule) == 'cudnn.SpatialConvolution') then
previousModule.output = previousModule.output:cuda()
collectgarbage('collect')
end
....
if (torch.type(currentModule) == 'cudnn.ReLU' or torch.type(currentModule) == 'cudnn.SpatialConvolution') then
currentModule.output = currentModule.output:float()
collectgarbage('collect')
end
从功能上讲,它适用于较小的图像,生成图像,尽管速度很慢。然而,即使在将输出张量从 cuda 转换为浮点数之后,尽管显式调用了 collectgarbage() 例程,它仍然不会释放 gpu 中的内存,并且我无法生成比最初受 gpu 内存限制的图像更大的图像。
有什么想法我在这里出错了吗?
【问题讨论】:
标签: lua garbage-collection torch