搜索

查看: 3097|回复: 11

[Python] 基于CUDA out of memory的一种神奇解决方式

[复制链接]
发表于 2023-5-4 17:22:54 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:22:54 3097 11 看全部
目录
  • CUDA out of memory的解决
  • CUDA error: out of memory问题
  • 解决思路溯寻
  • 总结
    CUDA out of memory的解决
    我的输入样本维度是(1000,12,24,72),一开始我是这么输入数据的:
    trainer.train(x_train, t_train, x_val, t_val)
    发现必溢出,后来我取出其中400个样本输入:
    trainer.train(x_train[:400], t_train[:400], x_val, t_val)
    发现不溢出了,训练正常,然后我把400删掉,但没删冒号:
    trainer.train(x_train[:], t_train[:], x_val, t_val)
    竟然也没有溢出!!!虽然训练速度降了,但是也能正常训练,我不是很懂原理是啥,好神奇!
    但是样本量一大起来,即使用冒号法还是可能会溢出。比方说我后来把4000个样本作为x/t_train:
    >>>x_train.shape
    (4000,12,24,72)
    >>>t_train.shape
    (4000,24)
    >>>trainer.train(x_train[:], t_train[:], x_val, t_val)
    RuntimeError:CUDA out of memory...
    之所以说“可能”会溢出,是因为确实是有小概率能正常训练的,但是大部分情况还是会out of memory…
    不过这真的是一个“神奇”的方法,能从一定程度上解决CUDA out of memory 的问题。希望大佬能解释一下这其中的原理~谢谢!
    -------------------------------------------------------------------
    再附上两个我昨天看到的两种不同的解决方案。
    一个是减少带梯度的中间变量(即非叶子节点)。简言之,能一行代码搞定的,尽量不要写成多行,即使写成多行,也要尽可能减少新变量的建立。
    另一个是在eval的时候,让所有的变量都不带梯度。只需要添加一行代码:
    with torch.no_grad():
        outputs = Net_(inputs)
    在with语句里的所有变量requires_grad都是False。

    CUDA error: out of memory问题
    本人遇到的问题是在训练是正常,一到验证时就会出现cuda error: out of memory的问题

    解决思路溯寻
    1.首先就是考虑减少batch_size和num_worker,对于我的情况不奏效
    2.然后找到pin_memory发现是设置的True,改为false,仍旧不管用
    3.包括把
    # Empty GPU cache
            if torch.cuda.is_available():
                torch.cuda.empty_cache()
    放到报错位置的前后,不奏效
    4.后来再聚焦问题关键,是一到验证就会出问题,所以专门查攻略,我初步怀疑是因为验证没有参与反向传播,梯度累积,内存爆了,但当时代码中有with torch.no_grad(): ,所以并没有发现关键,知道看到别人里面 forword是放在with torch.no_grad()后面的,所以最后
    with torch.no_grad():
                    # Forward pass
                    loss, np_probs, hv_logits = self.forward(images, targets)
    问题解决!

    总结
    以上为个人经验,希望能给大家一个参考,也希望大家多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-29 04:19:31 | 显示全部楼层
    向往草原403 2023-6-29 04:19:31 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    回复

    使用道具 举报

    发表于 2023-6-29 17:40:34 | 显示全部楼层
    素色流年783 2023-6-29 17:40:34 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    回复

    使用道具 举报

    发表于 2023-6-29 22:03:29 | 显示全部楼层
    ffycxyw2274436 2023-6-29 22:03:29 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-30 03:07:47 | 显示全部楼层
    米老鼠和蓝精鼠v 2023-6-30 03:07:47 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    回复

    使用道具 举报

    发表于 2023-6-30 13:47:51 | 显示全部楼层
    贰十岁装成熟装s 2023-6-30 13:47:51 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    回复

    使用道具 举报

    发表于 2023-7-1 00:49:44 | 显示全部楼层
    123456848 2023-7-1 00:49:44 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    回复

    使用道具 举报

    发表于 2023-7-1 00:57:56 | 显示全部楼层
    啤酒瓶空了缓 2023-7-1 00:57:56 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    回复

    使用道具 举报

    发表于 2023-7-3 15:50:18 | 显示全部楼层
    永远爱你冰塘 2023-7-3 15:50:18 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-7-3 21:13:30 | 显示全部楼层
    风来时狂放 2023-7-3 21:13:30 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表