OFA-Sys / Chinese-CLIP

Chinese version of CLIP which achieves Chinese cross-modal retrieval and representation generation.
MIT License
4.35k stars 451 forks source link

lmdb存放千万级别数据IO问题 #46

Open Akon-Fiber opened 1 year ago

Akon-Fiber commented 1 year ago

您好,我将zero数据处理后约7000w,存储到lmdb文件,但是lmdb仅能生成一个data.mdb,存放在一个device上,导致我训练模型时数据读取io瓶颈,CPU与GPU利用不充分,请问有遇到这个问题吗?

yangapku commented 1 year ago

您好,这个问题我们确实后续需要更好支持下。我们进行Chinese-CLIP预训练时,对于预训练上亿量级图文对的分布式数据读取,其实是采用了集团内部的数据表读取机制(并非LMDB),LMDB这套数据存取逻辑是我们先为开源版本准备的,模型finetune因为数据量级不会很大,问题可能不大,但是处理7000w这种大量级的数据确实还是会有些不便。我们后面看看能否支持一些优化机制(比如支持按机器数/卡数切分成多个LMDB小文件,训练时每台机器/每张卡读取自己的LMDB小文件),但是我们现在人员精力确实相当紧张,所以可能会比较慢一些不太好预估何时完成。您可以先按照这样的思路进行尝试(LMDB本身应该是支持制作时保存在多个小文件中的),更欢迎您为我们提供PR,支持上这个issue哈。

Akon-Fiber commented 1 year ago

非常感谢您真诚的回答与建议,我们也是内部讨论后也是有相似想法:(1)人工制作多节点,先根据机器device进行LMDB切分,避免单device的IO瓶颈,这个方法代码比较简单,但切分比较繁琐;(2)采用分布式缓存数据库Redis去做多机的,虽然网上没有搜索到先例,但感觉值得一试

yangapku commented 1 year ago

明白~ 如果后续尝试有更多问题,欢迎及时沟通同步!

wangpx0906 commented 1 year ago

请问一下把这7000万写入lmdb,速度快吗?

saicoco commented 1 year ago

路过,对于大规模数据读取,LMDB因为是顺序读取,随着数据量的增加io会成为瓶颈。这类问题可以采用类似tfrecord的处理方式,将数据进行分片,在分片内部顺序读取,分片间随机读取。 可使用工具:webdataset,pickle,tar等。 读取工具可以使用torchdata,目前已经可以较好支持webdataset等类似tar的读取。

另外一个问题是大规模数据的准备:可以借助spark等工具加速数据的生成

Adenialzz commented 1 year ago

各位大佬,把图像buffer存到parquet里的数据形式适合做clip训练吗?

Yangr116 commented 1 year ago

有更新嘛

chengjianjie commented 9 months ago

您好,这个问题我们确实后续需要更好支持下。我们进行Chinese-CLIP预训练时,对于预训练上亿量级图文对的分布式数据读取,其实是采用了集团内部的数据表读取机制(并非LMDB),LMDB这套数据存取逻辑是我们先为开源版本准备的,模型finetune因为数据量级不会很大,问题可能不大,但是处理7000w这种大量级的数据确实还是会有些不便。我们后面看看能否支持一些优化机制(比如支持按机器数/卡数切分成多个LMDB小文件,训练时每台机器/每张卡读取自己的LMDB小文件),但是我们现在人员精力确实相当紧张,所以可能会比较慢一些不太好预估何时完成。您可以先按照这样的思路进行尝试(LMDB本身应该是支持制作时保存在多个小文件中的),更欢迎您为我们提供PR,支持上这个issue哈。

大佬,请问下最后是怎么解决的, 我也是想训练千万级数据,但是处理成lmdb格式就已经很大了,训不起来

22wei22 commented 2 months ago

您好,我将zero数据处理后约7000w,存储到lmdb文件,但是lmdb仅能生成一个data.mdb,存放在一个device上,导致我训练模型时数据读取io瓶颈,CPU与GPU利用不充分,请问有遇到这个问题吗?

数据量大的时候,是否有出现内存泄露

chengjianjie commented 1 month ago

可以尝试使用txt格式,在load模型的时候设置num_workers大一点就ok

在 2024-07-23 16:03:05,"22wei22" @.***> 写道:

您好,我将zero数据处理后约7000w,存储到lmdb文件,但是lmdb仅能生成一个data.mdb,存放在一个device上,导致我训练模型时数据读取io瓶颈,CPU与GPU利用不充分,请问有遇到这个问题吗?

数据量大的时候,是否有出现内存泄露

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>