先看现象。用 r=64、alpha=16 训练角色风格,八张卡的显存吃得很多,效果却不如别人 r=8 的模型,loss 曲线也更抖。
这类报错背后常见的原因有几处,逐个排除就行。r 越大可训练参数越多,小数据集上更容易过拟合。也可能是alpha 与 r 的比例决定缩放强度,配比失衡会让更新过猛。
少数情况下是学习率沿用了全参微调的设定,对 LoRA 来说偏高。
不容易想到的是,目标层选得太少,容量不足反而怪到 r 头上。
动手时先把 r 降到常用档位做对照实验
cfg = LoraConfig(r=8, lora_alpha=16, target_modules=['q_proj','v_proj'], task_type='CAUSAL_LM')
固定 alpha 与 r 的比例为二比一
cfg = LoraConfig(r=8, lora_alpha=16, lora_dropout=0.05)
随后把学习率降到 LoRA 常见量级
python train.py --learning_rate 1e-4
剩下的就是记录每组参数的可训练参数量与验证 loss
print({'r': 8, 'trainable': n, 'eval_loss': l})
怎么算真的好了,看的是同一批现象。验证集 loss 稳定下降,生成风格符合预期,可训练参数占比控制在合理范围,显存占用明显下降。
提醒一点。r 和 alpha 不是越大越好,数据集只有几百条时大 r 几乎必然过拟合,先用小 r 跑通再考虑加容量。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。