【背景概述】
“现在流行的、开源的大模型,是通用型大模型,但每一个企业都有垂直的领域,或是电商,或是医疗,或是金融等等,若企业想在各自垂直领域训练自有大模型,那就需要对通用模型进行微调了。(当然也可以从头训练模型,但对于中小企业成本太高了。)”
在学习运用RAG技术搭建企业知识库,了解了LangChain、Embedding、向量库以及调用本地DeepSeek等内容后,本文将继续从企业AI落地的角度,介绍如何使用LLaMA-Factory对通用模型进行微调,通俗的说,微调就是在已有的通用模型基础上,进行再次数据训练,训练的方式有很多,比如指令监督微调、偏好微调等,与RAG的区别,简单说微调是要模型通过数据训练进行自我学习提升,考试时完全靠自己掌握的知识,而RAG则是“开卷考试”了。(RAG、微调的区别可以看上一篇。)
AI实战系列前三篇:
DeepSeek本地运行全流程解析,企业私有化,数据安全、降本增效双搞定!含ollama命令聊天、chatbox界面聊天效果(AI实战系列,保姆级教程)
教你打造企业自有大模型(基于ollama、deepseek),走出定制化第一步,沉淀AI技术能力,让AI变成生产力!【AI实战系列】
企业知识管理混乱?RAG+LangChain+DeepSeek构建会思考的企业知识库!(AI实战系列,附有详细代码)
一、哪些场景适合微调?LLaMA-Factory是什么?
上一篇我们已经使用RAG技术,对大模型进行了知识库的扩展,那为何还要进行微调呢?所以首先我们要识别一下哪些场景需要进行微调。
1、哪些场景适合微调?(个人观点)
(1)具有特定领域的精确需求。比如是在医疗、法律、金融或建筑等领域,因为其需要有高度的准确性,还有很多专业术语,因为行业的知识壁垒,就算开卷考试,恐怕也很难考过了。
(2)具有拟人化的风格、语气以及行为需求。通用模型通常是助手的角色,相对语言比较生硬,若想让模型更加拟人化,一般需要使用LCCC这类真人对话数据进行训练,才能有特定的风格、语调或行为特征,可能是需要微调的,当然若模型已经具备较强能力,也可以通过提示词工程来达到效果。
(3)降低模型服务使用成本。微调可以将大型模型提炼到更小的模型中,在不牺牲质量的情况下降低成本和延迟。而且,微调后的模型,使用时减少了提示词中上下文的长度,可以节省token,进一步降低成本。
当然,肯定还有很多其他场景,有技术要求,也有非技术要求,比如企业品牌的塑造,就是需要一个自研的企业大模型,微调自然是必须要的。
2、LLaMA-Factory是什么?
LLaMA-Factory是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过LLaMA-Factory,在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调。
(1)支持的模型:LLaMA、DeepSeek、Qwen、ChatGLM等,基本上市面上开源大模型都支持。
(2)支持的训练算法:(增量)预训练、(多模态)指令监督微调、奖励模型训练、PPO训练、DPO训练、KTO训练、ORPO训练等。
(3)支持的运算精度:16比特全参数微调、冻结微调、LoRA微调和QLoRA微调。
3、LLaMA -Factory以外,还有哪些工具可以微调?
主要有ms-swift、unsloth、FastChat以及Firefly等,这里列一下,大家了解下,有个印象即可。
二、LLaMA-Factory的安装、微调
1、安装
运行以下指令以安装LLaMA-Factory及其依赖:
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
# 也可以点击左下角关注,回复“AI实战系列资料”获取
# 切换到目录下
cd LLaMA-Factory
# pip3版本
pip3 install -e ".[torch,metrics]"
# 或者pip,看自己电脑环境
pip install -e ".[torch,metrics]"
如果出现环境冲突,请尝试使用如下命令解决。
pip3 install --no-deps -e .
如果以上还不能解决,可以独立创建一个环境。可以使用Anaconda进行环境管理,进行环境切换。
conda activate llamafactory
若看到上图内容安装完成,其中最前面的(llamafactory)即为当前环境。
如果想启用量化LoRA(QLoRA),可以安装bitsandbytes。
pip3 install bitsandbytes
2、安装校验
完成安装后,可以通过以下命令快速校验安装是否成功。
llamafactory-cli version
如果能看到下面界面,说明安装成功了。
3、启动UI界面
通过以下命令启动。
llamafactory-cli webui
界面内容还是比较多的(一屏截不下),如下。
默认是英文的,已经切换为中文了。
此时,微调的工具环境准备好了,按照上图的内容,还需要准备两个内容:
-
“第一行”,需要填入“模型路径”,需要我们下载模型文件。
-
“Train”这一行,需要填入数据集,需要我们准备自有数据。
4、下载模型
本次依旧选用DeepSeek模型,由于网络原因,我们在魔搭社区下载对应模型。
访问魔搭社区:https://modelscope.cn/
选择“模型库”,搜索“DeepSeek”,选择一款适合自己的模型即可。
进入详情页,点击“下载模型”按钮,会出现相应的提示,如下。
按照右侧的提示下载,即使用如下命令。
pip3 install modelscope
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
此时模型就下载好了。
5、数据集准备
LLaMA-Factory支持Alpaca格式和ShareGPT格式的数据集,这是两种格式的数据集,可以自行搜索下。
(1)数据格式
本次主要进行Alpaca格式数据的指令监督微调(Instruct Tuning),其他的训练方式,后面根据具体场景介绍。
数据格式如下:
# 在下载的LLaMA-Factory项目的data目录中,可以找到该文件
alpaca_zh_demo.json
{
"instruction": "",
"input": "",
"output": ""
}
其中instruction列对应的内容为人类指令,input列对应的内容为人类输入,output列对应的内容为模型回答。
(2)电商客服场景数据准备
本文准备的数据集是电商客服场景的,文件为mall_kf_demo_data.json。
数据集有如下特征:
-
场景全覆盖:包含价格咨询、物流查询、售后处理、产品咨询等典型客服场景。
-
真实业务逻辑:体现优惠叠加规则、价保政策、跨境税费等专业知识点。
-
情感处理:包含投诉安抚场景,示范如何化解客户不满。
-
结构化回复:所有回答均遵循"致歉/感谢+解决方案+补偿选项"的专业话术结构。
-
数据多样性:涵盖家电、服饰、数码、美妆、家居等常见品类。
从中也可以看出,在实际业务场景的数据训练过程中,数据集的特征是要着重考虑的!部分内容如下:
注:内容仅供参考,不能直接投产使用,需要根据实际业务调整具体内容,特别是价格、时效等敏感信息。
以上只截取了部分数据。若想要全部数据,点击左下角关注,回复“AI实战系列资料”,即可获取AI实战系列资料哦。
然后,千万记得,要将文件复制到LLaMA-Factory项目的data目录下哦,后续才能进行数据预览!
(3)添加至dataset_info.json
dataset_info.json同样位于下载的LLaMA-Factory项目的data目录中,其中已包含了所有经过预处理的本地数据集以及在线数据集。
因为我们使用的是自己准备的数据集,所以需要在dataset_info.json文件中添加该数据集相关的定义。
打开文件,在最后添加如下内容。
# 注意上面还有个逗号哦
"mall_kf_demo_data": {
"file_name": "mall_kf_demo_data.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output"
}
}
# 本案例中columns字段可以省略
# 但如果是特殊数据结构,比如多轮对话结构,是需要声明的
那肯定有人不明白为什么要加呢?
添加的目的是,在“Train”这一行能够选到我们的自定义数据集。效果如下:
可以点击预览数据。
至此,数据集已经添加完成了。
6、数据训练
在开始训练模型之前,我们需要指定如下参数:
-
模型名称及路径:
本次选择DeepSeek-R1-1.5B-Distill。
路径要特别注意!需要填写modelscope下载的位置,默认是在“/用户/.cache/modelscope/hub/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B”,若不填写本地路径,训练时会到“huggingface”上下载。
-
训练阶段:默认,选择Supervised Fine-Tuning
-
微调方法:默认,选择lora
-
训练数据集:选择mall_kf_demo_data
-
学习率、训练轮数等训练参数:默认
-
微调参数等其他参数:默认
-
输出目录及配置路径:默认生成
点击预览命令,可以看到生成的命令以及相关参数,如下。
可以看出,使用UI界面训练之外,我们也可以直接使用命令进行训练。
在点击“开始”训练之前,最后先验证一下模型是否可用。点击“chat”->“加载模型”,若如下图,显示“模型已加载,可以开始聊天了!”,即表示模型可用,也可以进行聊天了。
此时一切准备就绪了,点击“开始”了。
等待一顿输出后,“训练完毕”,如下。
模型生成的目录是:LLaMA-Factory/saves/。
此时大功告成了!
三、验证:电商客服提问
1、加载训练好的LoRA文件
模型信息不动,在微调方法那一行,点击“检查点路径”,选择我们上一次训练的检查点,后续若再训练或者执行chat的时候,会将此LoRA一起加载。
点击加载模型,若之前加载过模型,需先卸载模型。
为增加回复速度可以在提问前关闭“思考模式”,即取消勾选“启用思考模式”。
2、加载好之后,可以提问看看效果了
(1)首先要看下我们如何提问呢?
根据上述的数据结构,instruction列对应的内容会与input列对应的内容拼接后作为提问的输入,即输入instruction\ninput。\n代表要换行。
拿下面的数据举例理解一下:
{
"instruction":"处理商品质量问题",
"input":"刚买的耳机有杂音,怎么办?",
"output":"非常抱歉遇到这种情况。请您尝试重置设备后测试,如果仍有问题,我们提供15天质量问题免费退换服务。您可以选择:1.技术人员远程指导排查 2.直接申请售后换新。"
}
提问时应该是这样,中间要换行!
处理商品质量问题
刚买的耳机有杂音,怎么办?
那就用这个提问。
回答效果与原数据相似了。
3、训练优化
也许可能你跑完发现好像模型没有变化?
是的,首先本次使用的模型是1.5B,本身能力比较弱,前几次训练好,提问后都是回复“联网查找之类的”,很傻的。
能达到上述的效果,我是经过连续训练,训练轮数300次以上,一直训练到下图的曲线趋于平衡,才达到这个效果的。
这也正说明了,中小企业可以通过小模型打造自己的领域模型!
所以,在实际业务中可以通过以下方式优化,一是选用更好用的模型,二是提供更多高质量的数据,三是通过大量的训练及标注。
当然,模型训练完成后,可以导出,这个比较简单,就不详细说明了。后续单独写一篇从LLaMA-Factory把模型导出来,再将模型导入Ollama,这样可以对外提供服务了。
至此,本次大模型微调完成了,大模型微调相对之前难度要高一些,大家要静下心来,好好消化下。
因为篇幅有限,涉及内容较多,难免有些笔误,敬请谅解!遇到问题可以关注私信交流。有企业模型定制需求的,也欢迎私信。
若有需要源码,可以私信,也可以看下图的方式获取。
欢迎点赞、收藏、评论、关注,后续持续分享,如何基于DeepSeek等大模型,实现企业AI集成、企业知识库、电商场景应用、模型微调、智能问答、多模态、RPA等项目实战。致力为中小企业提供实用的企业级AI解决方案!