当训练数据量很大,比如500G,而RAM一般,比如128G,GPU显存更小,比如12G,这时一般的代码都是一个一个batch的从硬盘中读取,预处理,训练,由于数据从硬盘IO读取耗时,结果导致CPU,RAM,GPU利用率都非常低,如何提高RAM和GPU利用率(持续大于90%),加快训练。思路如下:
(1)将总数据(先shuffle)分为x份
(2)对每一份数据,先shuffle,再多线程(from multiprocessing.dummy import Pool)load到内存RAM中,选择合适的x,尽量使RAM加满。
(3)对每一份数据,定义一个dataloader,设置合适的batch_size,尽量使GPU显存装满。
(4)遍历每一份数据,进行训练,即可持续保持GPU利用率(因为直接从RAM而不是硬盘获取数据),训练速度极大提高。
过程是:
split all_data into x data_blocks
for each data_block:
shuffle data_block
multiprocessing load data_block
create a dataloader(data_block,batchsize) # keep RAM and GPU full
train(dataloader)
end
版权声明:本文为博主wrx93原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/weixin_41333775/article/details/123089303