训练技巧之数据集太多,加载太慢怎么办?

1. 背景

训练集全是16x16,32x32之类的小图,达到上千万张,训练时发现数据加载很慢很慢很慢!!!看了下CPU 内存 GPU使用情况,发现CPU使用率都跑到90%去了,GPU使用率却较低

2. 解决方法

2.1 预处理提速

  • 尽量减少每次读取数据时的预处理操作,可以考虑把一些固定的操作,例如 resize ,事先处理好保存下来,训练的时候直接拿来用
  • Linux上将预处理搬到GPU上加速:
    NVIDIA/DALI :https://github.com/NVIDIA/DALI

2.2 IO提速

2.2.1 使用更快的图片处理

  • opencv 一般要比 PIL 要快
  • 对于 jpeg 读取,可以尝试 jpeg4py
  • 存 bmp 图(降低解码时间)

2.2.2 小图拼起来存放(降低读取次数)

对于大规模的小文件读取,建议转成单独的文件,可以选择的格式可以考虑:TFRecord(Tensorflow)、recordIO(recordIO)、hdf5、 pth、n5、lmdb 等等

2.3 预读取数据

预读取下一次迭代需要的数据, 参考给pytorch 读取数据加速

2.4 借助内存

直接载到内存里面,或者把把内存映射成磁盘好了,参考如何给你PyTorch里的Dataloader打鸡血

2.5 借助固态

把读取速度慢的机械硬盘换成 NVME 固态吧~

3. 最后

posted @ 2020-10-26 22:48  程序员-图哥  阅读(1697)  评论(0编辑  收藏  举报