机器学习用lmdb给数据读取加速
目录
LMDB数据库
感觉最近训练模型的时候,GPU利用率经常是间断出现0%,试了很多方法比如dataloader的多个worker,prefetch,感觉速度没达到预期,而且依然会出现0%的情况,所以使用LMDB试试能不能提升效率。
最后的效果如下:
比直接一个个文件读取快了至少3倍,并且GPU利用率再也没出现0%的情况(看到有issue说读取多个大文件的时候可能没有提升,所以主要应用场景应该是大量读取小文件,我这里的文件大小基本上每个在50到400KB)。
Step 1. 统计数据大小
使用du -sh
命令统计当前文件夹的总大小,统计结果有343G,将344(343+1)转化成B,有2954937499648B。
Step 2. LMDB数据的添加、修改、删除
|
|
此时会创建目录,里面有2个文件data.mdb
和lock.mdb
.
其中map_size
是指定能够存放的最大的大小,当数据超过map_size
时,会报lmdb.MapFullError: mdb_put: MDB_MAP_FULL: Environment mapsize limit reached
。
Step 3. LMDB数据的查询
|
|
输出:
|
|
可以看到保存的格式都是byte,对于numpy可以用np.frombuffer(image_bin, dtype=int)
,需要注意dtype类型和保存的numpy类型有关。
参考资料
- PyTorch 60.读写LMDB数据库 https://zhuanlan.zhihu.com/p/266136706
- python之lmdb https://blog.csdn.net/zhayushui/article/details/103896519