本文目录导读:
微调大模型(如DeepSeek、Llama、GPT等)是指在一个已经预训练好的通用模型基础上,使用特定领域的数据进一步训练,使其适应特定任务或风格,以下是微调的基本步骤和关键要点:
核心步骤
准备数据
- 格式:通常采用对话格式(如JSONL),包含
instruction(指令)、input(输入,可选)、output(期望输出) - 示例:
{"instruction": "解释相对论", "input": "", "output": "相对论是爱因斯坦提出的..."} - 数量:根据任务复杂度,通常需要数百到数万条高质量样本
选择微调方法
全量微调 (Full Fine-tuning)
- 更新所有模型参数
- 效果好、计算量大(需要多GPU)
- 适合有充足算力的场景
参数高效微调 (PEFT)
- LoRA (Low-Rank Adaptation):只训练少量低秩矩阵,插在原有权重中
- QLoRA:量化+LoRA,可在单张消费级显卡(如RTX 3090)微调70B模型
- Adapters、Prefix Tuning等
选择框架
- Hugging Face Transformers + PEFT:最通用,支持Llama、Mistral等
- DeepSpeed:分布式训练加速
- LLaMA-Factory:国内流行的易用框架
- Unsloth:针对LoRA优化的高效框架,速度快、显存占用低
训练配置
- 学习率:通常1e-4到5e-5(LoRA常用2e-4)
- 批次大小:根据显存调整
- 轮数:2-5轮通常足够,过多易过拟合
- 优化器:AdamW
评估与迭代
- 用验证集检查效果
- 观察loss曲线,避免过拟合
- 人工测试几个典型场景
关键注意事项
- 数据质量 > 数据数量:清洗、去重、确保格式正确
- 防止灾难性遗忘:可混合通用数据(如5%-10%原始预训练数据)
- 基座模型选择:基础版(Base)适合做特定任务,对话版(Chat/Instruct)已有基础对话能力
- 硬件要求:
- 7B模型(如LoRA):单卡24GB显存
- 13B模型(LoRA):单卡48GB或双卡
- 70B模型(QLoRA):单卡48GB+量化
简单示例代码(使用Hugging Face + LoRA)
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
from peft import LoraConfig, get_peft_model, TaskType
from datasets import load_dataset
# 加载模型与tokenizer
model = AutoModelForCausalLM.from_pretrained("模型路径", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("模型路径")
# 配置LoRA
lora_config = LoraConfig(
r=8, lora_alpha=32, target_modules=["q_proj","v_proj"], lora_dropout=0.1
)
model = get_peft_model(model, lora_config)
# 训练参数
args = TrainingArguments(output_dir="./output", per_device_train_batch_size=4,
num_train_epochs=3, learning_rate=2e-4)
# 开始训练(需准备数据集)
# trainer = Trainer(model=model, args=args, train_dataset=dataset)
# trainer.train()
常见误区
- ❌ 认为微调可以纠正模型幻觉:微调不能解决知识不足,应配合RAG
- ❌ 用太多无关数据:领域要高度相关
- ❌ 学习率设置过高:容易炸loss或毁掉原模型
- ❌ 忽视Tokenizer兼容:自定义格式需确保tokenizer正确拼接
如果你有特定的基础模型(如DeepSeek-V2、Llama 3)或具体任务场景,可以进一步给出针对性建议。
标签: 大模型