知行编程网知行编程网  2022-08-10 15:00 知行编程网 隐藏边栏 |   抢沙发  182 
文章评分 0 次,平均分 0.0
使用pytorch时,训练集数据太多达到上千万张,Dataloader加载很慢怎么办?
训练集全是16x16,32x32之类的小图,达到上千万张,训练时发现数据加载很慢很慢很慢!!!看了下CPU 内存 GPU使用情况,发现CPU使用率都跑到90%去了,GPU使用率却较低
作者:MING YE
1)小图拼起来存放(降低读取次数)
2)存bmp图(降低解码时间)
3)1张32*32的图其实也就3K大,1000w也才不到29G,现在训练机器都是几百G的内存,直接载到内存里面,或者把把内存映射成磁盘好了。
作者:小小将
如果是小图的话,确定是io瓶颈,可以考虑把小图转成tfrecord等大文件;
如果确定prefetch无效,而且排除了io瓶颈,那真可能是cpu瓶颈了,这个时候只能考虑把一些heavy的预处理和数据增强放到GPU来做。
作者:噼里啪啦
io对cpu压力不大的。90%的cpu肯定是在做计算。
读写的上限跟iops有关,iops又跟硬盘有关,拿阿里云的普通ssd说的话,代码写的还行的话,一秒最多读300-400m。加载慢可以先试试自己读出来在做转换。
训练慢的话就上gpu吧。数据该压缩的地方压缩一下。
作者:啥啥啥
首先判断是否是io瓶颈,数据数量多少和io速度没关系,cpu很高的话说明问题在于cpu预处理而非磁盘io。
既然已经都几千万样本了,个人认为就没必要做实事的数据增强和预处理了。
离线数据增强好,load进去后直接喂给gpu就可以了。
作者:南枫
如果图片尺寸一致且存储足够的话,可以先把数据存到h5格式,batch处理的时候,随机读取会快很多。
作者:akkaze
如果是data augmentation的瓶颈,建议看一下dali,但是要写不少代码改造dataloader,另一种方法就是离线数据增强,当然有可能会影响算法调试的灵活性。如果卡在io上,尝试多线程,实在不行换nvme硬盘吧

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享