PROJECT 03

模型微调实操
云端与本地双路线

阿里云百炼零代码云端微调 + LLaMA-Factory WebUI 本地 QLoRA 训练,数据准备到模型部署的完整微调流程。

2
微调路线
云端+本地
部署方式
WebUI
可视化操作
PART 02
模型微调

微调是修改模型本身的"记忆"和行为。如果模型"不知道答案"→ 用 RAG;如果模型"知道但说不对"→ 用微调。

RAG(检索增强)

本质:外挂知识库,不改模型

改什么:只改外部数据

适用:知识问答、文档检索

数据量:越多越好

更新知识:随时加文档,立即可用

微调(Fine-tuning)

本质:修改模型参数权重

改什么:改模型内部的"记忆"

适用:风格模仿、格式输出、领域术语

数据量:几十到几千条高质量样本

更新知识:重新训练,几小时到几天

05 线上微调:阿里云百炼

使用阿里云百炼平台,无需 GPU,零代码完成模型微调。

4.1 准备微调数据

百炼使用 JSONL 对话格式,每行一条 JSON 对象:

{"messages": [
  {"role": "system", "content": "你是XX产品的客服助手,回答要简洁专业。"},
  {"role": "user", "content": "怎么退款?"},
  {"role": "assistant", "content": "您好,退款请在订单详情页点击「申请退款」,1-3个工作日原路返回。"}
]}
数据要求
  • 至少 50~100 条 高质量样本(质量 > 数量)
  • 覆盖你想让模型学会的各种场景
  • 同一个问题用不同问法问("多久能下来"/"审核需要多长时间")
  • 至少 10~20% 是多轮对话

4.2 创建微调任务

1

登录百炼控制台

打开 bailian.console.aliyun.com → 左侧菜单「模型训练」→「模型微调」

2

选择基础模型

推荐 qwen3-8b(和你本地用的 Qwen3-4B 同系列,中文效果好,性价比高)。

3

选择训练方式

LoRA(高效训练):只训练模型一小部分参数,速度快 5~10 倍,成本低,适合初学者。

4.3 参数配置

参数推荐值说明
学习率 (learning_rate)1e-4小数据量不宜太高,防止过拟合
训练轮数 (n_epochs)350~100 条数据跑 3 轮足够
LoRA Rank8小数据小 rank 更稳定
LoRA Alpha16通常为 rank 的 2 倍
LoRA Dropout0.1标准值
最大序列长度 (max_length)2048问答格式每条只有几百 token
验证集比例10%数据量小可调到 5%
验证步数 (eval_steps)5总步数少时不能设太高
常见报错

如果报 The validation set size (9) must be larger than the minimum required size,说明验证集太小。解决方案:① 降低验证集比例到 5%;② 扩充数据量到 100 条以上。

4.4 训练产出

配置项建议
Checkpoint 保存间隔每 1 个 epoch 保存一个
导出数量上限最多保存 3 个
模型加密开启(平台默认)

训练完成后最后一个 checkpoint 自动发布为模型,可在百炼的模型推理中测试,或部署成 API 接入 FastGPT 使用。

06 本地微调:LLaMA-Factory

使用 LLaMA-Factory WebUI 可视化微调,几乎不用写代码。

5.1 硬件要求

模型QLoRA 4bit 最低显存推荐显存
Qwen2.5-7B (4bit)6 GB8 GB+
Qwen2.5-1.5B (4bit)2 GB4 GB+

5.2 环境安装

1

安装 Python 3.10

python.org 下载,安装时务必勾选 "Add Python to PATH"

2

创建虚拟环境

cd D:\
mkdir llm-finetune
cd llm-finetune
python -m venv venv
.\venv\Scripts\Activate.ps1
如果激活报错

先执行:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser,选 Y。

3

安装依赖

python -m pip install --upgrade pip
pip install torch==2.3.1 --index-url https://download.pytorch.org/whl/cu121
pip install "llamafactory[gpu,bitsandbytes]"

验证 PyTorch GPU:python -c "import torch; print(torch.cuda.is_available())",输出 True 即成功。

5.3 数据格式转换

LLaMA-Factory 使用 Sharegpt 格式,需要把百炼的 JSONL 数据转一下:

百炼格式LLaMA-Factory 格式
"role": "system""from": "system"
"role": "user""from": "human"
"role": "assistant""from": "gpt"
顶层 key: "messages"顶层 key: "conversations"
1

转换脚本

python -c "
import json, os, shutil

src = r'D:\work-mode-projects\6a87f3bdaab9df26fba9b0cf\网站备案微调数据.jsonl'
data_dir = r'D:\llm-finetune\venv\lib\site-packages\llamafactory\data'
dst = os.path.join(data_dir, 'website_filing.jsonl')

with open(src, 'r', encoding='utf-8') as f:
    lines = f.readlines()

converted = []
for line in lines:
    obj = json.loads(line.strip())
    conversations = []
    for msg in obj.get('messages', []):
        role = 'system' if msg['role'] == 'system' else ('human' if msg['role'] == 'user' else 'gpt')
        conversations.append({'from': role, 'value': msg['content']})
    converted.append({'conversations': conversations})

with open(dst, 'w', encoding='utf-8') as f:
    for item in converted:
        f.write(json.dumps(item, ensure_ascii=False) + '\n')
print(f'转换完成:{len(converted)} 条')
"
2

注册数据集

data/dataset_info.json 中添加:

{
  "website_filing": {
    "file_name": "website_filing.jsonl",
    "formatting": "sharegpt",
    "columns": {
      "messages": "conversations"
    }
  }
}

5.4 启动 WebUI 并配置训练

1

启动 WebUI

# 设置 HuggingFace 镜像加速(国内必选)
$env:HF_ENDPOINT="https://hf-mirror.com"
llamafactory-cli webui

浏览器自动打开 http://localhost:7860

2

WebUI 配置

设置项推荐值说明
模型名称Qwen2.5-7B-Instruct从 HuggingFace 自动下载
微调方法lora参数高效微调
量化等级44bit QLoRA,省显存(关键!)
量化方法bnbbitsandbytes 量化
计算类型fp16AMD GPU 兼容性好
数据集website_filing注册的数据集名
学习率1e-4标准 LoRA 学习率
训练轮数3小数据量 3 轮
批处理大小2显存小用 2
梯度累积8补偿小 batch(有效 batch=16)
截断长度2048问答数据每条几百 token
验证集比例0.110% 验证集
3

开始训练

点击「开始」按钮,等待训练完成。训练时可以实时看 loss 曲线,持续下降说明有效。训练完成后在「导出」页面导出模型,可导入 Ollama 在 FastGPT 中使用。

模型路径注意

LLaMA-Factory 需要 HuggingFace 格式的模型(.safetensors 文件),不能直接用 Ollama 的 GGUF 格式。模型路径留空,让框架从 HuggingFace 自动下载。