开源模型微调完整实操教程
·
目录
方案 B:极简可运行 Python 代码(QLoRA 模板)
开源模型微调完整实操教程
主流分文本大模型(聊天 / 文案)QLoRA 微调、SD 绘画 LoRA 微调两大类,普通人优先轻量化微调,不用高端显卡。全程分通用逻辑、环境、数据集、训练、测试、部署,附带新手零代码和极简代码两套方案。
一、核心概念区分(必看懂)
1. 三种微调方式
- 全量微调:更新模型全部权重。显存要求极高(7B 模型≥40G 显存),个人基本不用;优点改动最强,缺点易遗忘原有知识、吃显存。
- LoRA:冻结主模型,只训练少量低秩矩阵,最终产出几十 MB 小文件。显存友好,不会破坏底座通用能力。
- QLoRA(个人首选):把底座模型 4/8bit 量化压缩,显存再减半。8G 显卡就能微调 7B 大模型,适配绝大多数个人电脑 / 云主机。
普通用户统一选:QLoRA(文字)、普通 LoRA(绘画)。
2. 必备组件
- 底座开源模型:Qwen、Llama3、GLM、MiniCPM(中文优先选阿里 Qwen)
- 工具链:Hugging Face Transformers、PEFT、BitsAndBytes(量化)、Accelerate、Datasets
- 硬件:N 卡(NVIDIA),AMD 兼容性差;无本地显卡用云端 AutoDL/Colab。
二、前期准备
2.1 硬件要求(本地)
文本大模型 QLoRA
- 最低:RTX 4060 8G(4bit 量化跑 7B)
- 舒适:16G/24G 显存(3090/4090),可跑 13B
- 内存≥32G,固态硬盘预留 100G+(模型文件体积大)
Stable Diffusion 绘画 LoRA
最低 8G 显存,12G 以上流畅。
2.2 环境安装(两种方式)
方式 1:新手零代码(推荐)
文本微调:LLaMA Factory(Windows 一键包、网页可视化,不用写代码) 绘画微调:Kohya_ss(SD LoRA 行业标准工具)
方式 2:手动 Python 环境(适合会编程)
- 系统推荐 Ubuntu,Windows 用 WSL2;Python 3.10 最佳
- 安装 NVIDIA 驱动、CUDA、cuDNN
- 依赖一键安装命令
bash
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install transformers peft accelerate bitsandbytes datasets trl pandas sentencepiece
三、通用完整微调全流程(文字大模型)
步骤 1:确定任务 + 挑选底座模型
常见选型:
表格
| 使用场景 | 推荐底座 |
|---|---|
| 中文聊天、人设定制、办公话术 | Qwen2-7B-Instruct、MiniCPM-2B/7B |
| 多语言、英文需求 | Llama 3 7B |
| 超长文档 | GLM4-9B |
下载渠道:Hugging Face、ModelScope 魔搭(国内下载更快)。
步骤 2:制作 & 清洗训练数据集(决定最终效果)
标准对话格式(Alpaca 通用格式)
JSON 文件,样例:
json
[
{
"instruction": "今天天气怎么样",
"input": "",
"output": "今日晴朗,温度25度,适合出门"
},
{
"instruction": "帮我写请假条",
"input": "请假1天,事假",
"output": "尊敬领导:因私事需请假一天……"
}
]
数据规则
- 量级:LoRA 微调200~3000 条高质量数据足够,不用几万条;质量>数量。
- 清洗:删除重复、乱码、错别字、无关内容;回复风格统一。
- 划分:训练集 80%、验证集 20%。验证集用来判断是否过拟合。
步骤 3:QLoRA 关键超参(新手直接抄)
plaintext
# 量化配置
load_in_4bit=True
bnb_4bit_use_double_quant=True
bnb_4bit_quant_type="nf4"
# LoRA参数
lora_r=8 # 秩,越大拟合能力越强,容易过拟合,一般4/8/16
lora_alpha=16
lora_target_modules=["q_proj","v_proj"] # qwen/llama通用目标层
# 训练参数
learning_rate=2e-4 ~ 3e-4
epoch=3~5
batch_size=2/4(显存越小数字越小)
max_seq_length=1024/2048
避坑:学习率太高模型崩,太低学不动;epoch 过多会过拟合(只会背训练集)。
步骤 4:两种训练实操
方案 A:LLaMA Factory 零代码(最省事)
- 下载 LLaMA Factory 整合包,启动网页 UI
- 模型列表选择底座(Qwen2-7B-Instruct)
- 微调方式选择:QLoRA
- 上传整理好的 JSON 数据集
- 参数保持默认,只改 epoch、batch size
- 开启训练,实时查看 loss(损失值平稳下降代表正常)
- 训练结束自动保存 LoRA 文件夹(体积几十 MB)
方案 B:极简可运行 Python 代码(QLoRA 模板)
基于 Hugging Face 生态,精简核心代码:
python
运行
import torch
from datasets import load_dataset
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model
from accelerate import Accelerator
# 1. 4bit量化配置
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
# 2. 加载底座模型+分词器
model_name = "Qwen/Qwen2-7B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name, quantization_config=bnb_config, device_map="auto"
)
# 3. LoRA配置
lora_config = LoraConfig(
r=8, lora_alpha=16, target_modules=["q_proj","v_proj"],
lora_dropout=0.05, bias="none", task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
# 4. 加载数据集、格式化、分词
dataset = load_dataset("json", data_files="train_data.json")
# 自行写函数把instruction/input/output拼接成模型prompt格式
# 分词、padding、截断
# 5. Trainer训练、保存LoRA权重
from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(
output_dir="./lora_output",
per_device_train_batch_size=2,
learning_rate=2e-4,
num_train_epochs=4,
logging_steps=10,
save_strategy="epoch"
)
trainer = Trainer(model=model, args=training_args, tokenizer=tokenizer, train_dataset=dataset["train"])
trainer.train()
model.save_pretrained("./qwen_lora_final")
步骤 5:测试与过拟合判断
- 用训练集没有见过的新问题测试。
- 常见问题:
- 只会复制训练集文字:过拟合,减少 epoch、降低学习率、扩充多样化数据。
- 完全不改风格:数据太少、lora_r 太小、训练步数不足。
- 通用能力变弱:不要全量微调,坚持 QLoRA。
步骤 6:推理使用两种方式
- 分开加载(推荐):底座模型 + LoRA 小文件,用 Ollama、Text Generation WebUI、Transformers 加载。不用合并,方便随时切换不同 LoRA。
- 权重合并:需要单独完整模型,用 peft 工具把 LoRA 融合进底座,得到完整大模型(体积回到原始大小)。
四、AI 绘画 SD LoRA 微调极简流程(补充)
- 收集图片:角色 / 画风图 20~100 张,统一分辨率 512/768,全部打标签(caption)。
- 用 Kohya_ss,选择 SD 底座,开启 LoRA 训练。
- 参数:lr=1e-4,epoch 6~12。
- 训练完成产出.safetensors LoRA 文件,在 SD WebUI 加载绘图。
五、无本地显卡:云端微调方案
- AutoDL(国内首选):按量租 RTX4090,3~8 元 / 小时,预装全部环境,打开 Jupyter/LLaMA Factory 网页直接跑。
- Google Colab:免费 T4 GPU,限时使用,适合小模型临时测试。
- 阿里云 / 腾讯云 GPU:适合长时间批量训练。
操作:云端开机→上传模型、数据集→运行训练→下载 LoRA 文件到本地。
六、重要避坑清单
- 不要全量微调 7B 及以上模型,个人算力扛不住;QLoRA 是最优解。
- 数据格式必须严格统一,格式混乱 = 训练无效。
- loss 震荡不降:学习率不对、数据集脏、batch 太小。
- Windows 容易爆显存:开启 4bit 量化,降低 batch、缩短上下文长度。
- 国内下载 Hugging Face 慢:用 ModelScope、hf-mirror 镜像加速。
- 不需要多次重复训练底座,LoRA 可以反复叠加训练。
七、补充进阶:微调后部署
- 本地调用:Ollama 接入 LoRA,一键本地对话。
- 网页演示:Gradio/Streamlit 快速做在线网页。
- API 服务:FastAPI 封装接口,可对接软件、小程序、机器人。
- RAG + 微调组合:微调改人设语气,RAG 负责知识库查资料,搭配效果最强。
更多推荐


所有评论(0)