跳转至

参数高效微调

🧩 LoRA 为什么能显著降低微调显存?省了哪些部分?

💡 LoRA(Low-Rank Adaptation)的核心思想是将可训练的权重增量分解为两个小矩阵的乘积,冻结原始大模型,只优化这两个小矩阵,从而将可训练参数的数量缩小数百到数千倍,直接省去了优化器状态、梯度以及大部分参数的存储,显存占用断崖式下降。

🔍 具体节省的显存部分:

  1. 优化器状态(通常占显存大头) 全量微调时,Adam 优化器需要为每个参数存储动量和方差(FP32),共 8 字节/参数。对于一个 7B 模型,这部分占 56 GB。LoRA 只训练极少的参数(例如 r=8 时约几百万参数),优化器状态仅需几十 MB,几乎可以忽略。

  2. 梯度显存 全量微调需要存储所有参数的梯度(FP16,2 字节/参数),7B 占 14 GB。LoRA 的梯度只存在于低秩矩阵 A 和 B,对应的梯度显存同样降至几十 MB。

  3. 基础模型权重(冻结) LoRA 不需要修改原始权重,因此可以以 FP16/INT4/INT8 精度常驻显存,不必保留 FP32 的主副本(除了量化模型需要的少量反量化开销)。在 QLoRA 中,基础权重甚至可以用 4-bit 压缩,仅占 3.5 GB(7B 模型)。全量微调通常需要保持 FP16 甚至 FP32 权重副本,占用更大。

  4. 通信开销(间接节省) 在分布式训练中,只需同步 LoRA 的小梯度,而不是整个模型的大梯度,通信量断崖式下降,间接也减少了通信缓冲区的显存占用。

📊 总结:LoRA 将可训练参数从数 B 降低到几 M,从而将与训练相关的优化器、梯度、参数副本全部压缩到极致,仅基础模型权重以冻结形式保留,这是其显存节省的根本原因。


📉 使用 LoRA(r=8)训练 7B 模型,相比全量微调,显存大概降到多少?

💡 全量微调 7B 模型 FP16 大约需要 80+ GB 显存,而 LoRA(r=8)+ FP16 基础权重通常只需约 14–18 GB;若使用 QLoRA(4-bit 基础),更可降至 7–10 GB。降幅可达 80-90%。

🧮 详细估算:

全量微调(FP16,Adam,batch=1, seq=2048):

  • 基础权重(FP16):14 GB

  • 梯度(FP16):14 GB

  • 优化器状态(FP32 动量+方差):56 GB

  • 激活值(含注意力矩阵等):约 10-15 GB

  • 总计约 95–100 GB

LoRA (r=8, alpha=16) + FP16 基础权重:

  • 基础权重(FP16):14 GB(冻结)

  • LoRA 可训练参数:约 3-5 M(具体取决于应用到哪些层),FP32 约 12-20 MB;梯度同量级;优化器状态约 40-80 MB。三项合计 < 150 MB。

  • 激活值:与全量相同(因为前向仍需计算完整激活),但可用梯度检查点降低,大约 5-10 GB。

  • 总计约 14 + 0.15 + 5~10 ≈ 19–24 GB,实际因框架优化可能更低。在开启梯度检查点和 FlashAttention 后,常可控制在 14-18 GB。

QLoRA(4-bit 基础权重):

  • 基础权重(NF4):约 3.5 GB

  • LoRA 可训练参数同样极小

  • 激活值:通过梯度检查点和 4-bit 存储进一步压缩

  • 总计约 3.5 + 0.15 + 3~5 ≈ 7-10 GB。

✅ 结论:LoRA 让单卡 24GB 消费级显卡也能玩转 7B 微调,QLoRA 更是把门槛降到 10GB 以下。


❄️ QLoRA 的 4-bit 量化和双重量化如何进一步压缩显存?

💡 QLoRA 在 LoRA 基础上将冻结的基础模型以 4-bit NormalFloat 格式存储,并采用“双重量化”对量化常数再做一次量化,极致压缩模型权重显存,同时保持微调精度。

🔍 4-bit NormalFloat(NF4)量化:

  • 专门为正态分布数据设计,通过分位点映射把每个 16 位浮点权重压缩为 4 位索引,即每个权重仅占 0.5 字节。

  • 7B 模型权重从 14 GB → 约 3.5 GB。大幅降低基础模型的常驻显存。

🔍 双重量化(Double Quantization):

  • 4-bit 量化需要额外的“量化常数”(scaling factor)来映射回实数。对于大模型,这些常数本身也会占用可观显存(例如每个 block 一个常数)。

  • 双重量化将这些量化常数再进行一次 8-bit 量化,压缩到 1 字节/常数,使得量化开销从约 0.5 GB 缩减到 0.1 GB。

  • 效果:总基础模型显存从 3.5 GB + 0.5 GB → 3.5 GB + 0.1 GB ≈ 3.6 GB,更省。

🔗 结合 LoRA:

  • 基础模型权重以 4-bit 常驻,不参与训练。

  • LoRA 的适配器以 FP16/BF16 训练,向前传播时反量化基础权重并与适配器输出相加。

  • 反向传播只更新 LoRA 参数,梯度不经过基础权重,避免了对量化参数的反传困难。

✅ 因此,QLoRA 用 4-bit + 双重量化将基础模型显存压缩至极,配以 LoRA 小参数训练,实现单卡微调大模型的奇迹。


📟 QLoRA 的分页优化器(Paged Optimizers)是做什么的?

💡 分页优化器借鉴操作系统内存分页思想,当 GPU 显存不足时,自动将优化器状态分页(offload)到 CPU 内存,需要时再换入 GPU,从而在不 OOM 的情况下完成训练,且避免手动管理显存溢出的崩溃。

🔧 工作原理:

  • 训练过程中,优化器状态(动量和方差)通常常驻 GPU,占用大量显存。

  • 分页优化器监控 GPU 显存使用,当接近上限时,将一部分不活跃的优化器状态块迁移到 CPU(就像操作系统的 swap),腾出空间给当前计算。

  • 当需要更新参数时,再将对应块预取回 GPU。通过这种动态调度,可以用 CPU 内存扩展 GPU 显存,代价是增加少量 PCIe 传输。

⚖️ 与传统 Offload 的区别:

  • 传统的 offload(如 ZeRO-Offload)是静态地将整个优化器状态放在 CPU,每次更新统一搬运。

  • 分页优化器更加精细,以页为单位按需搬运,减少不必要的数据移动,效率更高。

✅ 因此,QLoRA 的分页优化器相当于 GPU 显存的“虚拟内存”,让单卡能平滑处理超出显存的优化器状态,是显存极限场景下的重要保障。


📏 LoRA 的参数(A 和 B)占用的显存有多大?如何计算?

💡 LoRA 在每个适应的线性层注入两个低秩矩阵 A 和 B,参数量 = 2 × rank × (input_dim + output_dim)。总 LoRA 参数量约为基础模型的 rank/hidden 倍,通常只有几 MB 到几十 MB。

🧮 计算方法:

  • 对于一个权重矩阵 W [d_in, d_out],LoRA 替换为 W + B × A,其中 B 形状 [d_out, r],A 形状 [r, d_in]。

  • 参数量 = r × d_in + r × d_out = r × (d_in + d_out)。

  • 存储占用:如果用 FP16,每个参数 2 字节;如果用 FP32,4 字节。训练时 A、B 及梯度、优化器状态可能需要 FP32,实际显存按 FP32 估算。

📊 以 Llama-7B 为例(hidden=4096,FFN 中间维度 11008,r=8):

  • 每个注意力层 Q、K、V、O 四个权重矩阵,形状分别为 [4096, 4096](或分头后),实际每个矩阵的 d_in、d_out 都为 4096。

  • 单个矩阵 LoRA 参数 = 8 × (4096 + 4096) = 65,536 参数。

  • 所有注意力层(假设 32 层 × 4 矩阵 ≈ 128 个矩阵)和 FFN 层(32 层 × 3 矩阵 ≈ 96 个矩阵),总计约 224 个矩阵。

  • 总 LoRA 参数 ≈ 224 × 65,536 ≈ 14.68 M 参数。

  • FP32 格式占用:14.68 M × 4 字节 = 58.7 MB。加上梯度和优化器状态,约 58.7 × 3 ≈ 176 MB。

  • 若部分层不应用 LoRA(如只对 Q、V),参数量减半。

✅ 因此,LoRA 参数量极小,显存占用通常在几十至几百 MB,相比于基础模型可忽略。


🆚 Adapter 与 LoRA 在训练显存占用上有什么区别?

💡 Adapter 通常在每个 Transformer 块中插入可训练的小型瓶颈层,LoRA 则是将可训练的低秩分解直接加在原始权重上。两者都可冻结主干,但 Adapter 引入额外模块且需按顺序计算,训练显存和推理时延比 LoRA 稍大。

🔍 显存占用对比:

  • Adapter(典型结构) 在每个 LayerNorm 后加两个全连接层(下投影→激活→上投影),参数量 2 × d × bottleneck_dim。bottleneck_dim 通常 64-256。总参数量可能比 LoRA 大(例如 7B 模型 Adapter 约 100 M+ 参数)。 因为 Adapter 串行插入,训练时需存储其输入输出和梯度,激活显存略增加;参数本身也需优化器状态,显存占用比 LoRA 高数倍。

  • LoRA 如前所述,参数量极小(~15 M),不影响主干前向流程,只在最后合并。无额外激活开销,训练显存几乎只多出 LoRA 参数和优化器状态。

📊 实际差异:

  • 7B 全量微调 ~95 GB;Adapter 微调(冻结主干,训练 Adapter)约需 25-35 GB;LoRA 仅需 14-18 GB。

  • LoRA 在推理时可以重参数化到原权重中,不增加推理计算,而 Adapter 会带来轻微延迟。

✅ 所以,LoRA 在显存和推理效率上通常优于 Adapter,是更流行的 PEFT 方法。


🌐 为什么 PEFT 方法在分布式训练中通信量也更小?

💡 PEFT(参数高效微调)如 LoRA、Adapter 只训练极少参数,分布式数据并行中仅需同步这些小参数的梯度,而不是整个模型的梯度,因此通信量断崖式下降。

🔍 具体原理:

  • 标准数据并行(DDP)需要在每次反向传播后对所有参数的梯度进行 All-Reduce,通信量 = 2 × 参数量(FP16 下 2 字节/参数)。

  • PEFT 冻结基础模型,基础模型不产生梯度,无需通信。只有可训练的 adapter/LoRA 参数产生梯度,参数量仅为全量的千分之一或万分之一,通信量同比例下降。

  • 例如 7B LoRA 微调,需通信的参数仅约 15 M,而全量微调需 7 B,通信量差距 ≈ 500 倍。

📊 附加好处:

  • 通信缓冲区减少,显存占用进一步降低。

  • 分布式扩展性更强,即使在带宽较低的网络上也能高效训练。

✅ 因此,PEFT 方法不仅省单卡显存,还能在分布式环境中大幅降低通信开销,是低成本大模型微调的理想选择。


🎛️ 当有多个 LoRA 适配器需要加载到 GPU 时,显存如何管理?

💡 多个 LoRA 适配器可以常驻或动态加载。常驻模式将多个适配器权重放在 GPU,显存随适配器数量线性增长;动态加载则只在需要时将其换入 GPU,结合 CPU/磁盘存储,可支持数千个适配器而显存开销极小。

🔧 管理模式:

  1. 常驻模式 所有 LoRA 适配器都加载到 GPU 显存中。假设每个适配器 30 MB,100 个适配器占用 3 GB。对于 24GB 卡,基础模型 7B FP16 占 14 GB,剩余空间足够加载几十到上百个。常驻模式下切换适配器无开销,但数量受显存限制。

  2. 动态加载模式(LoRA 交换) 框架(如 vLLM、Punica、S-LoRA)实现 LoRA 权重在 CPU 和 GPU 之间的分页管理。仅有当前请求需要的 LoRA 适配器被加载到 GPU,闲置的放回 CPU。当请求到来,调度器将对应 LoRA 块换入,完成计算后可换出。通过高效的 I/O 和 CUDA 图,切换延迟可控制在几毫秒内。

  3. 适配器共享与合并 如果多个适配器共享部分基础矩阵,可合并计算以减少显存冗余。此外,一些系统支持将多个 LoRA 动态融合到基础权重中,实现 batch 并发处理。

📊 实际能力:

  • 基于分页和 swap 的系统如 S-LoRA 可以在单卡上同时服务 1000+ 个 LoRA 适配器,每个适配器平均占用 GPU 显存仅几 MB(热数据),其他常驻 CPU,整体显存占用保持在可控范围内。

✅ 因此,通过动态管理,多 LoRA 场景下的显存不再是瓶颈,系统可以为成千上万的个性化模型提供服务。


🎯 微调大模型时,如何根据任务和资源选择 PEFT 方法?

选择 PEFT 方法需要从任务类型、可用显存、训练数据量、推理延迟四个维度综合权衡。我通常按下面的决策树来选择:

1️⃣ 先看任务需求

  • 生成任务(对话、摘要、翻译):优先选 LoRA/QLoRA,因为它直接作用于权重,对生成质量影响最稳定,且可合并到原模型,不增加推理延迟。

  • 分类/回归任务:Adapter、Prompt Tuning 甚至 BitFit 都足够,因只需在顶层聚合信息,不需要全模型适应。

  • 需要领域知识注入、指令遵循:LoRA 效果最好;若数据极少,Prefix Tuning 也能工作。

2️⃣ 再看显存约束

  • GPU 显存充裕(>40GB):直接用 LoRA (r=16-32),FP16 基础权重,训练速度快。

  • 消费级显卡(24GB):使用 QLoRA (4-bit 基础 + LoRA),能微调 7B-13B 模型。

  • 极度受限(<12GB):选用 LoRA + 梯度检查点 + 极低 rank (r=4),甚至 Prompt Tuning(只训练软提示向量,额外参数量可低至几万)。

  • 多任务/多租户场景:Adapter 和 LoRA 都支持热插拔,可以动态加载不同任务的适配器,而 Prefix Tuning 修改的是输入层,不如 LoRA 灵活。

3️⃣ 考虑训练数据规模

  • 大数据(>10k 样本):LoRA 表现优异,rank 可设高些 (r=16-64)。

  • 小数据(几百条):Prefix Tuning 或 P-Tuning v2 不容易过拟合,因只调前缀向量;LoRA 需用较小 rank,并加强正则化。

4️⃣ 推理部署要求

  • 不能增加延迟:LoRA(合并后) 或 BitFit(仅调 bias)最佳,因为推理时不引入额外计算。

  • 可以容忍微小延迟:Adapter 串行结构会轻微增加延迟;Prefix Tuning 会占用部分上下文长度,影响长文本处理。

  • 需要动态切换多个模型:LoRA 适配器极轻量,可毫秒级换入换出;而 Adapter 稍重,但也可行。

📊 快速速查表:

查看内嵌表格

✅ 总结:没有银弹,但 LoRA 系列最通用,QLoRA 是平民化利器,Prompt Tuning 适合轻量级,Adapter 在多任务服务中有一定优势。


🤝 是否可以同时使用多个 PEFT 方法?比如 LoRA + Adapter?

💡 完全可以叠加,而且很多高效微调策略本身就是组合体(如 QLoRA = 量化 + LoRA)。不同 PEFT 方法作用于模型的不同部分或不同层面,相互正交时能叠加收益,但需要注意训练冲突和推理延迟。

🔍 常见组合与机制:

  • LoRA + Adapter 可在 Transformer Block 中同时应用:LoRA 加在 Attention 权重上,Adapter 加在 FFN 之后或之前。两者不共享参数,梯度独立更新。这能进一步增加模型容量,但也会引入额外推理延迟(因为 Adapter 串行),且总参数量比单一方法大。一般在需要高度多任务适应时使用,例如为每个任务既训练 LoRA 又训练 Adapter,然后动态组合。

  • LoRA + Prefix Tuning Prefix Tuning 在输入前加可学习前缀向量,LoRA 修改权重。两者可协同,但可能互相干扰,需要更细致的调参。通常不推荐同一任务同时用,除非有特殊设计。

  • QLoRA(4-bit 量化 + LoRA) 最常见的成功组合,基础模型权重量化,LoRA 全精度训练。不是 PEFT 之间的组合,而是量化与 PEFT 的结合。

  • BitFit + LoRA BitFit 只训 bias,LoRA 训低秩权重。它们可以共存,但因 bias 参数极少,带来的增益有限,更多是实验性质。

⚠️ 注意事项:

  • 多 PEFT 会增大可训练参数量,可能削弱显存节省效果。

  • 推理时,未合并的 LoRA 可重参数化,但 Adapter 不能,会额外延迟。

  • 梯度可能冲突,需谨慎设置学习率。

✅ 因此,组合 PEFT 是完全可行的,但通常是分任务叠加(不同任务用不同方法)或为了特定需求而叠加,日常使用仍推荐单一方法,简洁高效。


📊 Prefix Tuning 相比 LoRA 在显存占用上有优势吗?

💡 在绝大多数配置下,Prefix Tuning 的可训练参数量远小于 LoRA,因此优化器状态和梯度显存更小,但它的激活显存会因前缀向量而略微增加,且生成任务中占用了宝贵的上下文长度。整体显存优势通常逊于 LoRA+量化,但在极度资源受限时有用。

🔍 显存占用分析:

  • 可训练参数数量 Prefix Tuning 只在每层前添加可学习的前缀向量(例如长度 10-100,维度=hidden),总参数量 = 层数 × 前缀长度 × hidden。 例:7B 模型 32 层,hidden=4096,前缀长度 20,参数量 = 32 × 20 × 4096 ≈ 2.6 M。 LoRA r=8 时参数量约 15 M(如前估算)。可见 Prefix 参数更少,所以优化器和梯度更小(~10 MB 级别)。

  • 激活显存 Prefix 向量会参与注意力计算,在前向传播时,它们作为额外的 key-value 被所有 token 看到。这实质上增加了序列长度(因为每个 token 都要和前缀交互),导致注意力矩阵从 [L, L] 变为 [L, L+P]。当序列很长时,这个增量可忽略;但短序列时,增量比例大。不过,Prefix 本身并不产生大量中间激活,激活显存增量较小。

  • 与 LoRA 的对比 纯 LoRA (FP16 基础) 的优化器+梯度约 150 MB,Prefix 约 30 MB,显存略省。但 QLoRA (4-bit 基础) 已把模型权重压缩到 3.5 GB,这时 LoRA 的开销比例也很小。因此 Prefix Tuning 的显存优势在 GPU 极小时(如 4-8 GB)才突显。 但 Prefix 会减少可用的上下文长度,这对长文本任务不利;且训练不稳定,生成质量通常不如 LoRA。所以目前工业界首选 LoRA/QLoRA,Prefix 退居其次。

✅ 结论:Prefix Tuning 在绝对显存极小(<8GB)且任务为短文本时可能有微弱优势,但综合考虑效果和灵活性,LoRA/QLoRA 是更优选择。


🧠 在 PEFT 微调中,激活值显存还是主要瓶颈吗?

💡 在 PEFT 微调中,基础模型权重和可训练参数已高度压缩,激活值显存通常重新成为主要瓶颈,尤其是在长序列、大 batch 情况下。优化器状态和梯度的压力大幅减小,显存战场转移到了激活和 KV Cache。

🔍 原因:

  • PEFT 冻结主干,只训练少量参数,优化器和梯度显存从数十 GB 降至几十 MB。

  • 但前向传播依然需要计算完整的 Transformer,因此中间激活(包括注意力矩阵、FFN 输入输出等)仍然存在。如果不用梯度检查点或 FlashAttention,激活会占据大量显存。

  • 例如,7B LoRA 微调,基础权重 14 GB,激活若序列 2048、batch=1,激活约 10 GB,超过了权重!因此,激活立刻成为主要大头。

⚙️ 应对方法:

  • 必须开启 梯度检查点,将激活显存降至几 GB。

  • 使用 FlashAttention 消除注意力矩阵。

  • 对于超长序列,引入 序列并行 或 激活卸载。

📊 实践配置:

  • 7B QLoRA 微调,seq=2048,开梯度检查点+FlashAttention,激活约 2-3 GB,加上基础权重 3.5 GB,总 6-7 GB,此时激活占比仍然近半。

  • 序列更长(8K),激活升至 8-10 GB,即使 QLoRA 也显存吃紧,必须进一步优化激活。

✅ 因此,PEFT 微调将显存矛盾从“模型状态”转向“激活值”,必须配合激活优化技术才能实现高效训练。


📐 如何估算 QLoRA 训练所需的最小 GPU 显存?

💡 QLoRA 最小显存 = 量化基础模型权重 + LoRA 参数与优化器 + 激活值(开启梯度检查点后)+ 其他开销。以 7B 模型、r=8、seq=2048、batch=1 为例,约需 7-9 GB。

🧮 分项估算公式:

  1. 基础模型权重 使用 NF4 量化,每参数 0.5 字节 + 双重量化后量化常数 ≈ 0.55 字节/参数。 7B → 7 × 10^9 × 0.55 ≈ 3.85 GB。

  2. LoRA 可训练参数及优化器 参数量约 15 M,FP32 参数 + 梯度 + 优化器状态(Adam 2×动量方差)共需约 15 M × 12 字节 ≈ 0.18 GB。若部分混合精度,可更小。

  3. 激活显存 这是最大变量。激活大小与 batch size、序列长度、隐藏维度和层数有关。 粗略公式:激活 ≈ batch × seq_len × hidden × 层数 × (34~40) 字节(经验系数,含注意力和 FFN)。 7B:hidden=4096, 层数=32。seq=2048, batch=1: 激活 ≈ 1 × 2048 × 4096 × 32 × 40 / 1024^3 ≈ 10.2 GB。 开启梯度检查点后,可降至约 1/√32 或约一个 Block 的激活大小。按每个 Block 输入 0.14 GB,加 Block 内部临时激活约 0.15 GB,则每个 Block 重计算峰值约 0.3 GB。整体驻留约 1-2 个 Block 的激活,约 0.3-0.6 GB。但实际框架开销会使激活约 2-4 GB。保守取 3 GB。

  4. 其他(通信缓冲、框架预留) 约 0.5-1 GB。

📊 总最小显存 ≈ 3.85 + 0.18 + 3 + 0.5 ≈ 7.5 GB。实际可能因实现和优化在 7-9 GB 间浮动。

🎯 配置建议:若用 RTX 3060 12GB,qlora 7B seq=2048 轻松;若要 seq=4096,激活会加倍,需 10-12 GB,仍可行。13B 模型 seq=2048 约需 11-14 GB。

✅ 因此,QLoRA 训练的最小显存估算核心是:量化权重 + 极小 LoRA + 梯度检查点后的激活,三者相加即为门槛。


🧩 PEFT 方法对推理时的显存有影响吗?LoRA 合并后是什么情况?

💡 PEFT 方法本身在推理时显存影响极小,尤其是 LoRA 可以合并到基础权重中,完全消除额外显存和计算,合并后的模型与原模型结构完全一致,显存占用相同。

🔍 不同 PEFT 方法的推理显存情况:

  • LoRA(未合并) 推理时需同时加载基础权重和 LoRA 矩阵,LoRA 矩阵极小(几十 MB),显存增加可忽略。但计算时需要额外乘法,略微增加延迟。

  • LoRA(合并) 将 LoRA 矩阵融入原权重:W' = W + B @ A。合并后的新权重 W' 与原 W 形状相同,推理时完全等价于一个同尺寸的标准模型,显存零增加,速度零影响。这是 LoRA 最大的工程优势。几乎所有推理框架都支持自动合并。

  • Adapter 推理时串行在原模型中,不能合并,会永久增加少量参数(几十到几百 MB)和计算延迟。显存增量较小,但在大规模服务中多 Adapter 可能积累。

  • Prefix Tuning 推理时需要缓存前缀的 KV Cache,额外占用显存。但通常前缀极短(10-100 token),增加的 KV Cache 很小,几乎不影响。然而,前缀会减少可用上下文长度。

📊 LoRA 合并后对比:

查看内嵌表格

✅ 因此,PEFT 方法对推理显存的影响总体极低,LoRA 合并后更是完全无额外开销,极其适合生产部署。


⚡ 为什么 PEFT 方法几乎不影响推理速度?

💡 因为 PEFT 方法引入的额外计算量极小(几百万次乘加),相对于基础模型的前向计算(数十亿次)可忽略不计,并且 LoRA 可重参数化合并到原权重中,完全消除额外计算;其他方法(Adapter)虽不可合并,但增加的串行瓶颈层也很轻量。

🔍 速度影响分解:

  1. LoRA
  2. 未合并:计算 y = Wx + B(Ax)。相比原 Wx,增加了两个小矩阵乘法。以 7B 模型为例,一次前向 FLOPs 约 7B × 2 × seq_len ≈ 1.4 × 10^13(seq=2048)。而 LoRA 额外 FLOPs 仅 ~ 2 × r × (d_in + d_out) × 层数 × seq_len ≈ 2 × 8 × 8192 × 32 × 2048 ≈ 8.6 × 10^9,不到原计算的 0.1%。因此延迟增加微乎其微。
  3. 合并后:零额外计算,速度完全不受影响。

  4. Adapter

  5. 在每个 Block 中串行添加 bottleneck 层,参数量级在 1-2 M 每层,总 FLOPs 增加约 1%-2%,在批量较小时可观察到轻微延迟(1-3%),但通常可接受。

  6. Prefix Tuning

  7. 增加了前缀 token,使得注意力计算序列变长一点,理论上计算量增大约 (L+P)/L 倍。P 通常 ≤20,L 在 128 以上,增量小于 15%,且一般在 GPU 上表现不明显。

📌 因此,PEFT 方法的设计哲学就是“以最小的可训练参数实现大模型适应”,其计算增量常被工程优化隐藏,从而几乎不影响推理速度。