Skip to content
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

[Badcase]: qwen2.5 instruct 14B SFT后解码重复 #957

Open
4 tasks done
520jefferson opened this issue Sep 25, 2024 · 12 comments
Open
4 tasks done

[Badcase]: qwen2.5 instruct 14B SFT后解码重复 #957

520jefferson opened this issue Sep 25, 2024 · 12 comments
Assignees

Comments

@520jefferson
Copy link

520jefferson commented Sep 25, 2024

Has this been raised before?

Description

通过megatron-lm适配qwen系列,基于qwen2.5 instruct 14B为底座进行SFT训练。配置和说明如下:
1.learning rate :1e-6
2.batch size: 128、64
3.数据都是长文本,编码限制在32768
4.对词表没做过改变,结束符没改变过。编码跟hf上保持一致
5. 数据:5w5,sft4-6个epoch

解码时发现会一定概率会有重复出现:
2个对sft完后的模型解码,重复的case如下:
image

能否告知原因,重复容易出现在输入文本比较长的情况,是不是位置编码没学好?或者是配置没注意(比如eos_token_id需要变?<|endoftext|>没用到过,应该是预训练的文档分隔符号,sft不用?)或者哪里没注意?因为之前qwen1.5 14B也遇到过类似的问题

@520jefferson 520jefferson changed the title [Question]: qwen2.5 14B [Question]: qwen2.5 instruct 14B SFT后解码重复 Sep 25, 2024
@zzk2021
Copy link

zzk2021 commented Sep 25, 2024

我也是

@jklj077 jklj077 changed the title [Question]: qwen2.5 instruct 14B SFT后解码重复 [Badcase]: qwen2.5 instruct 14B SFT后解码重复 Sep 25, 2024
@jklj077
Copy link
Collaborator

jklj077 commented Sep 25, 2024

@zzk2021 did you also use megatron-lm to finetune the models? could you please introduce the target scenario?

@jklj077
Copy link
Collaborator

jklj077 commented Sep 26, 2024

重复容易出现在输入文本比较长的情况,是不是位置编码没学好?

两个结果的问题不太一样,第一个是重复生成,第二个是循环生成。Qwen使用的位置编码是RoPE,本身没有可学习参数。原始模型是支持长序列的,更可能是过拟合了数据集中的短数据,可否透露下微调数据长度分布。数据方面,提升数据多样性、提升长数据占比;训练方面,减少训练轮数、进一步降低学习率都有可能。

eos_token_id需要变?<|endoftext|>没用到过,应该是预训练的文档分隔符号,sft不用?

如果训练instruct模型,使用的还是chatml模板的话,eos_token_id保持原样即可 "<|im_end|>"。

或者哪里没注意?

这个着实不好说,一般可以看sampling参数调整是否有效、loss target、packing(如果有)是否正确之类的。

@zzk2021
Copy link

zzk2021 commented Sep 26, 2024

@zzk2021 did you also use megatron-lm to finetune the models? could you please introduce the target scenario?

我使用LLama-Factory的qwen2模板微调qwen2.5 7b,数据是QA数据,提问和回答都比较简短。我遇到了在推理时,会出现生成不断,生成内容无法控制的问题。
我确定原因是prompt设置的问题,prompt这一项必须存在且为设置为空,模型才能正常回答

@520jefferson
Copy link
Author

520jefferson commented Sep 26, 2024

@jklj077 感谢回复。

数据配比方面,长文本数据也有比如基于文档的摘要和问答、翻译,短数据,如q-a类型的创作、问答。如果看类型条数,长短数据比例3:1吧。训练轮数,4-6轮我试着放松一些,然后长数据配比提高下,学习率有点不好调。

学习率实验过了,同一份数据集:
1.固定LR:1e-6重复,batch 64/128, 开和不开dropout都试过了都有重复。
2.学习率high:7e-8降低到 low:4e-8,开dropout + batchsize 64->32 , 训练6个epoch,微调效果一般,回答样式连数据摘要范式都没学到,更多是最开始的instruct的回答样式。解码几百条文档问答没重复问题(官方instruct模型解码也没发现重复)

解码参数实验过了:
用官方的参数,top_p=0.8, repetition_penalty=1.05, temperature=0.7, max_tokens=4096 重复。
用greedy重复
之前也实验过qwen2-72b,也会重复,调整解码参数会好,但是14b模型不行。

其他训练策略包括多条拼接32k, pos都从0算只是为了提高效率,在训练其他模型也开,没这个问题。

那我试试提高长文本配比的效果 + 学习率8e-7->4e-7之间降下来试试。
因为我开了attention和hidden的dropout 0.1,训练多几轮关系也不大吧?我试试解码1e-6训练时前面的点看看是否有重复的情况

@520jefferson
Copy link
Author

520jefferson commented Sep 26, 2024

接上面中间轮解码

学习率1e-6 + dropout, 2epoch,依旧有重复(相比4epoch确实少了), 但是同小学习率一样,回答样式连数据摘要回答的范式都没学好。 训练时初始化loss 9 ,训练结束loss也有1.5,学习率小的话可能就到4左右了。

@jklj077
Copy link
Collaborator

jklj077 commented Sep 26, 2024

@zzk2021 llama-factory里的数据格式有点杂,主要是命名很乱。它会把alpaca或者sharegpt数据映射到内部的一个格式,然后用template把这个中间格式数据转成各个模型训练用的文本。

第一步的话,我理解你是自定义了数据集,使用的alpaca格式,然后单条数据中没有prompt这个key,但是有input和output这两个key。这个默认的column name是instruction input output吧。如果改了dataset_info.json里的columns的配置,可以再确认下映射。缺项不应该有影响,就很奇怪。

第二步的话,我理解你用template是qwen,这个其实就是ChatML,这个因为是从内部的统一格式转的,一般没问题的。

你的流程看起来没有问题,是哪里理解错了?

@jklj077
Copy link
Collaborator

jklj077 commented Sep 26, 2024

@520jefferson 样例数据可以打下码哈。

这个情况我理解是 微调数据风格跟模型现有行为差异比较大,训少了不重复/循环但没学好,训多了能学好但重复/循环。因为不是很清楚是怎么适配的,大致能检查的点也就上面那些了。也许可以试试从base开始训练看看是不是也这样?主要Qwen2.5开源的instruct 32K支持也是类似这么来的(好像这个问题不严重)。

@the-nine-nation
Copy link

之前在qwen2上也出现过这种情况,不过偶们用的lora,最后发现加batchsize会缓解这个问题,我们加到了128

@520jefferson
Copy link
Author

@jklj077
qwen2.5 14b base模型试过了,依旧重复。
qwen2.5 32b instruct试过了,依旧重复。

@520jefferson
Copy link
Author

之前在qwen2上也出现过这种情况,不过偶们用的lora,最后发现加batchsize会缓解这个问题,我们加到了128

学习率多大的?数据长度多长呢? lora参数占总体参数多少?

@520jefferson
Copy link
Author

现在尝试下两个方案:减少合成数学的比例(需要算数) + 大batchsize 32->256,看看解码重复是否缓解, ongoing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants