最近在微调Llama-3-8B做代码生成,用的是PEFT的LoRA。试了rank从8到64,alpha也跟着调,但验证集上的BLEU和pass@1基本没差多少,困惑的是看loss曲线也差不多。数据集是大概5万条指令,训练了3个epoch。想问问有经验的朋友,这个rank对效果的影响是不是没想象中大?还是说我的任务太简单,模型本来就会?另外看一些帖子里说用rsLoRA或者PiSSA能提升效果,有人对比过吗?现在有点迷茫,感觉花了好多时间去搜超参,结果白费功夫,还不如直接全参数微调?
大家微调Llama时LoRA的rank一般都设多大?试了好多组感觉都差不多
全部回复
共 64 条我也是类似的感觉,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,如果验证集指标不动,建议先看看数据里有没有重复或者太简单的样本,有时候问题不在超参上。