最近在微调Llama-3-8B做代码生成,用的是PEFT的LoRA。试了rank从8到64,alpha也跟着调,但验证集上的BLEU和pass@1基本没差多少,困惑的是看loss曲线也差不多。数据集是大概5万条指令,训练了3个epoch。想问问有经验的朋友,这个rank对效果的影响是不是没想象中大?还是说我的任务太简单,模型本来就会?另外看一些帖子里说用rsLoRA或者PiSSA能提升效果,有人对比过吗?现在有点迷茫,感觉花了好多时间去搜超参,结果白费功夫,还不如直接全参数微调?
大家微调Llama时LoRA的rank一般都设多大?试了好多组感觉都差不多
全部回复
共 69 条我也是类似的感觉,rank从16拉到128效果差异很小,后来发现数据质量和多样性比rank重要多了。你可以试试rsLoRA,它对高rank的缩放更合理,我用下来rank 64配合rsLoRA比普通LoRA稳一点。另外5万条数据3个epoch可能还没到过拟合,rank影响自然不明显。真要纠结的话不如把target_modules从q,v扩到所有线性层,这个改动通常比调rank涨点更明显。
rank影响确实不大,尤其你数据量有五万条,任务又是代码生成这种模型本来就擅长的,8到64差别被淹没了很正常。我试过rsLoRA,低rank下比普通LoRA稳一点,但也就几个点的事,PiSSA初始化确实收敛快些,不过最终效果还是看数据质量。说真的,与其折腾rank,不如多花时间洗数据或者加些难样本,全参微调在8B上单卡也扛不住吧。
rank在代码生成这种任务上确实差距不大,模型本身底子好,5万条数据也够它激活已有能力了。我试过rsLoRA,在低rank时比标准LoRA稳一点,但rank拉到32以上基本就拉平了,PiSSA初始化倒是在小数据上有点优势。你这种情况不如把精力花在数据质量和prompt格式上,比调rank收益大得多。另外全参微调8B至少要80G显存,除非你有这个硬件,不然LoRA性价比还是碾压的。
我微调Llama做代码任务时也遇到过类似情况,rank从16拉到128,pass@1几乎没动,后来发现瓶颈其实在数据质量和任务难度上。代码生成这种任务,模型预训练时见过大量代码,LoRA更多是在调风格和格式,rank够用就行,再大容易过拟合还费显存。rsLoRA我试过,在rank较大时确实比普通LoRA稳一点,但提升幅度有限,PiSSA没深入对比过。你5万条数据3个epoch,如果验证集指标不动,建议先看看数据里有没有重复或者太简单的样本,有时候问题不在超参上。
我之前也遇到过类似问题,后来换了方案。
刚入门,这个对我帮助很大。
rank对代码生成这种任务确实没那么敏感,你试8到64差别不大挺正常的,5万条数据3个epoch基本够模型学到格式和常见模式了。我这边试过rsLoRA和PiSSA,rsLoRA在低rank下确实稳一点,PiSSA初始化那套在收敛速度上有提升但最终指标拉不开差距,别指望换个变体就质变。倒是建议你把注意力放到数据质量和target modules上,比如q/k/v/o全加和只加q/v差别比rank大多了。全参数微调8B得多卡,个人玩不太现实,除非你只解冻最后几层。
rank影响确实没那么大,我试过rsLoRA也差不多。你任务可能太简单了,5万条数据3个epoch够模型学个八九不离十了。
rank在8到64之间效果差不多其实挺正常的,尤其你这个任务本身是代码生成,Llama-3-8B底子就不差,5万条指令也不算少,LoRA学到的更多是格式和风格上的偏移,低秩瓶颈没那么容易卡住。我自己的经验是rank超过32之后收益就明显递减了,反而alpha和dropout的组合更影响稳定性,你可以固定rank=16单独扫一下alpha,看验证集有没有波动。loss曲线差不多也说明模型容量不是瓶颈,可能你的数据分布太集中,模型很快就拟合了。rsLoRA我试过,在rank较大时确实比普通LoRA稳一点,但小rank下差别不大;PiSSA没深入对比,听说初始化更好但训练成本略高。说实话与其继续搜超参,不如检查下数据质量和评测指标,BLEU对代码任务本身就不太敏感,pass@1才是关键。全参微调在8B上显存和时间成本不低,除非你有明确证据LoRA欠拟合,不然没必要换。