大模型微调学习
一、大模型微调的主要步骤
-
环境准备
-
安装必要库:
transformers,datasets,peft(lora训练框架),swanlab(用于可视化训练过程)等。 -
transformers加载预训练模型。
-
-
数据集构造
-
先查模型的特定的指令微调格式,按格式构造数据。
-
每条样本包含
instruction、input和output。 -
适配模型的 chat template
-
-
数据预处理
-
使用 Tokenizer 将文本转为模型输入格式。
-
设置
labels,将非目标部分(如 instruction)设为-100以忽略其 loss防止模型预测这部分。 -
控制最大长度(如 1024 tokens)并截断。
-
-
微调配置(LoRA)
-
使用
peft库配置 LoRA 参数:-
r=8,lora_alpha=32,target_modules指定微调层(如q_proj,v_proj)。
-
-
仅训练插入的低秩矩阵,冻结原模型参数。
-
启用
gradient_checkpointing=True降低显存占用。
-
-
训练与监控
-
使用
Trainer进行训练,配置TrainingArguments。 -
使用
SwanLabCallback监控训练过程(loss、GPU 利用率等)。 -
保存 LoRA 权重(非完整模型)。
-
-
推理与合并
-
加载原模型和 LoRA 权重。
-
使用
PeftModel.from_pretrained()合并权重。 -
使用
apply_chat_template()构造输入,进行推理测试。
-
三、lora高效微调的优缺点分析
✅ 优点
-
高效性:LoRA 只训练少量参数,显存占用低,训练速度快。
-
保留原模型能力:原模型参数不变,避免灾难性遗忘。
-
部署灵活:LoRA 权重可插拔,便于多任务切换。
-
推理无损:LoRA 权重可合并回原模型,推理速度无显著下降。
❌ 缺点
-
表达能力有限:相比全量微调,LoRA 表达能力受限,复杂任务可能效果不佳。
-
依赖原模型质量:若基座模型能力弱,LoRA 提升空间有限。
-
调试复杂:需适配 chat template、tokenizer、数据格式等,调试成本高。
-
任务泛化差:LoRA 模型对未见过的新任务泛化能力较弱。
四、lora技术局限时的备选方案(网上找的)
| 方法 | 简介 | 适用场景 |
|---|---|---|
| 全量微调(Full Fine-tuning) | 训练所有参数,效果最强 | 数据充足、算力充足、任务复杂 |
| QLoRA | 结合 4bit 量化的 LoRA,显存占用更低 | 显存极度受限,仍想微调大模型 |
| Prompt Tuning / P-Tuning v2 | 只训练 prompt 参数,适合小模型 | 轻量级任务、快速验证 |
| Adapter Tuning | 插入小型网络模块,类似 LoRA | 与 LoRA 类似,但结构不同 |
| RAG(检索增强生成) | 不微调模型,外挂知识库 | 知识更新频繁、无需微调的场景 |
| In-Context Learning(ICL) | 不训练,只通过 prompt 引导 | 零样本/少样本任务,快速试错 |
更多推荐


所有评论(0)