LoRA 是什么?它为什么能用极少的参数量和显存完成大模型微调,直觉上该怎么理解低秩适配?

模型微调

答案要点 LoRA(Low-Rank Adaptation,低秩适配)= 冻结原模型全部权重,只训练旁路上两个小矩阵 A 和 B 核心假设:微调带来的权重变化量 ΔW 是"低秩"的——信息量远小于矩阵尺寸,用两个瘦长小矩阵相乘就能近似 可训练参数通常只有全量微调的 0.1%~1%,梯度和优化器状态开销随之骤降 训练完可把 B×A 合并回原权重,推理零额外延迟 一个底座模型可配多个 LoRA"插件",按任务热插拔 核心概念 LoRA 是一种参数高效微调方法:把预训练权重 W 整体冻结,在它旁边加一条"旁路"——先用小矩阵 A 把输入降到很低的维度 r,再用小矩阵 B 升回原维度,训练时只更新这两个小矩阵,前向输出是 W·x + B·A·x。 直觉解释(不需要数学推导):微调不是让模型"重新学会说话",而是在已有能力上做小幅调整——好比给西装改袖长,不必重做整件衣服。既然"改动量"本身信息含量低,就没必要用一个和原矩阵一样大的矩阵去存它。感受一下数字:一个 4096×4096 的权重矩阵约 1678 万参数;取秩 r=8 时,LoRA 只需 4096×8 + 8×4096 ≈ 6.5 万参数,约为原来的 0.4%。 省资源到底省在哪 | 显存开销 | 全量微调 | LoRA | |---|---|---| | 模型权重 | 要存 | 要存(但冻结) | | 梯度 | 全部参数 | 只有 A、B | | 优化器状态(Adam 约为参数 2 倍) | 全部参数 | 只有 A、B | 所以全量微调 7B 模型动辄要 80G+ 显存,LoRA 一张 24G 消费级显卡就能跑,配合 4bit 量化(QLoRA)还能更低。 两个工程福利 推理零延迟:训练完把 B·A 加回 W,结构和原模型完全一样,不增加推理开销 多任务热插拔:底座只存一份,每个业务场景一个几十 MB 的 LoRA 文件,随用随换 入门后可以深入:秩 r 与缩放系数 alpha 怎么选、LoRA 该挂在哪些层,以及 QLoRA、DoRA 等变体。

口语版讲法(约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 冻结原权重、只训旁路小矩阵;省的大头是梯度和优化器状态,而且训练完可合并、推理零延迟。

面试官可能的追问

  1. 【概念辨析】有同学说"LoRA 省显存是因为不用加载整个模型",这个理解对吗?LoRA 训练时原模型权重还在不在显存里?到底省掉的是哪部分开销?
  2. 【场景切入】公司只有一张 24G 的 4090,想在 7B 模型上微调一个客服问答助手,你会怎么做?为什么全量微调跑不起来而 LoRA 可以?

同模块相关题目