兄弟们,今天聊聊模型微调那些事。我最近搞了个7B的LLaMA变体,数据集是自家业务的数据,前前后后折腾了两周。先说结论:微调不是跑个脚本就完事,细节多得能让你失眠。
第一坑:loss不降。我一开始用默认学习率5e-5,结果训练集loss卡在2.3不动。排查发现是数据集里有大量重复样本,batch多样性太低。解决方案:清洗数据+调低学习率到2e-5,效果立竿见影。记住,数据质量比数量重要十倍。
第二坑:梯度爆炸。微调到第3个epoch时,loss突然飙到NaN。查了log,发现是前半段学习率衰减策略太激进,导致后段梯度累积过大。我换成了cosine decay with warmup,稳住了。建议新手别整花活,直接上AdamW+线性衰减。
第三坑:过拟合。微调后模型在验证集上表现优秀,但上线后对长尾问题乱答。这其实是灾难性遗忘,我改了LoRA的rank值(从8降到4),并且加了10%原始预训练数据做混合训练,平衡了通用性和领域性。
最后提醒:部署时注意量化,我用bitsandbytes的8bit推理,显存从24G降到12G,速度还快了15%。
抛个问题:你们微调时遇到过什么奇葩bug?或者怎么选数据比例?评论区聊聊。 |