# 微调某个领域模型
# 简介
在一个企业内部,往往都是专攻一个领域的,所以我们只需要这个领域的内容精准,效率高,这属于特定任务的需求,就要比动物的种类细分,鸟类、鱼类等
# 开始微调
大概步骤:做数据、装训练软件、测试训练结果、导出、合并
# 做数据
这一步可以说是最重要的一部分,数据质量好,训练的结果才会好,这里推荐 EasyDataSet 这个项目,它可以帮我生成微调需要的数据集,其中如果对生成不满意也可以自己微调
# 安装微调工具
大多数大模型相关的工具都和 python 有关,需要的 python 版本环境也有关,所以这里推荐用 canconda 来管理, 它就相当于开一个虚拟的 python 环境,每个环境是独立的
# 安装 llama-factory
使用 canconda 安装:
# 创建虚拟环境 (如果没有配置环境变量那么要在 \condabin 目录下) | |
conda create --name llama_factory python=3.10 | |
# 激活虚拟环境 | |
conda activate llama_factory | |
#会显示 括号中有显示环境名称就代表激活了: | |
(llama_factory) C:\ | |
#拉取 llama_factory,我这里选择在 E 盘下安装 | |
(llama_factory) C:\Users\tz>E: | |
(llama_factory) E:\> mkdir llama_factory | |
(llama_factory) E:\> cd llama_factory | |
(llama_factory) E:\llama_factory\> git clone https://github.com/hiyouga/LLaMA-Factory.git | |
(llama_factory) E:\llama_factory\> pip install -r requirements.txt | |
#安装成功后启动 | |
(llama_factory) E:\llama_factory\> llamafactory-cli train -h | |
#成功后访问页面就可以看到微调页面了: | |
http://localhost:7860/ |

# 安装训练用模型
上面的微调工具装好了接下来就需要安装微调用的模型了,我这里用 魔塔社区 下载, 当然也可以选择用 huggingface 需要科学上网,或者可以用它的进项网站 huggingface 镜像
我这里也是用 canconda 创建了一个专门的环境:
# 创建虚拟环境 (如果没有配置环境变量那么要在 \condabin 目录下) | |
conda create --name modelscope python=3.8 | |
# 激活虚拟环境 | |
conda activate modelscope | |
# 创建一个保存下载模型的目录 | |
(modelscope) E:\software\anaconda\condabin>mkdir E:\software\modelscope | |
(modelscope) E:\software\anaconda\condabin>E:\software\modelscope | |
#安装 | |
(modelscope) E:\software\anaconda\condabin>pip install modelscope | |
#完成后下载指定模型 我这里下载的是蒸馏的 deepseek1.5B | |
(modelscope) E:\software\modelscope>modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B --local_dir "E:\\software\\modelscope\\deepseek1.5B" | |
_ .-') _ .-') _ ('-. .-') _ (`-. ('-. | |
( '.( OO )_ ( ( OO) ) _( OO) ( OO ). ( (OO ) _( OO) | |
,--. ,--.).-'),-----. \ .'_ (,------.,--. (_)---\_) .-----. .-'),-----. _.` \(,------. | |
| `.' |( OO' .-. ',`'--..._) | .---'| |.-') / _ | ' .--./ ( OO' .-. '(__...--'' | .---' | |
| |/ | | | || | \ ' | | | | OO )\ :` `. | |('-. / | | | | | / | | | | | |
| |'.'| |\_) | |\| || | ' |(| '--. | |`-' | '..`''.) /_) |OO )\_) | |\| | | |_.' |(| '--. | |
| | | | \ | | | || | / : | .--'(| '---.'.-._) \ || |`-'| \ | | | | | .___.' | .--' | |
| | | | `' '-' '| '--' / | `---.| | \ /(_' '--'\ `' '-' ' | | | `---. | |
`--' `--' `-----' `-------' `------'`------' `-----' `-----' `-----' `--' `------' | |
Downloading Model from https://www.modelscope.cn to directory: E:\software\modelscope\deepseek1.5B | |
Downloading [config.json]: 100%|██████████████████████████████████████████████████████| 679/679 [00:00<00:00, 1.93kB/s] | |
Downloading [LICENSE]: 100%|██████████████████████████████████████████████████████| 1.04k/1.04k [00:00<00:00, 2.83kB/s] | |
Downloading [configuration.json]: 100%|███████████████████████████████████████████████| 73.0/73.0 [00:00<00:00, 193B/s] | |
Downloading [generation_config.json]: 100%|█████████████████████████████████████████████| 181/181 [00:00<00:00, 452B/s] |
# 开始训练
在页面上选好要训练的模型的名称和路径,在选好要训练的数据集,数据集我们前面用 easydataset 生成好了,如图:

其他参数说明:
- 选择微调算法 Lora
- 添加数据集 magic_conch
- 修改其他训练相关参数,如学习率、训练轮数、截断长度、验证集比例等
- 学习率(Learning Rate):决定了模型每次更新时权重改变的幅度。过大可能会错过最优解;过小会学得很慢或陷入局部最优解
- 训练轮数(Epochs):太少模型会欠拟合(没学好),太大会过拟合(学过头了)
- 最大梯度范数(Max Gradient Norm):当梯度的值超过这个范围时会被截断,防止梯度爆炸现象
- 最大样本数(Max Samples):每轮训练中最多使用的样本数
- 计算类型(Computation Type):在训练时使用的数据类型,常见的有 float32 和 float16。在性能和精度之间找平衡
- 截断长度(Truncation Length):处理长文本时如果太长超过这个阈值的部分会被截断掉,避免内存溢出
- 批处理大小(Batch Size):由于内存限制,每轮训练我们要将训练集数据分批次送进去,这个批次大小就是 Batch Size
- 梯度累积(Gradient Accumulation):默认情况下模型会在每个 batch 处理完后进行一次更新一个参数,但你可以通过设置这个梯度累计,让他直到处理完多个小批次的数据后才进行一次更新
- 验证集比例(Validation Set Proportion):数据集分为训练集和验证集两个部分,训练集用来学习训练,验证集用来验证学习效果如何
- 学习率调节器(Learning Rate Scheduler):在训练的过程中帮你自动调整优化学习率
- 页面上点击启动训练,或复制命令到终端启动训练
- 实践中推荐用
nohup命令将训练任务放到后台执行,这样即使关闭终端任务也会继续运行。同时将日志重定向到文件中保存下来- 在训练过程中注意观察损失曲线,尽可能将损失降到最低
- 如损失降低太慢,尝试增大学习率
- 如训练结束损失还呈下降趋势,增大训练轮数确保拟合
# 微调结束,评估微调效果
- 观察损失曲线的变化;观察最终损失(loss 值越低训练效果也好,注意看曲线是平缓的从高到低的)
- 在交互页面上通过预测 / 对话等方式测试微调好的效果
- 检查点:保存的是模型在训练过程中的一个中间状态,包含了模型权重、训练过程中使用的配置(如学习率、批次大小)等信息,对 LoRA 来说,检查点包含了训练得到的 B 和 A 这两个低秩矩阵的权重
- 若微调效果不理想,你可以:
- 使用更强的预训练模型
- 增加数据量
- 优化数据质量(数据清洗、数据增强等,可学习相关论文如何实现)
- 调整训练参数,如学习率、训练轮数、优化器、批次大小等等
这是我训练出来的结果:

# 导出训练完成的模型并运行
为什么要合并:因为 LoRA 只是通过低秩矩阵调整原始模型的部分权重,而不直接修改原模型的权重。合并步骤将 LoRA 权重与原始模型权重融合生成一个完整的模型
先创建目录,用于存放导出后的模型
mkdir E:\software\export_model\model_test
在 llama_factory 上选择导出训练好的模型到上面传教的路径下
转换成 ollama 可以运行的模型, 要选择导出文件的
Modelfile文件执行ollama create hpzsmodal1.0 -f E:\software\export_model\model_test\Modelfile
#输出结果gathering model components
copying file sha256:ebce38aa6e0d808e9197999960e0ccc11622631ffaf6ca5a5bfe0f45a43ca23b 100%
copying file sha256:ea5a6d26cb236729c2cd3533920df439197601f3a58a7bfaaf3fd15fe622e3fc 100%
copying file sha256:e20ddafc659ba90242154b55275402edeca0715e5dbb30f56815a4ce081f4893 100%
copying file sha256:291a845e7c8da40ae17b4435ba42d685478c415e27d9cba660a28dc798ca2840 100%
copying file sha256:56c7e91f53b398e02911ea2efb3055064b030e1ee60f715768b0784ff88d9561 100%
copying file sha256:48b429b5145f0c5b64117f260ca0a5e61b2b3893e296fdb2c29e2724af3fc824 100%
copying file sha256:aa680816c8c93d1b4f7ef85b9973ae401d6cc597761555e424b057182f2cfffc 100%
copying file sha256:df167259298e0fcdfb446821061942e031559cf78e9cb48582fb6d153bb3d280 100%
converting model
creating new layer sha256:bd9e822699dff12194ce21de651141158bbd3a02982e73c3630d6c2f66e4420b
creating new layer sha256:741e943dbd4c7642ec2e10b275b4cc1a154d97550dce8a6288e1edf56bec5e8f
creating new layer sha256:b2ad9c47ff5fee622d61048a4fe3ba330b91d26bc04578fad9d10d143dc86322
writing manifest
success
#查看 ollama 所有模型, 可以看到已经有显示了ollama list
NAME ID SIZE MODIFIED
hpzsmodal1.0:latest a4eeda271171 3.6 GB 7 minutes ago
deepseek-r1:1.5b e0979632db5a 1.1 GB 6 days ago