fastnlp / fastNLP

fastNLP: A Modularized and Extensible NLP Framework. Currently still in incubation.
https://gitee.com/fastnlp/fastNLP
Apache License 2.0
3.05k stars 451 forks source link

关于数据集的延迟加载功能 #383

Closed ccyousa closed 2 years ago

ccyousa commented 2 years ago

Is your feature request related to a problem? Please describe. 问题是什么 一些大数据集全部加载到内存中可能占用大量内存。 例如4G左右的jsonl文件,经load转为大对象以后,内存占用高达约20G(不含交换区)。 尤其是分布式框架下,数据集每个进程加载一份,内存占用疯涨,影响整体性能,对机器要求较高。

Describe the solution you'd like 解决方案是什么 可以增加对数据文件的自动切分,构建多个大小适中的缓存文件,每次只读取部分数据,让内存中只保留最近可能用到的部分数据;增加预取功能等等

Additional context 备注 可能fastNLP有类似的参数配置,但我目前没有注意到,如果有,请提醒一下,谢谢。

yhcc commented 2 years ago

是的,python内存管理就是比较麻烦。我们之前是通过自己实现了一个OnTheFlyDataSet来规避这个问题。当前fastNLP没有自动的方式来实现这个切分,一个可以绕开的方式是通过手动减小每个进程的dataset大小,例如通过

tr_ds = tr_ds[dist.get_rank()::dist.get_world_size()]

使用了这个之后,需要手动删掉其它的train dataset对象(例如data_bundle内的),以防止它们仍然占用内存。

ccyousa commented 2 years ago

OK,我试试。