[ PROMPT_NODE_22428 ]
Fine Tuning PEFT 高级用法
[ SKILL_DOCUMENTATION ]
# PEFT 高级用法指南
## 高级 LoRA 变体
### DoRA (权重分解低秩自适应)
DoRA 将权重分解为幅度和方向分量,通常比标准 LoRA 取得更好的结果:
python
from peft import LoraConfig
dora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
use_dora=True, # 启用 DoRA
task_type="CAUSAL_LM"
)
model = get_peft_model(model, dora_config)
**何时使用 DoRA**:
- 在指令遵循任务上持续优于 LoRA
- 由于幅度向量的存在,显存占用略高(约 10%)
- 最适合对质量要求极高的微调场景
### AdaLoRA (自适应秩)
根据重要性自动调整每层的秩:
python
from peft import AdaLoraConfig
adalora_config = AdaLoraConfig(
init_r=64, # 初始秩
target_r=16, # 目标平均秩
tinit=200, # 预热步数
tfinal=1000, # 最终剪枝步数
deltaT=10, # 秩更新频率
beta1=0.85,
beta2=0.85,
orth_reg_weight=0.5, # 正交正则化权重
target_modules=["q_proj", "v_proj"],
task_type="CAUSAL_LM"
)
**优势**:
- 为重要层分配更高的秩
- 在保持质量的同时减少总参数量
- 适合探索最优的秩分布
### LoRA+ (非对称学习率)
为 A 和 B 矩阵设置不同的学习率:
python
from peft import LoraConfig
# LoRA+ 对 B 矩阵使用更高的学习率
lora_plus_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules="all-linear",
use_rslora=True, # 秩稳定 LoRA (相关技术)
)
# LoRA+ 的手动实现
from torch.optim import AdamW
# 分组参数
lora_A_params = [p for n, p in model.named_parameters() if "lora_A" in n]
lora_B_params = [p for n, p in model.named_parameters() if "lora_B" in n]
optimizer = AdamW([
{"params": lora_A_params, "lr": 1e-4},
{"params": lora_B_params, "lr": 1e-3}, # B 矩阵学习率高 10 倍
])
### rsLoRA (秩稳定 LoRA)
缩放 LoRA 输出以稳定不同秩下的训练:
python
lora_config = LoraConfig(
r=64,
lora_alpha=64,
use_rslora=True, # 启用秩稳定缩放
target_modules="all-linear"
)
**何时使用**:
- 当尝试不同秩时
- 有助于在不同秩值下保持一致的行为
- 推荐在 r > 32 时使用
## LoftQ (LoRA