• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    pytorch 运行一段时间后出现GPU OOM的问题

    pytorch的dataloader会将数据传到GPU上,这个过程GPU的mem占用会逐渐增加,为了避免GPUmen被无用的数据占用,可以在每个step后用del删除一些变量,也可以使用torch.cuda.empty_cache()释放显存:

    del targets, input_k, input_mask
    torch.cuda.empty_cache()

    这时能观察到GPU的显存一直在动态变化。

    但是上述方式不是一个根本的解决方案,因为他受到峰值的影响很大。比如某个batch的数据量明显大于其他batch,可能模型处理该batch时显存会不够用,这也会导致OOM,虽然其他的batch都能顺利执行。

    显存的占用跟这几个因素相关:

    模型参数量

    batch size

    一个batch的数据 size

    通常我们不希望改变模型参数量,所以只能通过动态调整batch-size,使得一个batch的数据 size不会导致显存OOM:

    ilen = int(sorted_data[start][1]['input'][0]['shape'][0])
    olen = int(sorted_data[start][1]['output'][0]['shape'][0])
    # if ilen = 1000 and max_length_in = 800
    # then b = batchsize / 2
    # and max(1, .) avoids batchsize = 0
    # 太长的句子会被动态改变bsz,单独成一个batch,否则padding的部分就太多了,数据量太大,OOM
    factor = max(int(ilen / max_length_in), int(olen / max_length_out))
    b = max(1, int(batch_size / (1 + factor)))
    #b = batch_size
    end = min(len(sorted_data), start + b)
    minibatch.append(sorted_data[start:end])
    if end == len(sorted_data):
        break
    start = end

    此外,如何选择一个合适的batchsize也是个很重要的问题,我们可以先对所有数据按照大小(长短)排好序(降序),不进行shuffle,按照64,32,16依次尝试bsz,如果模型在执行第一个batch的时候没出现OOM,那么以后一定也不会出现OOM(因为降序排列了数据,所以前面的batch的数据size最大)。

    还有以下问题

    pytorch increasing cuda memory OOM 问题

    改了点model 的计算方式,然后就 OOM 了,调小了 batch_size,然后发现发现是模型每次迭代都会动态增长 CUDA MEMORY, 在排除了 python code 中的潜在内存溢出问题之后,基本可以把问题定在 pytorch 的图计算问题上了,说明每次迭代都重新生成了一张计算图,然后都保存着在,就 OOM 了。

    参考

    CUDA memory continuously increases when net(images) called in every iteration

    Understanding graphs and state

    说是会生成多个计算图:

    loss = SomeLossFunction(out) + SomeLossFunction(out)

    准备用 sum来避免多次生成计算图的问题:

    loss = Variable(torch.sum(torch.cat([loss1, loss2], 0)))

    然而,调着调着就好了,和报错前的 code 没太大差别。估计的原因是在pycharm 远程连接服务器的时候 code 的保存版本差异问题,这个也需要解决一下。

    还有个多次迭代再计算梯度的问题,类似于 caffe中的iter_size,这个再仔细看看。

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • 解决pytorch GPU 计算过程中出现内存耗尽的问题
    • Pytorch GPU显存充足却显示out of memory的解决方式
    • 解决Pytorch 训练与测试时爆显存(out of memory)的问题
    上一篇:python flask开发的简单基金查询工具
    下一篇:帮你快速上手Jenkins并实现自动化部署
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    pytorch 运行一段时间后出现GPU OOM的问题 pytorch,运行,一段时间,后,