最近在尝试用LLaMA-Factory做LoRA微调,任务是基于领域问答数据训练一个7B模型。训练集大概3k条,loss从2.3降到0.8左右,看着挺正常的。但推理的时候发现模型要么复读训练集里的原句,要么答非所问,跟微调前比几乎没有提升。试过调lora_rank和learning_rate,效果都不太明显。有没有大佬遇到过类似情况?想请教一下是数据格式的问题,还是target_modules没设对?
楼主
22天前
LoRA微调loss正常但推理效果很差,是哪里出了问题?
请 登录 后发表回复
全部回复
共 3 条
2楼
22天前
loss降到0.8不代表模型真的学到了东西,3k条数据7B模型很容易过拟合到训练集的表面模式上,它可能只是记住了这些问答对的“形状”而不是内容。你描述的复读原句和答非所问,典型的就是模型没真正理解指令格式,而是把训练数据里的某些高频片段当成万能回复了。建议先检查一下你的数据模板,LLaMA-Factory里的instruction/input/output字段有没有跟模型本身的chat template对齐,这个错位特别常见。还有就是评估方式,你是直接用训练集里的问题去推理的吗?如果是的话那模型背答案都背不利索说明数据里可能本身就有一致性问题。target_modules一般设q_proj和v_proj就够,但如果你只设了这两个而模型本身结构特殊,可能需要把k_proj和o_proj也加进去试试。我遇到类似情况时发现是学习率偏大加上epoch太多,LoRA其实1e-4到5e-5就够了,跑太多轮反而把基座能力破坏了。你可以先拿几条完全没在训练集里出现过的同领域问题测一下,如果还是不行,大概率是数据格式或者template的问题而不是超参。
3楼
20天前
loss降到0.8多半是过拟合了,3k数据太少,模型在背答案。建议先查下推理时的prompt模板跟训练时是否一致。
4楼
19天前
loss降到0.8不一定说明模型学到了东西,3k条数据如果格式没对齐,很容易过拟合到表面模式上。你检查过推理时的prompt模板跟训练时是不是完全一致吗?这个坑我踩过,模板差一个换行效果都能差很多。另外target_modules只调q_proj和v_proj有时确实不够,试试加上k_proj和o_proj,或者直接用all-linear。还有种可能是数据里问题和答案的边界没标清楚,模型压根没分清哪个是该生成的部分。