开源大模型微调入门:用自己的数据训练专属AI

最近花了两周时间把开源大模型微调这件事从头到尾跑通了,过程中踩了不少坑,写出来给想入门的朋友参考。

为什么要微调

通用大模型确实很强,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倍。

微调步骤

  1. 准备数据,拆分训练集和验证集(9:1)
  2. 格式转换,注意不同模型的Chat Template不同
  3. 配置参数:learning rate 1e-4~2e-4,epoch 2-3轮,LoRA rank 16或32
  4. 开始训练,500条数据大概1-2小时
  5. 评估效果
  6. 用vLLM或Ollama部署

常见问题

  • 过拟合:减少训练轮次、增加数据多样性、加大dropout
  • 灾难性遗忘:训练数据里混入10-20%通用对话数据
  • Loss不下降:调小learning rate或检查数据格式

成本

  • 云服务器:租AutoDL的3090大概2块钱一小时
  • 训练时间:500条数据1-2小时
  • 总成本:一次微调几块钱

微调已经完全是个人开发者能玩得起的事了。你有微调的经验吗?评论区聊聊~

正好在研究这个方向!请问Qwen2.5-7B微调后做中文客服场景效果怎么样?我们公司想用自己的FAQ数据训一个专属模型

1 个赞

补充一下Unsloth的坑:安装的时候注意CUDA版本要匹配,我之前用CUDA 12.1装了半天装不上,后来发现要用12.0。另外如果用Windows的话建议直接上WSL2,原生Windows坑更多。

还有一个经验分享:LoRA的rank不是越大越好,我之前设了64发现效果反而不如32,可能是过拟合了。建议先用16跑一轮看效果再调。

1 个赞

灾难性遗忘+1,我之前微调完发现模型连基本的打招呼都不会了:joy: 后来按你说的混了20%通用数据才好。另外推荐一个技巧:可以用DPO做一轮alignment,效果比单纯SFT好不少

1 个赞

作为刚入门的新手问个基础问题:微调和RAG到底该怎么选?我的场景是公司内部知识库问答,数据大概有几千条FAQ

回楼上,简单说:如果你的知识会经常更新,用RAG更合适,因为只需要更新知识库不需要重新训练。如果你需要模型学会一种特定的回答风格或者专业术语的使用方式,微调更好。很多时候两者结合效果最佳——微调让模型理解领域语言,RAG提供最新的知识。

成本这块确认一下,AutoDL确实便宜。我上个月用3090跑了一次Qwen2.5-7B的LoRA微调,1200条数据跑了3个epoch,总共花了不到10块钱。对比之下OpenAI的fine-tuning API贵得离谱…