记录指定GPU并行训练失效问题

刚刚解决一个问题,迫不及待地记录下来,可以给后来人参考下。

===========================================

环境

操作系统:Ubuntu

框架:Tensorflow-GPU 2.5.0

显卡数:4

===========================================

场景

PART1:故事的开头是这样的,这台机器属于单机多卡服务器,有四张A800,我在训练文本纠错任务的时候,使用了MirroredStrategy进行分布式计算,一次性的全占了这4张显卡。话说这分布式计算的效率就是高,计算能力至少提升了2-3倍。

后来,来了一个小伙伴,协商之后,我俩各2张卡。可是,他并没有按照约定使用2号和3号卡,而是使用了0号和3号卡(显卡排序是从0开始的)。

想着如此的话,那我就直接用1号和2号吧。

PART2:考虑如此,我立刻就想到了三个解决方案。

方案1:设置"CUDA_VISIBLE_DEVICES"环境变量。将其设置为"1,2"。

方案2:为MirroredStrategy指定"devices"参数["/gpu:1","/gpu:2"]。

方案3:手动设置set_visible_devices,使用PhysicalDevice强制指定。

PART3:结果全部都是OOM,我的第一反应就是,没有设置成功。因为,tensorflow打印出来的日志是,devices 0,1。这明显是不对啊,我们不是设置的1、2设备吗?怎么会如此?

===========================================

调整思路

找了很久没有找到问题在哪里,重新理一下思路吧。是不是可以先将CUDA_VISIBLE_DEVICES位置为0、1、2、3,把所有的显卡都设置为可用状态(即使0、3已经被占用),再使用【方案3】强制更改和指定GPU。可是,依旧不行,这是为什么?无法理解、无法想象,突然,想到是不是我设置的Batch Size 太大了?网络可以构建,但是无法训练,把Batch Size 修改小了,可以了

===========================================

分析原因

原来是因为,之前我使用了默认的分布式模式,全部占用了4张卡,Batch Size 设置得比较大。后来算力降低了,没有更多的资源了,就导致了OOM的问题了。尤其是加上Tensorflow 给出的提示信息有很强的误导(如果指定了1、2设备,日志打印的是0、1devices,误导我,以为没有设置成功。分布到了0这个设备上,而0这个设备已经在被其他人使用了)。

后来,三个方案经过测试,都是可以的

===========================================

总结

1、错误的日志信息会很大程度上误导人的判断。

2、理论知识的重要性,在实践当中得到了充分体现。

3、算力问题依旧是最大的问题。

如有疑问请到君羊:195889612

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值