ChineseBert
ChineseBert copied to clipboard
预训练细节
请问在你们预训练过程中,使用100GB的数据,是通过什么方式载入到dataset的。 据我所知,一般数据集不大的情况下是直接在dataset的__init__方法载入数据直接读进内存,但是数据量大的情况下采用什么方式? 我看到torch有提供一个iterabledataset,但是如果使用这个dataset的话,是不是就没有办法进行shuffle了呢?
对于预训练的超大数据,我们采用了MMap来解决。 首先将数据处理为二进制格式并通过MMap存储到硬盘,之后在训练过程中直接使用MMap在硬盘中检索所需数据的位置,从硬盘中动态加载。存入内存的只是所有数据的index,我们对index进行shuffle,之后选取每个batch的index,在训练过程中动态从硬盘上加载数据。 详细可以参考fairseq的实现:fairseq/fairseq/data/indexed_dataset.py