在使用pytorch训练网络时,有没有想提高GPU利用率,加快网络训练的同学啊?
GPU利用率不高,很多都是因为单线程的模式:数据读取->模型训练。数据读取是在CPU上进行,如果在此阶段进行图片预处理的步骤较多,那么GPU就只能等了,导致利用率上不去。
So~,可以使用多线程的方法来预读取数据,保证数据每时每刻都已经读取完毕,放在了内存当中,等待模型训练。(如果数据量小,内存足够的话,也可以全部放入内存当中)
下面就说下我的实现思路:
定义一个数据队列data_queue,利用queue.Queue()的阻塞,保证data_queue里面数据的个数保持稳定。数据读取线程往dataqueue存放数据,模型训练线程从data_queue读取数据。
如下图,可以看到Queue对象的阻塞性质:当block=True,timeout=None时,会进行阻塞直到队列中有空位可以put数据。真是利用这一点,现实了在不占用不太多内存的情况下,提高GPU利用率。
下面是我的程序框架:
import
小白代码,大家多多交流~