跳转至

P6-10.5 补充学习:高效调整方式的约束

Section ID: P6-10.5 Version: v2026.07.26

副标题:adapter、LoRA、QLoRA 如何在追加结构、小变化分、内存约束上分开

在 P6-10.4 中,我们先看了 LoRA 这个名字,以及 low-rank 调整分的规模感。现在需要把文档和课程中经常一起出现的 adapter、LoRA、QLoRA 区分开,不把它们混成同一个东西。这些名字是在 先选择了微调轴之后 再次分开的高效调整选项。

本节不长时间追随公式,而是把重点放在:按 追加结构、小变化分、内存约束 中首先想减少什么来阅读这些名字。

高效调整方式分开的约束

  • adapter、LoRA、QLoRA 在哪个层位上不同?
  • 知道 LoRA 之后,可以把 QLoRA 看成同一个东西吗?
  • 在什么约束场景中应该先想到哪个名字?

名字相似的调整方式,首先要按约束场景分开。如果微调和 LoRA 的大差异是 要多重地调整模型,adapter、LoRA、QLoRA 的细节差异则更接近 首先要减少什么:追加结构、小变化分,还是内存约束。也就是说,这里再次要问的不是 要不要做微调,而是 如果已经选择了微调轴,在什么约束场景中应该想到哪种高效调整名称。

核心不是 名字很像,而是 每种方式试图让什么变得不那么重。数据设计和运营判断,是在这个区分之上再叠加的另一个问题。

为什么在选择地图之后需要区分这些名字

读到 P6-9.2,我们已经抓住了 需要一种更轻地适应大型基础模型的方法 这个大轴。读到 P6-10.3,我们又先分辨过 现在的问题是否真的应该先选择微调轴。P6-10.4 中,我们也补上了 LoRA 的 low-rank 不是贴在整个模型大小上,而是贴在小变化分表示上的感觉。

但一开始读真实资料,很快又会在 那个轻量方式到底是什么 这里变模糊。如果 adapter、LoRA、QLoRA 出现在同一段里,就容易把这三个词当成 几个差不多的新技术名字。

如果把这三个名字读成同一组,后面的章节会继续混乱。要教什么 和 怎样不那么重地调整 会混在一起;因为内存约束而应该看 QLoRA 的场景,会被简单的 LoRA 说明带过;adapter 和 LoRA 的结构差异也会被感觉成 反正都是类似优化。

因此,这个补充学习不是打断主线的名字罗列,而是在看完选择地图之后,帮助读者抓住 继续深入微调侧时需要的细部区分。这里在微调轴内部区分 adapter、LoRA、QLoRA 分别想减少什么。也就是把结构差异、变化分学习、内存约束拆成不同问题的阶段。

换句话说,这里要留下的结果不是 知道更多名字,而是 选择微调侧之后读文档时,更不容易混淆什么约束场景中会出现哪个名字。当运营约束变大时,哪种高效调整方式更现实,后面的运营章节会在这个区分之上继续看成本、内存和实验轮转数。

高效调整名称和约束场景的区分

比起先背三个名字,更安全的是先区分当前卡住的是 追加模块结构、小变化分学习,还是 内存约束。

首先看到的约束场景 首先想到的名字 为什么这样分开
想保持基础模型,只把各任务适应分开管理 比较 adapter 或 LoRA 两者都不想大规模重新训练整个模型,但追加结构的位置不同。
GPU 内存太紧,无法直接处理整个模型 先检查 QLoRA 不只是小变化分学习,如何用更轻表示处理基础模型也变得重要。
需要改变 rank,比较成本和表达力的平衡 LoRA 细部比较 现在的瓶颈很可能不是结构差异,而是变化分规模和实验资源的平衡。

先抓住这个表,再读下面的 adapter、LoRA、QLoRA 说明,就能把高效调整方式读成 按约束场景选择的标准,而不是 名字记忆。

adapter 和 LoRA 有什么不同

LoRA 和 adapter 都属于 不想大规模重新训练整个基础模型 的路线。但它们不是同一种方式。

方式 入门直观
adapter 在层与层之间放入小的追加模块来调整
LoRA 学习添加到已有大权重上的小变化分
QLoRA 在 LoRA 调整想法上同时使用量化(quantization),进一步降低内存负担

这个表中重要的不是优劣比较,而是 问题被减少的层位。

  • adapter 是 放入追加模块的结构
  • LoRA 是 学习小变化分的结构
  • QLoRA 是 LoRA + 更轻的存储/学习条件

这样读更稳妥。

也就是说,三者都属于 不把整个模型端到端重新调整 的路线,但追加结构放在哪里、想减少什么并不相同。先抓住这个差异,后面读实验成本、内存约束、质量比较时,才不会把它们混成同一个名字。

为什么 QLoRA 会一起被提到

读者读 LoRA 后,很快会遇到 QLoRA。这时会自然产生一个问题:这两个是完全不同的方法吗?

核心如下。

  • LoRA 是只学习小调整分的想法
  • QLoRA 是用更轻表示处理基础模型,同时叠加 LoRA 调整的路径

也就是说,QLoRA 与其说是 抛弃 LoRA 的另一种哲学,不如说是 让 LoRA 在更低内存条件下更容易处理的实务扩展。

可以用一句话整理如下。

LoRA 是缩小调整对象,QLoRA 是让这种调整能在更少内存中进行的扩展。

为什么这种区分在实务中重要

如果不同选择都混在同一个 微调 下面,成本判断就会变模糊。

例如团队可能会问:

  • 是否有资源进行完整微调?
  • LoRA 是否足以平衡质量和成本?
  • 如果内存更紧,是否需要 QLoRA 这样的选择?
  • 结构简单性更重要,还是实验迭代速度更重要?

因此,深入理解 LoRA,比起背公式,更接近阅读 为什么会出现这些选择。

高效调整方式的选择标准

到这里,最短总结如下。

  • adapter 接近 放入小追加模块的方式。
  • LoRA 接近 学习并贴上小变化分的方式。
  • QLoRA 接近 让 LoRA 调整在更低内存条件下更容易处理的扩展。

必须区分这三者,才不会错过同一个 微调 词下面隐藏的不同成本结构和实验条件。

案例和示例

案例 1. 用同一基础模型实验多个任务

假设一个团队用同一基础模型同时测试客户咨询分类、文档摘要、内部搜索辅助。在这种场景中,容易先想:任务有三个,是不是模型也要分别做三个? 但按这个标准做三次完整微调,存储空间会变大,哪个版本用于哪个任务也会变得复杂。例如只改一个分类实验,也要重新管理整个模型副本,比较实验本身很快就会变重。这时团队首先卡住的不是理论,而是版本数量和实验管理成本。

此时 LoRA 系列可以保持基础模型不变,只把各任务的调整分单独贴上去,从而让标准从 是否复制整个模型 转向 是否只分开管理调整分。也就是说,这里的变化是从看 每个任务是否需要完整副本,移动到看 只分开各任务调整分是否足够。这里要纠正的误解是 任务增加,完整模型也必须按比例增加。因此这个案例要确认的结果,是能否在同一基础模型上分开管理各任务调整本,从而实际提高实验比较速度,并把管理单位从完整副本减少到调整本。

案例 2. 内存紧张的环境

在笔记本级设备或受限 GPU 环境中,直接处理整个大型基础模型负担很大。这时容易先想:如果要调整,反正必须把整个模型放进内存里修改。 但这样处理,可能连实验都无法开始。例如数据已经准备好,却因为 GPU 内存不足连第一步训练都跑不起来,模型选择讨论之前实验就被堵住了。这时团队会问:不全部改变,也能不能按目的调整?

LoRA 和 QLoRA 会一起被提到,也直接连接到这种现实约束。这里的变化是从看 只有直接处理整个模型才能调整吗,移动到看 只靠小调整结构能否开始实验。这里要纠正的误解是 如果整个模型放不下,调整本身就不可能。因此这个案例要确认的结果,是在完整模型修改受阻的环境中,小调整结构是否能让真实实验开始,以及是否真的能把资源门槛降到第一步可运行的程度。

案例 3. 比结果质量更先重要的是实验轮转数

在早期探索阶段,比起 完美的最终模型,更重要的可能是快速看出 哪种数据和任务定义合适。遇到性能问题时,容易先想到大规模训练一次,直接看最好结果。但在这个阶段,更实用的可能是快速比较哪种标签定义可行、是否比提示更需要调整、数据清洗是否更重要。例如本周内必须试三种任务定义,但一次实验太重,就会连最重要的比较本身都做不了。

这种情况下,比起一次花大成本,快速比较多个小调整本可能更有利。这里的变化是从看 能否一次得到最终最高分,移动到看 能否实际快速比较多个假设。这里要纠正的误解是 一次最高性能 总是等于 好的探索过程。因此这个案例要确认的结果,是多个实验轮转是否比最终最高分更快支持任务定义比较,并且能否因为轮转数增加而更早丢弃错误假设。

把三个案例重新按高效调整选择标准归纳,如下所示。

情况 直接动完整模型时首先变大的东西 高效调整首先想减少的东西
用同一基础模型实验多个任务 模型副本数和版本管理负担 只分开管理各任务调整本的成本
内存紧张的环境 进入第一次实验本身的资源负担 是否能只靠小调整结构开始
实验轮转数重要时 单次实验准备时间和存储成本 快速比较多个假设的轮转负担

这个表的目的不是让人重新背三个技术名称。它要留下的是:即使在同一个 微调 轴内部,首先变大的负担是副本数、内存,还是实验轮转时间,会改变应该比较的选择。

高效调整名称分开的场景

从高效调整角度重新看实务现象时,即使还不知道 low-rank 公式或 quantization 细节,也可以先练习分辨当前卡住的是 追加模块结构问题、小变化分问题,还是 内存约束问题。如果想保持基础模型,并只把各任务适应分开管理,就不要把 adapter 和 LoRA 看成同一个东西,而要比较是需要在层之间插入小模块的结构,还是需要把已有权重的小变化分贴上去的结构。如果 GPU 内存太紧,无法直接处理整个模型,就不要认为 LoRA 会自动解决内存问题,而要看是否也需要用更轻表示处理基础模型。如果比较多个 rank 候选时成本和表达力平衡变得混乱,就要问当前瓶颈是资源约束还是表达余地不足,而不是问小 rank 是否无条件更好。

这里重要的不是背三个名字,而是先把 追加结构放在哪里、想减少什么规模、是否也要降低内存约束 读成彼此不同的问题。

这里常见的混淆如下。

  • 容易把 adapter、LoRA、QLoRA 都感觉成同一种高效调整的不同名字。
  • 知道 LoRA 后,容易错过 QLoRA 为什么还需要单独存在。
  • 容易把 rank 比较混成质量确定问题,而不把它和探索成本问题分开。

因此,应该留下的闭合标准是:不要把相似名字捆成同一个词,而要按约束场景重新选择。

练习

请在下面每个场景中,从 adapter、LoRA、QLoRA、完整微调 中选择首先要检查的对象,并用一句话写出理由。

  1. 必须用同一基础模型并行实验客户分类、摘要、搜索辅助,但存储空间和版本管理先成为负担。
  2. 必须在一张 24GB 以下的 GPU 上开启第一次实验,完整模型修改从一开始就很吃力。
  3. 最终部署前,比起最高性能分数,本周内比较三种任务定义更重要。
  4. 某个特定领域性能绝对重要,而且有足够资源和时间,可以接受完整模型重新调整。

检查清单

  • 能先说出当前瓶颈是内存、副本数、实验轮转数中的哪一个。
  • 能按 追加模块、小变化分、更低内存条件 这几个轴区分 adapter、LoRA、QLoRA。
  • 能不把相似的高效调整名称捆成同一个词,而是按约束场景重新选择。

出处和参考资料