-
Notifications
You must be signed in to change notification settings - Fork 55
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
libai 设计文档之数据加载篇 #3
Comments
数据处理数据集相关类底层数据集:
中间层数据集(reindexed_dataset)
上层数据集(任务性,如bert_dataset、gpt_dataset、t5_dataset)
功能性数据集
采样器
dataloader
2. 数据集处理流程
3. idx映射规则blendable dataset ----> split dataset ----> bert dataset ----> reindexed dataset ----> indexed dataset sampler产生idx,查blendable dataset中的数组,得到blendable dataset内的索引(哪个数据集的哪条数据) blendable dataset内的索引,通过split_inds数组,转化为bert dataset的索引 当前不确定的点
和megatron的区别
|
我觉得可以先快速从头到尾实现一种 dataset 看看,可以先不用实现那么多功能,先把模块分清楚,然后当用户需要使用自己的数据集的时候方不方便使用 看上去最下面两层都是用户不需要关心的,只有最上层和任务相关的需要用户自己改写 数据处理的部分尽量把大部分工作埋藏在底下,用户只需要写一个简单的处理逻辑就可以加上自己的数据进行训练应该就可以了 |
将 token 转成向量的时候需要一个 vocab->int 的映射吧,这个映射被存在哪里了呀 |
映射存在了tokenizer,在最开始的预处理阶段完成了转化 |
我已经尽可能把重复的底层的部分写好了,尽可能让用户只更改上层和任务相关的dataset,数据集部分的完整流水已经实现了,现在sampler和dataloader还需要修改。 |
可以提单独的 pr 上来 |
分词器是nlp中最基础的操作,是预处理阶段的核心步骤。看起来实现简单,实际上很麻烦,需要考虑很多细节。之前把megatron里的tokenizer搬运过来,里面包含bert和gpt的tokenizer。但这个实现质量较差,甚至接口都没有统一。例如bert里解码是decode函数,gpt里解码是detokenize函数。GLM的实现和megatron相差不多,感觉也不太好。huggingface的tokenizer库实现了很多种tokenizer,考虑了很多细节。我建议以它为基准,在其基础上进行封装,添加预训练相关的特性。你们觉得怎么样? |
由于预训练的数据量比较大(数据大小可能大于内存),所以libai在数据加载上要考虑更多高效性。
经翻阅megatron历史版本,发现GLM中的数据处理方法来自于megatron 0.1版本中,从1.0版本到现在,megatron都采用了现在的方法。估计是考虑了高效性,希望减少pad,减少重复的预处理步骤,从而缩短训练时长。因此,libai应该基于megatron设计数据处理。
megatron中的数据处理:
libai的做法:
The text was updated successfully, but these errors were encountered: