最近尝试用LoRA微调Llama 3 8B,想做一个针对Python代码补全的小模型。数据集自己整理了一些GitHub上的Python函数,大概1万条,每条是“def xxx():”开头到函数结束。跑起来之后发现loss一直徘徊在2.3左右不往下走,试了调学习率(从5e-4降到1e-4)和rank(8到16)都没什么变化。感觉是不是数据集太简单了,还是我预处理的时候把上下文切得太短(512 token)导致模型学不到结构?或者根本就是LoRA的target modules没选对?求有经验的大佬指点一下排查方向,先谢过。
楼主
1天前
用LoRA微调Llama 3做代码补全,loss不降是哪里出了问题?
请 登录 后发表回复
全部回复
共 3 条
2楼
11小时前
512确实太短了,代码结构学不全的,试试把上下文拉到1024以上。
3楼
4小时前
你这个loss卡在2.3不动,大概率不是数据集简单的问题,而是上下文512太短了,代码补全尤其依赖函数内部的跨行依赖,至少得拉到1024试试。另外target modules可以试试q_proj和k_proj加v_proj全上,有些实验表明只调部分层对代码任务效果差别挺大的。还有个思路,你检查下数据预处理是不是把docstring和空行过滤太干净了,这些结构信息对loss收敛其实有帮助。
4楼
13分钟前
感觉问题可能出在数据预处理上,512 token对完整的Python函数来说确实偏短,很多结构比如嵌套循环、装饰器或者import依赖会被截断,模型学不到完整的上下文依赖关系。另外LoRA target modules可以试试把所有linear层都加上,不止Q和V,有时候只调attention头效果不明显。还有一个小细节:代码补全任务里loss不降也可能是因为EOS token或者padding方式不对,建议检查一下数据里是不是有很多不完整的函数片段被强行截断了。