LoRA 是什么?它为什么能用极少的参数量和显存完成大模型微调,直觉上该怎么理解低秩适配?
模型微调
口语版讲法(约2分钟)
- 一句话定义:冻结原权重,只训旁路两个小矩阵
- 低秩直觉:改衣服不用重做整件西装
- 具体数字:参数量压到千分之四
- 澄清:省的大头是梯度和优化器状态
- 埋钩子:可合并零延迟,QLoRA 再省一截
LoRA 的一句话定义:它是一种参数高效微调方法,把原模型的权重全部冻结,只在旁边加两个小矩阵去学习"变化量",训练开销因此降低一到两个数量级。全称 Low-Rank Adaptation,低秩适配。 直觉上怎么理解"低秩"?我喜欢用改衣服打比方。微调一个预训练模型,不是让它从头学说话,而是在已有能力上做小调整,就像一件西装只需要改改袖长、收收腰,不需要整件重做。既然"改动本身"包含的信息量很小,那就没必要用一个跟原矩阵一样大的矩阵去存这个改动。LoRA 的做法是:原权重 W 不动,旁边并联一条旁路,先用小矩阵 A 把输入压到很低的维度,比如 8 维,再用小矩阵 B 升回去,输出等于原路加旁路,训练时只更新 A 和 B。给个具体数字感受一下:4096 乘 4096 的矩阵有一千六百多万参数,秩取 8 的话,两个小矩阵加起来只有六万多,是原来的千分之四。 那省资源到底省在哪?这里有个高频误区,很多人以为省的是模型权重,其实权重该存还得存,只是不更新了。真正省的是训练特有的开销:梯度和优化器状态。Adam 优化器要为每个可训练参数额外存两份状态,全量微调时这部分比权重本身还大;LoRA 把可训练参数压到百分之一以下,这些开销就跟着消失了。所以全量微调 7B 模型要 80G 显存,LoRA 用一张 24G 的消费级显卡就能跑。 还有两个工程上的甜头值得主动说:一是训练完可以把 B 乘 A 直接合并回原权重,推理时结构和原模型一模一样,零额外延迟;二是一个底座可以配一堆 LoRA 小文件,每个任务几十 MB,热插拔切换。往深了聊,秩 r 怎么选、挂在哪些层效果最好,以及把底座再做 4bit 量化的 QLoRA,都是自然的延伸话题。
关键一句:LoRA 冻结原权重、只训旁路小矩阵;省的大头是梯度和优化器状态,而且训练完可合并、推理零延迟。
面试官可能的追问
- 【概念辨析】有同学说"LoRA 省显存是因为不用加载整个模型",这个理解对吗?LoRA 训练时原模型权重还在不在显存里?到底省掉的是哪部分开销?
- 【场景切入】公司只有一张 24G 的 4090,想在 7B 模型上微调一个客服问答助手,你会怎么做?为什么全量微调跑不起来而 LoRA 可以?