最近在尝试用LoRA微调Qwen2.5-7B来做我们公司内部的代码审查问答,数据集大概5000条左右,都是自己整理的。我用的transformers+peft,lr设了1e-4,rank=8,跑了10个epoch,结果loss一直卡在2.3左右不动了,验证集上的bleu得分也才0.12。我怀疑是不是数据集太小了,或者学习率设置有问题?也试过调成5e-5,但loss反而更大了。另外想问下,这种特定领域的微调,是不是应该先用base模型再跑个继续预训练?还是直接SFT就行?有没有大佬能指点一下排查思路,感谢!
楼主
10小时前
用LoRA微调Qwen2.5-7B,loss降不下去怎么办?
请 登录 后发表回复
全部回复
共 1 条
2楼
1小时前
看到这个loss卡在2.3不动,我第一反应是学习率的问题,但你试过1e-4和5e-5都不太行,那可能就不是单纯的lr问题了。5000条数据对于LoRA来说其实不算小,但如果是代码审查这种高度结构化的任务,数据质量比数量关键得多——你有没有检查过数据里的标签一致性?比如同一个代码问题是不是被标注成不同的答案,或者上下文长度有没有爆掉Qwen的max_position?另外,LoRA的rank=8可能对7B模型来说有点保守,我自己的经验是r=16甚至32在某些任务上收敛会快一点,但也要小心过拟合。你提到验证集bleu只有0.12,说实话这个指标对生成类任务参考价值有限,不如直接看几个case的输出质量。至于继续预训练和SFT的选择,我觉得如果你们内部代码的术语和风格跟通用语料差距很大,那确实可以先用领域语料做一步continued pretraining,让模型先熟悉下上下文,再上LoRA做SFT,这样loss可能更容易降下去。不过也别太纠结loss数值,有时候loss下不去但生成结果已经够用了,建议你先抓几个bad case出来人工分析下。