多个gpu训练方法以及为何运行程序只gpu0运行(CUDA out of memory. Tried to allocate)

一,多个gpu训练方法

如果gpu还不错,不要改batchsize
一,这种方法偶尔有用,但是如果在别的地方使用了别的方法指定gpu,还是会只使用gpu0

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '1,2'

二,这种效果最弱,最常用,方便

CUDA_VISIBLE_DEVICES=1,2 python train.py

三,最好用的、绝对不会出错的device,缺点是只能指定一个,或者说用这种方法我不会指定多个gpu
在这里插入图片描述
为什么各种方式都不行,一种可能的原因是这种模型参数过大,可以用以下函数输出模型参数个数。

def print_model(model, logger):
    print(model)
    nParams = 0
    for w in model.parameters():
        nParams += functools.reduce(operator.mul, w.size(), 1)
    if logger:
        logger.write('nParams=\t'+str(nParams))

二,为什么设置了在多个gpu运行,但是只有gpu0有进程呢。

一,如何查看在哪个gpu运行。
当我print(torch.cuda.device_count())输出结果甚至是8(个gpu),但是仍然报错,最靠谱的还是看进程
在你的文件路径下,命令行输入 nvidia-smi
在这里插入图片描述
由上图可以看见python在gpu1和gpu7执行任务,其中PID是进程号。顺便提一句shasi进程的命令 kill 进程号
二,只在gpu0执行任务怎么办?
上面介绍的方法中,即使指定了多个gpu运行,实际上却仍然只在gpu0上面运行,就会报错(内存输出错误)cuda out of memory,
还有RuntimeError: CUDA out of memory. Tried to allocate 158.00 MiB (GPU 0; 11.17 GiB total capacity; 556.72 MiB already allocated; 26.06 MiB free; 17.28 MiB cached)

只用方法三可以,但是方法三只能指定在一个gpu上训练,当然其中我也试过用多个gpu训练

net = torch.nn.DataParallel(model, device_ids=[0, 1, 2])

但是会报错似乎是在多个gpu梯度无法求导的错误,请指教。
参考连接

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
CUDA out of memory是指在使用CUDA进行计算时,尝试分配内存失败的错误。根据提供的引用,这个错误在不同的场景下发生,并且尝试分配的内存大小也不同。 解决方法通常有以下几种: 1. 减少内存使用:可以尝试减少模型的参数量、减小batch size或者降低输入数据的维度,以减少内存占用。 2. 释放内存:在每次迭代后手动释放不再需要的变量,可以使用`torch.cuda.empty_cache()`函数释放缓存的GPU内存。 3. 使用更大容量的GPU:如果你的GPU内存不足以满足模型的需求,可以考虑使用更大容量的GPU或者升级硬件设备。 4. 使用混合精度训练:可以使用混合精度训练来减少内存占用。混合精度训练是指在计算过程中使用半精度浮点数(float16)进行计算,可以通过`torch.cuda.amp`模块实现。 根据提供的引用和中的错误信息,尝试分配的内存大小为16.00 MiB,总容量为6.00 GiB。解决办法可以参考上述的几种方法来解决内存不足的问题。 至于引用中的错误信息,尝试分配的内存大小为376.00 MiB,总容量为15.78 GiB,已分配的内存为13.66 GiB。这种情况下,可以尝试使用相同的解决办法来解决内存不足的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [CUDA out of memory. Tried to allocate 16.00 MiB (GPU 0; 6.00 GiB total capacity](https://blog.csdn.net/wyyy456/article/details/128629796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [【踩坑记录】RuntimeError: CUDA out of ... Tried to allocate 376.00 MiB (GPU 0; 15.78 GiB total capacit](https://blog.csdn.net/qq_39328436/article/details/126575076)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值