微调不是从头训练

微调是在预训练好的模型上,用你的领域数据再学一轮。全程只更新很小一部分参数(LoRA),所以 8GB 显存也能训 7B 模型。预算有限、又想模型说话带公司味,这是性价比最高的路子。

第一步:准备数据集

LLaMA-Factory 用 alpaca 格式:instruction 是任务描述,input 是输入,output 是期望输出。几十条高质量样本就能看到效果,关键是样本要贴近真实使用场景。

[
  {
    "instruction": "把下面这句话改写成客服口吻",
    "input": "退款要多久到账",
    "output": "亲,退款一般 1-3 个工作日到账,请您耐心等待哦~"
  }
]

把 JSON 存到 data 目录,命名如 my_data.json。中文语料注意用 UTF-8 保存,别用记事本默认的 GBK,不然训练时全是乱码。

第二步:安装并启动

git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .[torch,bitsandbytes]
# 启动 WebUI
llamafactory-cli webui

第三步:界面里训练

  1. 模型名称选 Qwen3-7B 或 Llama-3.1-8B,路径填你本地权重
  2. 训练方法选 LoRA,显存不够就勾 4bit 量化(QLoRA)
  3. 数据集选刚导入的 my_data,学习率 1e-4,跑 3 个 epoch
  4. 显存只有 8G 时:batch size 设 1,开梯度累积 8,效果照样能看
准备数据启动 WebUILoRA训练合并导出
LLaMA-Factory 微调流程

第四步:合并导出

训练完的 LoRA 权重要先合并回原模型才能直接部署。合并后就可以用 vLLM 或 llama.cpp 正常加载了。

# 导出合并后的完整权重
llamafactory-cli export \
  --model_name_or_path Qwen/Qwen3-7B \
  --adapter_name_or_path ./saves/lora/my_data \
  --export_dir ./export/my_model

几个实用提醒

  • 数据质量 > 数据数量:50 条对样本好过 5000 条灌水
  • 过拟合看验证集:跑完对比一下训练前后的输出,别只看训练 loss
  • LoRA 只改风格和知识面,改不了模型底层能力
  • Windows 上 bitsandbytes 装不上就改用纯 LoRA,8G 显存也够
微调的门槛从来不是显卡,而是你有没有一批真实、干净、贴场景的数据。