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 固態吧~