Unsloth微调教程:用LoRA训练自己的AI模型

📘 AI教程 💬 🔥 Trending 发布者: leakey
Unsloth微调教程:用LoRA训练自己的AI模型

🩺 摘要

想让AI懂你的业务——客服回复风格、代码规范、产品知识。但微调(fine-tuning)又慢又贵,听说一个模型要几万块。Unsloth说:几百块、几张图搞定。

📝 详情

Unsloth是什么

Unsloth是一个让大模型微调变得又快又省显存的开源工具。

它的核心卖点: - 2倍速度提升(比原生HuggingFace) - 内存减少50%(同样显存能微调更大的模型) - 质量不降(精度几乎无损)

GitHub 28000+星,是目前最流行的微调工具。

环境准备

pip install unsloth
# 或者用conda(推荐)
conda create -n unsloth python=3.11
conda activate unsloth
pip install unsloth

需要一块至少12GB显存的显卡。没有的话可以用Google Colab免费版。

准备数据

微调数据格式是JSONL,每条一个对话:

{"instruction": "用客服语气回复客户投诉", "input": "我买的手机用了三天就死机了,气死了!", "output": "非常抱歉给您带来不好的体验!请私信我您的订单号,我会尽快为您安排换货处理。"}
{"instruction": "用客服语气回复客户投诉", "input": "快递还没到,都等了五天了", "output": "让您久等了!我马上帮您查询物流进度。方便提供订单号吗?"}

至少准备50-100条高质量的对话。数据质量决定模型效果。

开始微调

from unsloth import FastLanguageModel
import torch

# 加载模型(自动应用优化)
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="unsloth/Qwen2.5-7B-bnb-4bit",
    max_seq_length=2048,
    dtype=None,
    load_in_4bit=True,
)

# 添加LoRA适配器(只训练一小部分参数)
model = FastLanguageModel.get_peft_model(
    model,
    r=16,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
    lora_alpha=16,
    lora_dropout=0,
    bias="none",
    use_gradient_checkpointing="unsloth",
)

# 开始训练
from transformers import TrainingArguments
from trl import SFTTrainer

trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=dataset,
    args=TrainingArguments(
        per_device_train_batch_size=2,
        gradient_accumulation_steps=4,
        num_train_epochs=3,
        learning_rate=2e-4,
        output_dir="./outputs",
    ),
)
trainer.train()

# 保存模型
model.save_pretrained("./my-custom-model")
tokenizer.save_pretrained("./my-custom-model")

在RTX 4090上,7B模型全流程大约跑1-2小时。

测试效果

model, tokenizer = FastLanguageModel.from_pretrained("./my-custom-model")

prompt = "用客服语气回复:我要退货!"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=128)
print(tokenizer.decode(outputs[0]))

踩坑总结

  1. 数据治理比训练更重要 — 100条高质量数据 > 10000条低质量数据
  2. 不要期待奇迹 — 微调是让模型更懂某个领域,不是让模型学会它本来不会的东西
  3. 过拟合很常见 — 如果训练集只有几十条,模型可能会背答案而不是理解。用evaluation数据验证
  4. LoRA就够了 — 大部分场景不用全量微调。LoRA效果好、速度快、文件小