SkyworkAI / Skywork

Skywork series models are pre-trained on 3.2TB of high-quality multilingual (mainly Chinese and English) and code data. We have open-sourced the model, training data, evaluation data, evaluation methods, etc. 天工系列模型在3.2TB高质量多语言和代码数据上进行预训练。我们开源了模型参数,训练数据,评估数据,评估方法。
Other
1.21k stars 111 forks source link

关于预训练数据拼接 #35

Closed young-chao closed 9 months ago

young-chao commented 10 months ago

你好,关于预训练数据的处理方式,我有一些疑惑: 从项目中提供的预训练数据示例文件pt_train.jsonl和训练代码来看,你们对于预训练数据是单条直接padding到sequence_length的做法,padding直接使用eos字符;在我之前了解的一些项目里,做法是将所有训练数据分词后拼接再切片;我个人对于这两种处理方式的理解是:如果直接拼接再切片可以保证训练中几乎所有tokens都是有效的,而如果单独处理则会计算大量的padding的tokens。 请问你们在实际训练的时候是否预先将许多单条数据拼接到接近sequence_length组成新的一条数据?

zhao1iang commented 10 months ago

您好,预训练代码调用的是https://github.com/SkyworkAI/Skywork/blob/main/train/pt_data_preprocess.py 这个脚本哈。处理逻辑是是将文本进行拼接的,没有padding。

young-chao commented 10 months ago

您好,预训练代码调用的是https://github.com/SkyworkAI/Skywork/blob/main/train/pt_data_preprocess.py 这个脚本哈。处理逻辑是是将文本进行拼接的,没有padding。

谢谢,我漏看了你们的预处理脚本,从这个来看你们还是保留了和transformers原始的预训练数据拼接逻辑一样的做法。这种不添加eos_token_id去分隔原始数据条目不会分散训练时注意力学习的效果吗?

zhao1iang commented 9 months ago

在实际预训练中我们使用的megatron框架,是有添加的的end_of_doc符号的。demo中没有加eso_token_id但测试发现效果似乎没有异常。