最近在试着微调Llama3-8B做中文客服问答,用了HuggingFace的PEFT库跑LoRA。我看网上有人用rank=8,有人用rank=64,甚至有说rank=2和rank=128的,差距太大了。我试了rank=16,loss倒是降了,但生成结果经常重复或者答非所问,感觉像没学进去。想问问实际项目中,rank值到底怎么选?是不是跟任务复杂度、数据量大小有关系?还有,有没有什么经验法则,比如数据量少就选小rank?或者说rank太大反而容易过拟合?求真实踩坑经验,不要纯理论。
最近在试着微调Llama3-8B做中文客服问答,用了HuggingFace的PEFT库跑LoRA。我看网上有人用rank=8,有人用rank=64,甚至有说rank=2和rank=128的,差距太大了。我试了rank=16,loss倒是降了,但生成结果经常重复或者答非所问,感觉像没学进去。想问问实际项目中,rank值到底怎么选?是不是跟任务复杂度、数据量大小有关系?还有,有没有什么经验法则,比如数据量少就选小rank?或者说rank太大反而容易过拟合?求真实踩坑经验,不要纯理论。
我试过rank=16和32,客服场景数据量两万条左右,16确实容易复读,调到32明显稳一些。感觉跟数据多样性关系更大,光看量没用,重复话术太多小rank就够。另外你loss降但答非所问,可能是target module只加了q,v,把k,o和mlp都加上试试,比调rank管用。过拟合我倒没太遇到,early stopping盯着验证集就行。