最近花了两周时间把开源大模型微调这件事从头到尾跑通了,过程中踩了不少坑,写出来给想入门的朋友参考。
为什么要微调
通用大模型确实很强,ChatGPT、Claude这些用起来体验很好,但在特定领域就不够用了。比如我之前想让AI帮我做中医药方面的问答,通用模型的回答要么太泛泛,要么有明显的知识错误。
微调的本质就是在预训练模型的基础上,用你自己的领域数据再训练一轮,让模型"学会"你领域里的专业知识和表达方式。
选模型:Qwen2.5-7B
推荐Qwen2.5-7B:中文能力强、7B参数量适中一张消费级显卡就能跑、社区活跃、开源协议友好。如果纯英文场景,LLaMA 3.1-8B也很好。
数据准备:最关键的一步
数据准备占了70%的工作量。至少准备500条高质量的问答对,注意是"高质量"。100条精心准备的数据效果可能比1000条质量差的好得多。
数据格式一般用对话格式(conversations JSON)。来源可以是FAQ文档、专家编写的问答对、业务系统中的真实对话记录。千万不要用AI生成的数据来微调AI。
小技巧:先让通用模型回答一遍,然后人工修正,比完全从零写效率高很多。
工具选择:Unsloth
强烈推荐Unsloth,能把显存需求降低70%。原本需要两张3090才能训练的7B模型,一张3090就够了。速度也比普通transformers训练快2-3倍。
微调步骤
- 准备数据,拆分训练集和验证集(9:1)
- 格式转换,注意不同模型的Chat Template不同
- 配置参数:learning rate 1e-4~2e-4,epoch 2-3轮,LoRA rank 16或32
- 开始训练,500条数据大概1-2小时
- 评估效果
- 用vLLM或Ollama部署
常见问题
- 过拟合:减少训练轮次、增加数据多样性、加大dropout
- 灾难性遗忘:训练数据里混入10-20%通用对话数据
- Loss不下降:调小learning rate或检查数据格式
成本
- 云服务器:租AutoDL的3090大概2块钱一小时
- 训练时间:500条数据1-2小时
- 总成本:一次微调几块钱
微调已经完全是个人开发者能玩得起的事了。你有微调的经验吗?评论区聊聊~