导图社区 LLM微调、优化、压缩、对齐理论
LLM的微调、优化、压缩和对齐是提升模型性能、降低资源消耗、增强模型适用性和可靠性的重要手段。这些方法相互补充,共同推动LLM技术的发展和应用。
编辑于2024-07-14 21:13:49LLM理论
微调
不修改参数的微调
Prefix-tuning
每一层都有一个可学习前缀
Prompt-tuning
在input embedding前面加一个prompt embedding
修改模型参数的微调
Adapter
在layer中增加Adapter层,先down project再up project
只训练Adapter层
LORA
权重矩阵增加一个旁路,A\B,rank=r
W=W+AB
只训练两个低rank的旁路矩阵A和B
AdaLoRA
自适应的选择每一层的rank
Compacter
使用克罗内克分解共享不同层的Adapter权重
FacT
参数分解进一步减少可微调的参数。
权重内部的冗余:密集权重矩阵可以被分解(例如,奇异值分解SVD),并由低秩因子逼近。
权重之间的冗余:模型可以使用跨层共享权重而获得良好的性能。
优化
序列优化
GD
SGD
MiniBATCH SGD
随机坐标下降法(SCD)
只更新一个坐标
随机分块坐标下降法(SBCD)
将参数空间划分为多个块,然后在每次迭代中随机选择一个块的坐标,并对该块进行更新。
随机平均梯度法(SAG)
利用了累积梯度,适用于凸优化
随机方差缩减梯度法(SVRG)
SVRG算法通过计算一个全局的精确梯度(在所有数据点上)和一个随机梯度(在单个或小批量数据点上)的组合来减少每次迭代中的梯度估计方差。
AdaGrad
自适应学习率
RMSProp
AdaGrad改进
Adam
RMSProp+动量
分布式优化
数据并行
Distributed SGD
Pytorch的三种数据并行方式
DP
即Distributed SGD
DDP
使用RingAllReduce,传播梯度
FSDP
参数、梯度、优化器状态均并行
通信频次优化算法
本地学习
LocalSGD/PR-SGD
不立即更新模型,将每个节点的局部梯度用于更新节点自己的模型
每隔一定的迭代次数,会将所有节点的模型进行平均,然后从这个平均模型重新开始训练
SCOPE
PS架构,独立计算梯度,并汇总到参数服务器
pSCOPE
近端SCOPE(pSCOPE),用于分布式稀疏学习中的L1正则化
大批量学习:LARS/LAMB、SNGD、SNGM
批量越大、通信次数越少
盲目增大批量会导致模型泛化性能下降
LARS
逐层自适应学习率,用于ResNet
LAMB
逐层自适应学习率、权重衰减的自适应调整
SNGD/SNGM
归一化梯度、使用动量
通信数量优化算法
EF-signSGD
基于误差反馈地符号SGD
符号SGD只保留正负号、丢弃梯度大小
梯度稀疏算法sparsifiedSGD
压缩梯度,只传输top-k个条目
将未发送地梯度保留,为下一次的更新方向提供修正
DGC
动量校正、梯度裁剪、动量因子masking、预热warmup训练
DEF
随机块梯度稀疏化,RBGS,这是一种与ring-allreduce兼容且计算效率高的梯度压缩方法
新的分离式误差反馈(Detached Error Feedback, DEF)算法
GMC/GMC+
全局动量压缩
通信频次、数量组合算法
Qsparse-local-SGD
结合了梯度的量化、稀疏化和局部计算
过误差补偿机制来跟踪真实梯度与压缩梯度之间的差异
CSER
错误重置、部分同步、Nesterov动量
通信架构优化算法
PS参数服务器
存在通信拥塞问题
RingAllReduce(RA)
GPU之间构成环路连接
DPSGD
去中心化
DecentLaM
新的分布式大批量动量SGD算法
旨在消除DmSGD中的动量引起的偏差
模型并行
张量并行
层内切分
Megatron-LM
流水线并行
层间切分
GPipe
分阶段
使用maco-batch,减少气泡时间
重计算
1F1B
前向和反向交替计算,进一步减少气泡时间
PipeDream
权重隐藏:每个流水线阶段保留多个权重的版本,前向传播时使用当前流水线阶段最新的权重版本,反向传播时使用对应的前向传播的权重版本;
垂直同步:流水线阶段间除了传递激活/梯度,还传递存储的权重版本,使得每个小批量在不同流水线阶段之间均使用相同的权重版本
混合并行MPDP
DeepSpeedZeRO
Zero 1:优化器状态
Zero 2: 优化器状态+梯度
Zero 3:优化器状态+梯度+参数
Megatron-LM
流水线、张量、数据混合并行/PP\TP\DP
自动并行
根据模型和运行环境自动选择最优并行策略
FlexFlow:马尔可夫链蒙特卡洛法
整数规划
DNN-Partitioning
动态规划
Galvatron
混合方法
Alpa
UniAP
压缩
剪枝baseline:PFEC
计算每个滤波器的L1范数,选择L1范数最小的m个filter裁剪
Deep-Compression
剪枝+量化+霍夫曼编码
量化优点
节省内存
加速计算
保持精度
LQ-Net
量化器和DNN联合训练
任意位宽量化
快速推理
QLoRA
4bit量化 NF4
double量化
Paged Optimizers
ALBERT
Embedding矩阵分解
跨层参数共享
LLM.int8()
混合精度
离群点更高的量化精度
SpQR
混合精度
离群点16比特
减小分组大小
DepGraph
构建网络结构的依赖图,对参数进行分组,采用分组剪枝
SmoothQuant
把输入和权重当做整体量化
激活平滑:由于大型语言模型的激活值中存在异常值(outliers),直接量化会导致较大的量化误差和准确性下降。SmoothQuant通过一种数学上等价的变换,将量化难度从激活值迁移到权重,从而平滑激活值的分布。
引入缩放变换参数
OmniQuant
引入LET模块(Learnable Equivalent Transformation ),把SmoothQuant的变换参数变为可学习的参数
引入LWC模块(Learnable Weight Clipping),把量化字典的参数变为可学习的截断参数
采用模型块的重构误差为优化目标,使用梯度下降算法优化变换参数和量化字典参数
AffineQuant
扩展缩放变换参数到仿射变换参数(Affine Transformation),进一步减小量化误差
GPTQ
子主题
ZeroQuant
硬件友好的细粒度量化
layer-by-layer蒸馏
DSQ/LSQ
AWQ
对齐
RM
建模人类偏好
每个token输出一个reward分数
RLHF
PPO算法优化模型
加载4个模型Actor、Critic、Reference和Reward模型
ILQL
离线强化学习
RAFT
DPO
基于监督学习的对齐方法