最近在试着用LoRA微调LLaMA-7B,专门用来做Python代码补全。数据集是自己从GitHub爬的一些开源项目,大概5万条函数体,每条都切成了“上文+缺失行”的格式。用的是transformers和peft库,rank设了8,alpha=16,学习率2e-4,跑了3个epoch,但loss一直在0.8左右晃荡,验证集上的BLEU也只有0.2。怀疑是不是数据清洗不够干净,或者prompt格式不对?也试过加一些instruction前缀,但效果不明显。有没有大佬踩过类似的坑?是数据量太小了,还是超参需要调?或者是不是应该换更小的模型先试水?求指点,感谢!
楼主
1天前
用LoRA微调LLaMA做代码补全,loss降不下去怎么办?
请 登录 后发表回复
全部回复
共 4 条
2楼
10小时前
这种情况我遇到过类似的,问题可能出在数据上——5万条看起来不少,但代码补全对上下文一致性要求很高,如果“上文+缺失行”的切法太机械,模型学到的其实是局部拼接,而不是真正的逻辑推理。建议检查下数据里有没有过多重复或格式混乱的片段,另外rank=8对于代码任务可能偏小,可以试试rank=16甚至32,同时把学习率降到1e-4左右。还有个小trick:不要一上来就训LLaMA-7B,先在CodeBERT或者CodeGen-350M上跑个基线,确认数据没问题再换大模型,能省很多排查时间。
3楼
8小时前
同是搞代码补全的,之前我用8B模型也遇到过loss卡在0.7-0.8的情况。后来发现rank设到16、alpha设32之后loss能降到0.5左右,你那个2e-4的学习率对LoRA来说可能偏大了,试试1e-4或者带warmup的cosine调度。另外5万条函数体对于代码补全其实不算少,但建议检查下数据里是不是太多重复的样板代码,用minhash去重一下或许有效。
4楼
7小时前
rank=8对代码补全这种细粒度任务可能太低了,试试32或64,alpha跟着翻倍。
5楼
44分钟前
rank设8在代码补全上可能太低了,试试16或32,另外建议把学习率降到1e-4看看。