|
模型提示词工程、RAG都已经实践上手了一些项目。真实场景中,希望模型自己能输出企业内部知识,选择了模型微调,目的是让模型学习企业内部数据。
我这次项目主要是针对我负责的ERP销售系统,将专业术语、系统操作、常见问题等喂给它进行微调,希望微调训练后,能够学习到我负责系统的相关知识。
【首次】环境安装(各版本不冲突)
1、基础软件及包安装:
pytorch、cuda、python等基础软件的安装,网上一搜一堆,再次不再赘述。
但是需要注意的是不同软件的版本冲突问题。就比如我微调选择量化时发现,我的pytorch、cuda版本冲突,导致无法量化,只能lora,GPU爆满。大家根据自己GPU配置选择对应版本及后续微调参数。
2、llamafactory安装
(1)我们在此虚拟环境中执行:
pip install -e ".[torch,metrics]"
(2)依赖安装完成后,我们执行 llamafactory-cli version 验证安装情况:

(3)然后我们测试执行 which llamafactory-cli 可以发现,llamafactory 被安装在了 conda 创建的虚拟环境目录下:

3、训练的模型下载
(1)下载地址:
ModelScope - 数据集列表页
(2)下载本地:
我用的是qwen2.5-7b模型;
C:\Users\XXX\.cache\modelscope\hub\models\Qwen\Qwen2___5-7B-Instruct
4、对应LLaMA-Factory-main下载
D:\ai_projects\LLaMA-Factory-main\LLaMA-Factory-main\src
数据集准备
1、数据集要求
(1)指令性json格式要求:
踩坑经验:(让模型生成时候就把该格式生成好,不要后续浪费时间人工补充,我少了逗号,395条数据好一顿补)
●最开始和结束必有大括号;
●并且每条数据前后需要有逗号隔开。
[
{ "instruction":"根据下表,将每个句子分类为定义、事实或观点。", "input":"|句子|\n|--------|\n|水果是一种通常甜味且含有种子的食物类别。|\n|苹果是一种水果。|\n|苹果是口感最好的水果。|", "output":"|句子|分类|\n|--------|-----|\n|水果是一种通常甜味且含有种子的食物类别。|定义|\n|苹果是一种水果。|事实|\n|苹果是口感最好的水果。|观点|" }, { "instruction":"生成与电动汽车相关的适当关键词。", "input":"", "output":"电动汽车、电池技术、可持续交通、充电技术、零排放、绿色能源、智能交通、续航能力、电驱动、电动汽车市场、电池回收、电池续航、充电桩、节能减排、无尾气排放、节能汽车、低碳交通。" } ]
这样后续在微调页面加载预览数据集了。
(2)问了AI,根据我配置GPU-3060,12GB,要求500个问题,一次训练效果较好。
大家可自行根据自己配置及目的,问AI需要多少数据量。
2、数据集-问答对准备
(1)大模型生成
踩坑经验:发现一个大操作手册直接生成问题效果不好,把操作手册按章节拆分,分别让大模型生成问题。
提示词可参考如下:
#任务:帮我仔细阅读附件操作手册,帮我生成微调训练的40条数据,数据格式可直接用于微调训练,目的是小模型学习我的操作手册。
#要求:切勿瞎编乱遭,生成的微调数据,只能来源于我的附件操作手册; #格式及样例: { "instruction":"根据下表,将每个句子分类为定义、事实或观点。", "input":"|句子|\n|--------|\n|水果是一种通常甜味且含有种子的食物类别。|\n|苹果是一种水果。|\n|苹果是口感最好的水果。|", "output":"|句子|分类|\n|--------|-----|\n|水果是一种通常甜味且含有种子的食物类别。|定义|\n|苹果是一种水果。|事实|\n|苹果是口感最好的水果。|观点|" }, { "instruction":"生成与电动汽车相关的适当关键词。", "input":"", "output":"电动汽车、电池技术、可持续交通、充电技术、零排放、绿色能源、智能交通、续航能力、电驱动、电动汽车市场、电池回收、电池续航、充电桩、节能减排、无尾气排放、节能汽车、低碳交通。" }
(2)人工生成问题
实际上模型生成问答对数据集时候,我会仔细阅读,删除少量虚构的,补充必要的知识。其实高质量数据输入,就高质量数据输出,大家可自行接触AI工具,加上人工编辑,完成原始数据集的整理。后续会根据实际经验,多次测出哪种数据对模型训练效果较好。
3、数据集提前配置
business_qa.json,就是我自己设置的数据集,将上述数据放入此文件。文件再进行实际配置,具体我的地址如下,大家可根据自己实际配置,D:\ai_projects\LLaMA-Factory-main\LLaMA-Factory-main\data:
(1)修改文件:dataset_info.json中
"business_qa":{ "file_name":"business_qa.json", "formatting":"alpaca", "columns":{ "prompt":"instruction", "query":"input", "response":"output" } }
(2)再将数据集business_qa.json放入此文件夹data中。
【每次使用】打开虚拟环境及微调页面
1、打开微调页面:
#1、打开虚拟环境
conda activate lf
#2、进入项目目录,目的后续加载训练数据
cd /d D:\ai_projects\LLaMA-Factory-main\LLaMA-Factory-main
#3、打开微调页面
llamafactory-cli webui
2、模型选择:
用modelscope先下载模型到本地,在地址填写本地,较快;
3、数据集加载【预览】:
4、微调页面各种参数选择:
学习率:2e-4
训练:5轮
验证比例:0.1
量化等级:4
微调:lora
大家根据自己GPU、数据等自行配置。
实际微调记录
1、【财务微调】8.22日,
(1)数据集-395条数据
(2)微调参数:
学习率:2e-4
训练:5轮
验证比例:0.1
量化等级:4——最后是none,因为pytorch与cuda版本冲突,暂未解决。
微调:lora
(3)微调过程:
报错1:
importlib.metadata.PackageNotFoundError: No package metadata was foundforThe'bitsandbytes>=0.39.0'distribution was not found and is required by this application.
To fix: run`pip install bitsandbytes>=0.39.0`.
已经优化1:
# 强制卸载并重装(关键!)
pip uninstall -y bitsandbytes
pip cache purge
pipinstallbitsandbytes==0.41.1 --force-reinstall --prefer-binary
#实际上我使用的是下面下载
pipinstallhttps://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.1-py3-none-win_amd64.whl
报错2:
ModuleNotFoundError: Could notimportmodule'validate_bnb_backend_availability'.Are this object's requirements defined correctly?
核心问题是 bitsandbytes 库无法正确检测 CUDA 环境,导致微调启动失败
未优化2:
Python3.10.18 on 64bit
您配置的系统环境变量指向的是 CUDA11.8(CUDA_PATH=v11.8)。请确保您安装的PyTorch也是与之匹配的CUDA11.8版本,否则会出现更深层次的冲突。 python -c"import torch; print(torch.version.cuda)"
#下面我自己未优化,直接不用量化了 (lf)C:\Users\>python -c"import torch; print(torch.version.cuda)" 12.1 如果输出不是11.8,您需要重新安装匹配的PyTorch: pip uninstall torch torchvision torchaudio -y pipinstalltorch==2.0.1+cu118torchvision==0.15.2+cu118torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
#我实际使用替代方案 1:禁用量化训练 在 LLaMA-Factory 的 WebUI 中: 取消勾选 Quantization(4-bit)选项 → 使用普通 LoRA 微调(显存需求升至 14GB,RTX3060可能不足)
微调过程
#首次损失函数
[INFO|2025-08-2216:19:04]llamafactory.train.callbacks:143>>{'loss':4.3177,'learning_rate':1.9940e-04,'epoch':0.22,'throughput':17.82} {'loss':4.3177,'grad_norm':5.115846157073975,'learning_rate':0.00019940356672322037,'epoch':0.22,'num_input_tokens_seen':5520,'train_runtime':309.7212,'train_tokens_per_second':17.822}
微调结果:曲线还是很美的,损失值从最开始4,逐步降到0.5,耗时1h多。
|