首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从内存不足的pytroch CUDA中恢复?

如何从内存不足的pytroch CUDA中恢复?
EN

Stack Overflow用户
提问于 2018-12-19 00:13:58
回答 1查看 210关注 0票数 3

我尝试了以下代码。当try中的代码由于CUDA内存不足而失败时,我将except中的批处理大小减少了一半,但它仍然出现了在except中运行模型的相同问题,但我确信一半的批处理大小是可运行的,因为我尝试在except中直接运行代码,而不尝试完整的批处理。它工作得很好。顺便问一下,有没有办法自动设置批处理大小,以充分利用CUDA内存而不会溢出?

代码语言:javascript
运行
复制
try:
    output = model(Variable(torch.LongTensor(np.array(x))).to(device),Variable(torch.LongTensor(np.array(pos))).to(device),Variable(torch.LongTensor(np.array(m))).to(device))
    loss = criterion(output, Variable(torch.LongTensor(y)).to(device))#lb.transform(y)
    loss.backward()
    optimizer.step()
    losses.append(loss.data.mean())
except:
    half = int(len(x) / 2)
    x1 = x[:half]
    x2 = x[half:]
    pos1 = pos[:half]
    pos2 = pos[half:]
    m1 = m[:half]
    m2 = m[half:]
    y1 = y[:half]
    y2 = y[half:]
    optimizer.zero_grad()
    output = model(Variable(torch.LongTensor(np.array(x1))).to(device),Variable(torch.LongTensor(np.array(pos1))).to(device),Variable(torch.LongTensor(np.array(m1))).to(device))
    loss = criterion(output, Variable(torch.LongTensor(y1)).to(device))#lb.transform(y)
    loss.backward()
    optimizer.step()
    losses.append(loss.data.mean())
    output = model(Variable(torch.LongTensor(np.array(x2))).to(device),Variable(torch.LongTensor(np.array(pos2))).to(device),Variable(torch.LongTensor(np.array(m2))).to(device))
    loss = criterion(output, Variable(torch.LongTensor(y2)).to(device))#lb.transform(y)
    loss.backward()
    optimizer.step()
    losses.append(loss.data.mean())
EN

回答 1

Stack Overflow用户

发布于 2020-06-20 21:13:04

看起来你的gpu上还留有一些东西。在except的开头,您是否尝试过使用torch.cuda.empty_cache()来释放cuda缓存?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53837057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档