链接:https://www.zhihu.com/question/444712435
编辑:深度学习与计算机视觉
声明:仅做学术分享,侵删
训练集全是16x16,32x32之类的小图,达到上千万张,训练时发现数据加载很慢很慢很慢!!!看了下CPU 内存 GPU使用情况,发现CPU使用率都跑到90%去了,GPU使用率却较低
作者:MING YE https://www.zhihu.com/question/356829360/answer/903098135
1)小图拼起来存放(降低读取次数)
2)存bmp图(降低解码时间)
3)1张32*32的图其实也就3K大,1000w也才不到29G,现在训练机器都是几百G的内存,直接载到内存里面,或者把把内存映射成磁盘好了。
作者:小小将 https://www.zhihu.com/question/356829360/answer/906407815
如果是小图的话,确定是io瓶颈,可以考虑把小图转成tfrecord等大文件;
如果确定prefetch无效,而且排除了io瓶颈,那真可能是cpu瓶颈了,这个时候只能考虑把一些heavy的预处理和数据增强放到GPU来做。
作者:噼里啪啦
https://www.zhihu.com/question/356829360/answer/903015862
io对cpu压力不大的。90%的cpu肯定是在做计算。
读写的上限跟iops有关,iops又跟硬盘有关,拿阿里云的普通ssd说的话,代码写的还行的话,一秒最多读300-400m。加载慢可以先试试自己读出来在做转换。
训练慢的话就上gpu吧。数据该压缩的地方压缩一下。
作者:啥啥啥 https://www.zhihu.com/question/356829360/answer/904111738
首先判断是否是io瓶颈,数据数量多少和io速度没关系,cpu很高的话说明问题在于cpu预处理而非磁盘io。
既然已经都几千万样本了,个人认为就没必要做实事的数据增强和预处理了。
离线数据增强好,load进去后直接喂给gpu就可以了。
作者:南枫 https://www.zhihu.com/question/356829360/answer/951898377
如果图片尺寸一致且存储足够的话,可以先把数据存到h5格式,batch处理的时候,随机读取会快很多。
作者:akkaze https://www.zhihu.com/question/356829360/answer/902672543
如果是data augmentation的瓶颈,建议看一下dali,但是要写不少代码改造dataloader,另一种方法就是离线数据增强,当然有可能会影响算法调试的灵活性。如果卡在io上,尝试多线程,实在不行换nvme硬盘吧
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓