pytorch - 评估时 GPU 内存不足:Pytorch
问题描述
当我只训练而不验证时,模型训练得很好,但是它在评估过程中内存不足,但我不明白为什么这可能是一个问题,特别是因为我正在使用torch.no_grad()
任何想法?
def test(epoch,net,testloader,optimizer):
net.eval()
test_loss = 0
correct = 0
total = 0
idx = 0
features_all = []
for batch_idx, (inputs, targets) in enumerate(testloader):
with torch.no_grad():
idx = batch_idx
# inputs, targets = inputs.cpu(), targets.cpu()
if use_cuda:
inputs, targets = inputs.cuda(), targets.cuda()
inputs, targets = Variable(inputs), Variable(targets)
save_features, out, ce_loss = net(inputs,targets)
test_loss += ce_loss.item()
_, predicted = torch.max(out.data, 1)
total += targets.size(0)
correct += predicted.eq(targets.data).cpu().sum().item()
features_all.append((save_features, predicted, targets.data))
test_acc = 100.*correct/total
test_loss = test_loss/(idx+1)
logging.info('test, test_acc = %.4f,test_loss = %.4f' % (test_acc,test_loss))
print('test, test_acc = %.4f,test_loss = %.4f' % (test_acc,test_loss))
return features_all, test_acc
解决方案
features_all.append((save_features, predicted, targets.data))
此行保存对 GPU 内存中张量的引用,因此当循环进入下一次迭代时,CUDA 内存不会被释放(最终导致 GPU 内存不足)。将张量移动到 CPU(使用.cpu()
),同时保存它们。
推荐阅读
- authentication - 如何从页面中分离赛普拉斯测试运行器?
- vue.js - Vue测试库,子组件接收props
- sas - 从字符串 SAS 中删除值
- angularjs - AngularJS $location.search 不适用于 URL 中间的查询参数
- r - 按 chunk_size 写入多个 parquet 文件
- javascript - 我的 clearScreen 功能没有清除屏幕
- keyboard-shortcuts - 流氓键盘快捷键
- javascript - 根据查找值对二维数组中的值求和 - Javascript
- kubernetes - Minikube Ingress 卡在“计划同步”中
- java - refCnt:Micronaut 中带有反应流的 0 个异常 - 微服务