小模型微调过程记录

小模型微调过程记录

背景

在智能客服在做知识问答和增值服务时,需要根据用户语义判断用户意图,根据用户意图对走不同的分支。传统做法是Prompt+LLM,写提示词就可以完成意图的识别。也可以对模型进行微调,输入一批数据集,对小模型进行训练。现在模型更新迭代越来越快,能力越来越强。模型微调的成本比较高,效果不一定到位(对于没有微调经验的我来讲)

工具

ModelScope

https://modelscope.cn/

国内模型和数据集开源平台,也提供了免费的云环境实例

LLaMA-Factory

LLaMA-Factory 是一个开源的大语言模型训练框架,专门用于简化和优化大语言模型的微调过程。

https://github.com/hiyouga/LLaMA-Factory

https://blog.llamafactory.net/posts/mca-quickstart/

Jan

https://jan.ai/

Jan应用程序可以直接运行Llama.app的模型,在本机运行模型

制作数据集

数据集的格式和要求参考官方文档:https://github.com/hiyouga/LLaMA-Factory/blob/main/data/README_zh.md

本次调试的数据集是Alpaca 格式的指令监督微调数据集,主要有两个数据集文件,一个是身份的改变,另一个是意图识别的意图集。格式及本分样例如下:

json 复制代码
[
  {
    "instruction": "请告诉我你的名字",
    "input": "",
    "output": "我的名字是 xxx-小助手,我的使命是为尽可能多的人提供知识与帮助,让更多人受益于人工智能技术。"
  },
  {
    "instruction": "你好,你可以做什么",
    "input": "",
    "output": "我是 xxx-小助手,一个由 xxx开发团队 制作的 AI 助手,可以帮您回答问题、提供建议、进行聊天、翻译文字等等。"
  }
  ...
]
json 复制代码
[
  {
    "instruction": "导出本月的数据",
    "input": "",
    "output": "下载场景"
  },
  {
    "instruction": "会员消费情况",
    "input": "",
    "output": "用户会员相关分析"
  }
  ...
]

实践过程

下载训练框架

打开魔塔免费的GPU实例,打开终端

bash 复制代码
# 源码安装
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
# 下载依赖
cd LLaMA-Factory
pip install -e ".[torch,metrics]" --no-build-isolation
下载模型

可以在魔塔中找到适合自己的模型,我这里使用的是Qwen3-4B的小模型

bash 复制代码
# 回到项目目录
cd /mnt/workspace/
git lfs install
git clone https://www.modelscope.cn/Qwen/Qwen3-4B.git
配置模型训练文件
bash 复制代码
# LLaMA-Factory 目录下
cd examples/train_qlora/
cp llama3_lora_sft_awq.yaml qwen3_lora_sft.yaml

编辑配置文件

yaml 复制代码
### model
### 模型目录
model_name_or_path: /mnt/workspace/model/Qwen3-4B

### method
### 监督微调阶段
stage: sft
### 启用训练模型
do_train: true
### 使用LoRA(Low-Rank Adaptation)进行参数高效微调
finetuning_type: lora
lora_target: all

### dataset 数据集配置下章节说明
dataset: identity,intent
template: qwen
cutoff_len: 1024
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16

### output
### 训练模型输出
output_dir: saves/qwen3-4b/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true

### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 2.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
# ddp_timeout: 180000000

### eval
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500
配置数据集文件
bash 复制代码
# LLaMA-Factory 目录下
cd data
# 备份
cp dataset.json dataset_backup.josn

将制作数据章节的数据放在data目录下,dataset.json是数据集配置文件,

bash 复制代码
{
  "identity": {
    "file_name": "identity.json"
  },
  "intent": {
    "file_name": "intent.json"
  }
}
模型训练
bash 复制代码
llamafactory-cli train examples/train_qlora/qwen3_lora_sft.yaml

漫长的等待,中间如果执行有错误,可以移步到chatgpt和claude...

测试推理
bash 复制代码
llamafactory-cli chat \
  --model_name_or_path /mnt/workspace/model/Qwen3-4B \
  --adapter_name_or_path saves/qwen3-4b/lora/sft \
  --template qwen3

然后可以开始和训练后的模型进行对话测试

效果感觉呆呆的,一定一定是我没有用好...

LoRA模型合并导出

把训练的LoRA和原始的大模型进行融合,输出一个完整的模型文件。合并后的模型可以自由地像使用原始的模型一样应用到其他下游环节,当然也可以递归地继续用于训练。

bash 复制代码
CUDA_VISIBLE_DEVICES=0 llamafactory-cli export \
    --model_name_or_path /mnt/workspace/model/Qwen3-4B \
    --adapter_name_or_path saves/qwen3-4b/lora/sft  \
    --template qwen3 \
    --finetuning_type lora \
    --export_dir megred-model-path \
    --export_size 2 \
    --export_device cpu \
    --export_legacy_format False
导出GGUF

GGUF 是 lllama.cpp 设计的大模型存储格式,可以对模型进行高效的压缩,减少模型的大小与内存占用,从而提升模型的推理速度和效率。

bash 复制代码
cd /mnt/workspace/
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp/gguf-py
pip install --editable .
cd ..
python convert_hf_to_gguf.py /mnt/workspace/LLaMA-Factory/megred-model-path

可以把Megred-Model-Path-4.0B-F16.gguf文件导出,在**Ollama**中进行部署

Jan加载模型

点击开始,你就可以在本机电脑运行你微调的模型。然后然后然后电脑就卡机了...die

整体实践下来,能够发现模型微调确实在某些领域中有不少的提升,运维实践的成本都会比较大,对于真正的应用起来门槛还是比较高的...

相关推荐
weixin_468466852 小时前
从“看懂”到“做到”:视觉-语言-动作模型如何让机器人真正执行指令
人工智能·ai·机器人·大语言模型·前沿科技
效率工作实验室7 小时前
自定义Agent平台有哪些?灵活搭建专属AI智能体的方案
ai·自定义·agent·平台·平台有哪些
知了一笑7 小时前
人与AI互相效力:谁才是受益者?
ai·aigc·ai产品·ai工作流
一只游鱼8 小时前
LangGraph快速入门 —— Agent 是怎么转起来的
人工智能·ai·agent·langgraph
西索斯coding9 小时前
gpt-image-2.5-sunburst 和 gemini-3.1-flash-image 差多少?60 组项目素材的成功成本评测框架
java·linux·gpt·ai
wflynn11 小时前
Claude Sonnet 5自主选药选坐标完成小鼠脑部手术,更强模型拒绝执行
ai·技术
这是谁的博客?12 小时前
AI 加速器 RTL 数字系统设计深度解析:从 MAC 阵列 Verilog 实现到时序收敛与时钟功耗的芯片落地全链路
人工智能·macos·ai·verilog·数字ic设计·ai芯片·rtl
信息安全失业大专人员13 小时前
每日了解一个智能体-WorkBuddy
开发语言·ai·c#·智能体
OpenAnolis小助手13 小时前
龙蜥社区亮相 GOSIM AI Vision Forum 共话“Agentic Native”开源新
人工智能·ai·开源·操作系统·龙蜥社区·agent
恩喜玛生物13 小时前
03_GROMACS分子动力学实战:从 Factor Xa 输入准备到轨迹分析
ai