训练时第二个step loss特别大_python多线程预读取数据,提高GPU利用率,训练效率可提升30%!...

在使用pytorch训练网络时,有没有想提高GPU利用率,加快网络训练的同学啊?

GPU利用率不高,很多都是因为单线程的模式:数据读取->模型训练。数据读取是在CPU上进行,如果在此阶段进行图片预处理的步骤较多,那么GPU就只能等了,导致利用率上不去。

So~,可以使用多线程的方法来预读取数据,保证数据每时每刻都已经读取完毕,放在了内存当中,等待模型训练。(如果数据量小,内存足够的话,也可以全部放入内存当中)

下面就说下我的实现思路:

定义一个数据队列data_queue,利用queue.Queue()的阻塞,保证data_queue里面数据的个数保持稳定。数据读取线程往dataqueue存放数据,模型训练线程从data_queue读取数据。

如下图,可以看到Queue对象的阻塞性质:当block=True,timeout=None时,会进行阻塞直到队列中有空位可以put数据。真是利用这一点,现实了在不占用不太多内存的情况下,提高GPU利用率。

78fd55bf6dbcacb80e99b2b46e5ed9bf.png

下面是我的程序框架:

import 

小白代码,大家多多交流~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值