如何用个人数据微调大模型,使其更懂我?
摘要:在现在这个时代,完全可以说,大部分的技术都是没有什么价值的,因为大部分的技术都是有手就行。真正的价值都在数据,而且最有价值的数据往往都是一个个的专业领域的数据,决定大模型微调效果的是数据,决定你整个产品成败的也是数据,这个事情一定要搞清楚。
一、前言
上上周的周末无事在家,然后写了一篇《【有手就行】自己花20分钟从0开始训练一个“大模型”》,结果发现这两个星期涨了几十个关注,比我前面写了几个月文章得到的关注还多,看来这种浅显易懂的、入门级的技术文章相对来说会有更多人爱看一些。
既然如此,我再把早先在做OddAgent时候,微调语音助手功能的流程也简单理一下,然后放出来给大家做一个参考吧。
事实上,上手学习大模型、人工智能相关的开发并没有什么太过高深的门槛,真的很简单,真的就是【有手就行】。
二、大模型微调概述
微调(Fine-tuning)有很多种不同的方法,但是使用的场景以及代价也都是不一样的。作为一个没什么资源(数据缺缺,GPU缺缺)的普通人来说,考虑的肯定是低成本方案。
方法类型
参数更新范围
计算成本
适用场景
典型工具框架
全参数微调
全部参数
极高
大数据集、高资源场景
Hugging Face Transformers
Adapter Tuning
适配器参数
低
多任务、资源受限
AdapterHub、PEFT
LoRA/QLoRA
低秩矩阵参数
极低
大模型单卡微调、小样本
LoRA、QLoRA(PEFT 库集成)
指令微调
全量 / 部分参数
中 - 高
通用对话模型、多任务泛化
Alpaca-LoRA、FastChat
领域适配微调
全量 / 部分参数
中
垂直领域任务
自定义领域数据集 + Transformers
三、LoRA微调全流程
前阵子在将小落同学项目的智能体代码摘成独立的OddAgent项目时,实践的是一个会议相关的语音助手功能,该功能有针对Qwen2.5-0.5B-Instruct模型和Qwen3-4B-Instruct-2507这两个模型重点做了一些测试和验证,用的就是其中成本最低的LoRA微调。
最后跑下来Qwen3-4B-Instruct-2507的效果要显著好于Qwen2.5-0.5B-Instruct(有同时针对这两个模型用同一套数据集去做了LoRA微调)。
因此,本文的重点就放在了Qwen2.5-0.5B-Instruct的LoRA微调上,因为后面我还准备再继续针对这个模型再补充一些训练集来做一下微调,目标是在这个模型上也能做到100%的意图/槽位准确率。
跟之前训练大模型一样,还是在我家里的这个10年前的老笔记本上进行的。
硬件配置:CPU: i7-8850H CPU @ 2.60GHz+16G内存
微调训练时长:约50分钟(由于训练时,还在用这个笔记本上网课,所以时长仅供参考)
1. 创建虚拟环境
为了不影响现有的python环境,建议为这个LoRA训练单独创建一个环境。个人习惯用conda(环境可复用,节省硬盘空间),venv或者vu也都一样,全看大家的个人喜好。
conda create -n lora python=3.12 -y
conda activate lora
2. 模型下载
下载模型前请注意一下你的硬盘空间,整个模型需要955M的硬盘空间,如果你跟我一样常年硬盘空间都是严重不足的,请视情况清理一下空间,避免下载失败。
pip install modelscope --index https://pypi.mirrors.ustc.edu.cn/simple
modelscope download --model Qwen/Qwen2.5-0.5B-Instruct
下载下来后,会保存到指定的.cache这个目录下。如果是Windows,默认是在 C:\Users\Administrator\.cache 目录下,如果是Linux/Mac则是在 .cache 目录下。
其中:
config.json 定义模型结构
tokenizer.json 定义文本输入方式
safetensors 文件则存储模型的参数权重。
3. 微调环境安装
call pip install torch --index-url https://download.pytorch.org/whl/cu121
call pip install transformers accelerate bitsandbytes peft datasets trl streamlit sentencepiece tensorboard
4. 数据库集准备
训练需要你预先准备好你用于训练的数据集,但是。。。
