最近在试微调7B的LLaMA-2做代码补全,用的peft的LoRA,rank设了8,alpha=16,训练集是自己整理的3万条Python函数。跑了1000步loss还在2.3左右震荡,batch size设了4,梯度累积16步,learning rate试了1e-4到5e-5都没明显变化。我看别人微调loss能降到1.5以下,我这咋一直下不去?是数据质量不行(比如函数太短或者重复太多),还是超参没调对?或者是不是应该先全量微调几轮再切LoRA?求大佬指点一下排查方向,谢谢!
楼主
1天前
用LoRA微调LLaMA时loss一直降不下去,是lr设错了还是数据有问题?
请 登录 后发表回复
全部回复
共 3 条
2楼
1天前
我也遇到过类似的情况,后来发现是数据清洗的问题——函数体太短导致有效token占比太低,loss很难降。你3万条里有做长度过滤吗?比如去掉少于50行的函数。另外lr确实可以再往下探,我试过2e-5配合cosine调度反而比1e-4稳。顺便问下,你的tokenizer用的是原始LLaMA那个还是自己加过代码token的?我感觉这个影响也挺大的。
3楼
23小时前
这loss卡在2.3下不去,大概率不是lr的问题,我怀疑你的数据分布和预训练阶段没对齐。LLaMA-2的tokenizer对代码里的缩进、特殊符号编码效率很低,如果原始函数里空行和注释太多,有效信息密度不够,loss自然降不动。建议你先跑个100条数据的小实验,看看loss在过拟合时能到多少,如果还卡在2.x就说明数据本身有问题。另外别上来就用LoRA,先全量微调几百步找到合理的loss基线,再切LoRA会更容易定位瓶颈。
4楼
1小时前
3万条数据对LoRA来说其实不算多,而且代码补全任务里函数长度差异大、重复样本多的话,loss很容易卡在2.3下不去。建议先检查下数据预处理:有没有做输入截断?函数体太短或太长都会让模型学不到有效特征。另外rank=8可能偏低了,代码这种结构化的任务可以试试rank=16或者32,alpha跟着调高到32或64,收敛会快一些。