309 字
1 分钟
Fine-tuning 与模型微调技术
一、为什么需要 Fine-tuning
1.1 预训练 vs 微调
flowchart LR
A[大规模预训练] --> B[通用能力]
B --> C[垂直领域微调]
C --> D[专业能力]
| 阶段 | 目标 | 资源需求 |
|---|---|---|
| 预训练 | 学习通用知识 | 万卡 GPU 集群 |
| SFT 有监督微调 | 指令遵循 | 单卡~多卡 |
| RLHF | 对齐人类偏好 | 标注数据 |
| DPO/PO 优化 | 直接偏好优化 | 偏好数据 |
1.2 全量微调 vs 参数高效微调
# 全量微调 - 更新所有参数model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b")for param in model.parameters(): param.requires_grad = True
# LoRA - 只更新低秩矩阵model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b")for param in model.parameters(): param.requires_grad = False
# 只训练 LoRA 参数lora_config = LoraConfig( r=8, lora_alpha=16, target_modules=["q_proj", "v_proj"])model = get_peft_model(base_model, lora_config)二、LoRA 原理
2.1 低秩矩阵分解
# LoRA 核心思想# W ∈ R^(d×k) 原始权重# W' = W + ΔW = W + BA# B ∈ R^(d×r), A ∈ R^(r×k), r << min(d, k)
class LoRALinear(nn.Module): def __init__(self, in_features, out_features, rank=8): super().__init__() self.original = nn.Linear(in_features, out_features, bias=False) # LoRA 矩阵 self.lora_A = nn.Parameter(torch.randn(in_features, rank)) self.lora_B = nn.Parameter(torch.zeros(rank, out_features))
def forward(self, x): return self.original(x) + x @ self.lora_A @ self.lora_B2.2 训练效率对比
| 方法 | 参数量 | GPU 显存 | 训练时间 |
|---|---|---|---|
| 全量微调 7B | 7B | 80GB+ | 数天 |
| LoRA 7B | 数十MB | 20GB | 数小时 |
| QLoRA 7B | 数十MB | 8GB | 数小时 |
三、QLoRA 量化
3.1 量化原理
# 4-bit NormalFloat 量化class NF4Quant: def __init__(self, bits=4): self.bits = bits
def quantize(self, weights): # 1. 计算 absmax absmax = weights.abs().max() # 2. 归一化到 [-1, 1] normalized = weights / absmax # 3. 量化到 4-bit qweight = quantize_to_nf4(normalized) return qweight, absmax3.2 QLoRA 训练
# 使用 bitsandbytes 量化from transformers import BitsAndBytesConfig
quantization_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16)
model = AutoModelForCausalLM.from_pretrained( "meta-llama/Llama-2-7b", quantization_config=quantization_config)
# 添加 LoRAmodel = get_peft_model(model, lora_config)四、Adapter Tuning
4.1 Adapter 结构
class Adapter(nn.Module): def __init__(self, d_model, adapter_size=64): super().__init__() self.down_proj = nn.Linear(d_model, adapter_size) self.up_proj = nn.Linear(adapter_size, d_model) self.act = nn.ReLU()
def forward(self, x): return x + self.up_proj(self.act(self.down_proj(x)))4.2 多 Adapter 混合
# 为不同任务训练不同 Adapteradapters = { "legal": legal_adapter, "medical": medical_adapter, "code": code_adapter}
def use_adapter(model, task): model.set_adapter(task) return model.generate(**inputs)五、Prefix Tuning
5.1 前缀调优
# 可学习的前缀向量class PrefixTuning(nn.Module): def __init__(self, num_layers, hidden_size, prefix_len=10): super().__init__() # 可学习的前缀 self.prefix = nn.Parameter( torch.randn(prefix_len, 2, hidden_size) )
def forward(self, input_ids): batch_size = input_ids.shape[0] # 拼接前缀 prefix = self.prefix.expand(batch_size, -1, -1) return prefix, input_ids5.2 Prefix-tuning vs LoRA
| 特性 | Prefix Tuning | LoRA |
|---|---|---|
| 训练参数 | 更少 | 中等 |
| 效果 | 略差 | 持平全量微调 |
| 推理开销 | 增加序列长度 | 无额外开销 |
| 实现复杂度 | 高 | 低 |
六、训练实战
6.1 数据准备
# 指令微调数据格式{ "instruction": "将以下句子翻译成英文", "input": "你好,世界", "output": "Hello, world"}
# alpaca 格式{ "instruction": "...", "input": "...", "output": "..."}6.2 训练配置
# DeepSpeed 配置trainer: per_device_train_batch_size: 4 gradient_accumulation_steps: 4 gradient_checkpointing: true fp16: false bf16: true max_steps: 1000 warmup_steps: 100 logging_steps: 10七、总结
| 方法 | 参数量 | 效果 | 适用场景 |
|---|---|---|---|
| 全量微调 | 全部 | 最好 | 资源充足 |
| LoRA | ~1% | 接近全量 | 资源有限 |
| QLoRA | ~0.5% | 良好 | 单卡可用 |
| Adapter | ~1-5% | 良好 | 多任务切换 |
| Prefix | <1% | 一般 | 极低成本 |
支持与分享
如果这篇文章对你有帮助,欢迎支持作者或分享给更多人
Fine-tuning 与模型微调技术
https://blog.souloss.com/posts/ai-engineering/ai-engineering-fine-tuning/ 部分信息可能已经过时
相关文章 智能推荐
1
定制专属模型:微调实战指南
AI 定制专属模型——微调实战指南
2
微调实战技巧与数据工程
AI 深入解析 LLM 微调的数据准备、训练技巧、灾难性遗忘应对与模型评估实战经验。
3
RLHF 与 DPO 偏好对齐技术
AI 深入解析 RLHF、PPO、Reward Model 与 DPO 的原理与实践,探讨如何让 LLM 输出更符合人类偏好。
4
DPO:绕过奖励模型的直接偏好优化
AI 深度解读 Direct Preference Optimization (2023)——绕过 reward model 直接优化人类偏好
5
LLM Fine-tuning 基础详解
AI 深入解析 LLM Fine-tuning 技术——全量微调、LoRA、QLoRA、PTuning 的原理、对比与实践。






