大模型微调-KV Cache和PEFT
KV Cache(键值缓存)是Transformer模型在自回归推理(如文本生成)时,用于提升计算效率的核心优化技术。
其核心原理是:模型在生成每一个新词元(token)时,都需要基于之前所有词元的信息来计算注意力。如果没有缓存,每次生成都需要为所有历史词元重新计算键(Key)和值(Value)矩阵,造成大量重复计算。KV Cache通过将这些计算好的K和V矩阵存储起来,在生成后续词元时直接复用,从而避免了重复计算,显著加快了推理速度。然而,这项技术以空间换时间,会带来显著的显存开销。缓存占用的显存量与模型层数、注意力头数、词元序列长度以及批次大小成正比。
例如,一个7B参数的模型在处理2048长度的序列时,KV缓存可能占用约1GB显存;当序列长度增长或并发请求增多时,显存占用会急剧上升,成为大模型长上下文推理的主要瓶颈之一。因此,工程上常需结合量化(如将缓存精度从FP16降至FP8甚至FP4)、分页注意力(PagedAttention)等技术来优化显存占用和管理。
需要明确的是,KV Cache是一种临时的计算加速机制,并非模型的持久化记忆。一旦推理会话结束,缓存即被释放,模型不会保留这些信息用于下一次对话。
PEFT(参数高效微调)是一种用于微调大型语言模型的高效方法,其核心目标是只更新或新增模型中的一小部分参数,而非调整全部参数(即全参数微调)。这种方法可以大幅降低对计算资源、显存和时间的需求,使得在有限资源下微调大模型成为可能。
PEFT有多种具体实现技术,其中LoRA(低秩适配)是目前最流行的方法之一。
LoRA的核心思想是:保持预训练好的原始模型权重完全冻结(不更新),仅在某些特定的权重矩阵(如注意力模块中的Q、K、V、O矩阵)旁,添加一对可训练的低秩矩阵(通常记为A和B)。在微调过程中,只训练这些新增的、参数量很少的低秩矩阵,让它们学习任务特定的知识。训练完成后,可以将学习到的低秩矩阵合并回原始权重中,得到一个独立的、可用于推理的模型,从而避免推理时的额外延迟。
LoRA的关键超参数包括秩(r)和缩放参数(alpha)。
秩(r)决定了低秩矩阵的大小,是控制模型容量与过拟合风险之间平衡的关键,通常建议从一个较小的值(如8或16)开始尝试。
缩放参数(alpha)通常与r成比例设置(如alpha = 2r),其比值(alpha/r)控制着低秩更新对原始权重的影响强度。
LoRA高效微调如何避免过拟合
减小r或增加数据集大小可以帮助减少过拟合。还可以尝试增加优化器的权重衰减率或 LoRA层的dropout值。
为了获得最佳性能,通常需要通过实验调整这些超参数。
