全参数微调FT
优势:
- 能适应新数据分布
劣势:
- 灾难性遗忘/泛化性差
- 成本高
高效微调PEFT
1.添加额外参数-adapters:在FeedForword后面添加
- 优点: 仅4%微调,就可以和fine-tuning相当
- 缺点:参数增加
Q:why放在FeedForword后面添加?
- 在决策层放比较make sense
- 比较简单
- 实验效果好
2.soft-prompts/隐式提升
对每一层加前缀微调,比如:prefix-tuning
3.重参数化-LoRA(低秩适配器)
paper: LoRA: Low-Rank Adaptation of Large Language Models[2106.09685]
dd–>dr × r*d
(r为秩)
思路源于SVD原理
把秩当成一个超参,让模型自己去学习,r一般取1,2,4,8,64等
r较小时,我们提取的是δ中信息最丰富的维度,信息精炼
r较大时,低秩近似逼近δ,噪声比较大
LoRA的 一个简单的视频教程:
视频:https://www.bilibili.com/video/BV1wX4y1s7an
How? 构建数据集
经验:50~100条就可以微调
比如,指令微调数据格式:
[{
“instruction”:“”
“input”:“”,
“output”:“”
}]
注意要点:
- 1)指令完整性
- 2)数据一致性
- 3)注意过多拒绝
- 4)多样性(平衡性)
- 5)注意token限制
- 6)注意数据格式
调参经验:
- 学习率e-4/e-5就行
训练方案:
多卡训练:deepspeed
offload
- 计算量低的放在cpu上,参数更新可以放在cpu上
- 充分利用cpu&GPU
推理加速方案:
vLLm:多并发处理,多进程
FastLLM:显存下降30%,速度提升20%,1000tokens/s
llama.cpp