一、LoRA原理

LoRA(Low-Rank Adaptation of LLMs),即LLMs的低秩适应,是参数高效微调最常用的方法。

LoRA的本质就是用更少的训练参数来近似LLM全参数微调所得的增量参数,从而达到使用更少显存占用的高效微调。

1.1 问题定义

LoRA与训练目标是解耦的,但本文设定就是语言模型建模。

以下将给出语言建模(可自然推广到序列建模)的基本符号定义,即最大化给定提示的条件概率(本质是极大似然估计)。

The maximization of conditional probabilities given a task-specific prompt

给定一个参数为ΦΦ预训练的自回归语言模型PΦ(y|x)PΦ(y|x)。

xx为输入,yy为输出

note: 为与原文符号一致,下文ΦΦ、ΘΘ、WW均表示模型参数

全参数微调

每次full fine-tuning训练,学一个 ΔΦΔΦ,|ΔΦ||ΔΦ| 参数量大hold不住

image
语言模型的条件概率分布建模目标

高效微调

ΔΦΔΦ 是特定于下游任务的增量参数

LoRA将 ΔΦ=ΔΦ(Θ)ΔΦ=ΔΦ(Θ) ,用参数量更少的ΘΘ来编码(低秩降维表示来近似), |Φ|<<|Θ||Φ|<<|Θ|

image
LoRA训练目标

Transformer架构参数

Transformer层的输入和输出维度大小 dmodeldmodel

WqWq、WkWk、WvWv,和WoWo分别代表自注意力的query、key、value和output投影矩阵

WW或W0W0代表预训练的权重矩阵

ΔW∆W是微调后得到的增量参数矩阵(训练后,优化算法在参数上的累计更新量)

rr代表LoRA模块的秩

1.2 LoRA简介

LoRA的核心思想是,在冻结预训练模型权重后,将可训练的低秩分解矩阵注入到的Transformer架构的每一层中,从而大大减少了在下游任务上的可训练参数量。

image
LoRA结构

We propose Low-Rank Adaptation(LoRA), which freezes the pre trained model weights and injects trainable rank decomposition matrices into each layer of the Transformer architecture, greatly reducing the number of trainable parameters for downstream tasks.

在推理时,对于使用LoRA的模型来说,可直接将原预训练模型权重与训练好的LoRA权重合并,因此在推理时不存在额外开销。

1.3 为什么要LoRA

背景

通常,冻结预训练模型权重,再额外插入可训练的权重是常规做法,例如Adapter。可训练的权重学习的就是微调数据的知识。

但它们的问题在于,不仅额外增加了参数,而且还改变了模型结构。

这会导致模型训练、推理的计算成本和内存占用急剧增加,尤其在模型参数需在多GPU上分布式推理时(这越来越常见)。

image
推理性能比较

动机

深度网络由大量Dense层构成,这些参数矩阵通常是满秩的。

相关工作表明,When adapting to a specific task, 训练学到的过度参数化的模型实际上存在于一个较低的内在维度上(高维数据实际是在低维子空间中)

We take inspiration from Li et al. (2018a); Aghajanyan et al. (2020) which show that the learned over-parametrized models in fact reside on a low intrinsic dimension.

image
低秩矩阵

LoRA就假设LLM在下游任务上微调得到的增量参数矩阵ΔWΔW是低秩的(肯定不是满秩),即存在冗余参数或高度相关的参数矩阵,但实际有效参数是更低维度的。

We hypothesize that the change in weights during model adaptation also has a low “intrinsic rank”, leading to our proposed Low-Rank Adaptation (LoRA) approach.

LoRA遂设想,对全参数微调的增量参数矩阵ΔWΔW进行低秩分解近似表示(即对参数做降维)。

image
PCA降维示意图,源于https://lightning.ai/pages/community/tutorial/lora-llm/

这样训练ΔWΔW的低秩分解近似参数矩阵,效果上相比其他PEFT方法不会打什么折扣,而且还能在推理时不增加额外开销。

LoRA allows us to train some dense layers in a neural network indirectly by optimizing rank decomposition matrices of the dense layers’ change during adaptation instead, while keeping the pre-trained weights frozen

LoRA的大体思路就是这样,具体的矩阵分解也是靠微调过程学习的。

接下来,介绍LoRA的具体方案。

1.4 LoRA实现

LoRA就是低秩矩阵适应,在冻结原有LLM参数时,用参数量更小的矩阵进行低秩近似训练。

LoRA原理

对于预训练权重矩阵W0∈Rd×dW0∈Rd×d,LoRa限制了其更新方式,即将全参微调的增量参数矩阵ΔWΔW表示为两个参数量更小的矩阵 B 和和 A \mathbf{B} 和和\mathbf{A} B和和A的低秩近似:

W0+ΔW=W0+BAW0+ΔW=W0+BA

其中,B∈Rd×rB∈Rd×r和A∈Rr×dA∈Rr×d为LoRA低秩适应的权重矩阵,秩rr远小于dd。

此时,微调的参数量从原来ΔWΔW的d∗dd∗d,变成了BB 和 AA的2∗r∗d2∗r∗d。可知,2∗r∗d<<d∗d2∗r∗d<<d∗d(有2r<<d2r<<d)

image

给定输入x∈Rdx∈Rd,添加LoRA后的输出h∈Rdh∈Rd:

h=(W0+ΔW)x=W0x+BAxh=(W0+ΔW)x=W0x+BAx

这里,将Δh=BAxΔh=BAx,便于后续求导计算。

在训练时,原始参数W0W0被冻结,意味着W0W0虽然会参与前向传播和反向传播,但是不会计算其对应梯度∂L∂W0∂L∂W0,更不会更新其参数。

在推理时,直接按上面的式子将BABA合并到W0W0中,因此相比原始LLM不存在推理延时。

1.5 LoRA参数初始化

在开始训练时:

  • 矩阵 BB 通过高斯函数初始化,bi∼N(0,σb2)bi∼N(0,σb2)
  • 矩阵 AA 为全零初始化,ai=0ai=0

这使得训练开始前,LoRA的旁路BA=0BA=0,那么微调就能从预训练权重W0W0开始。

这样就能和全参数微调时一样,能有相同的开始。

这个策略要求,至少BB 和 AA中有一个被初始化为全0项。

但如果,全被初始化为0,BB 和 AA就训不动了。因为,BB 和 AA全0时,处于鞍点,两个权重的梯度也全为0😅
(BB 的梯度 ∂L∂B∂L∂B依赖AA,AA 的梯度∂L∂A∂L∂A依赖BB,如果仅一项为0训练是可以启动的)

1.6 LoRA权重系数αrαr

实际实现时,ΔW=BAΔW=BA会乘以系数αrαr与原始预训练权重合并W0W0,αα是一个超参:

h=(W0+αrΔW)xh=(W0+αrΔW)x

直观来看,系数αrαr决定了在下游任务上微调得到的LoRA低秩适应的权重矩阵BABA占最终模型参数的比例。

给定一个或多个下游任务数据,进行LoRA微调:

  • 系数αrαr越大,LoRA微调权重的影响就越大,在下游任务上越容易过拟合
  • 系数αrαr越小,LoRA微调权重的影响就越小(微调的效果不明显,原始模型参数受到的影响也较少)

一般来说,在给定任务上LoRA微调,让αα为rr的2倍数。(太大学过头了,太小学不动。)

根据经验,LoRA训练大概很难注入新的知识,更多是修改LLM的指令尊随的能力,例如输出风格和格式。原始的LLM能力,是在预训练是获得的(取决于参数量、数据规模X数据质量)。

LoRA的秩rr决定,LoRA的低秩近似矩阵的拟合能力,实际任务需要调参挑选合适的秩rr维度。系数αrαr中αα决定新老权重的占比。

1.7 LoRA的秩rr如何选择

和推荐系统中的评分矩阵分解、文本的非负矩阵分解,以及奇异值分解一样。LoRA的低秩分解近似矩阵BB 和 AA的秩rr的大小,决定了其拟合能力。

理想的情况是找到一个秩rr,使得LoRA的低秩近似结构BABA能具备全参数微调的增量矩阵ΔWΔW 的表达能力,能越接近越好。

秩rr成为了LoRA的超参数,随着秩rr维度的不断增加,参与训练的参数量也随之增加,LoRA的低秩适应能力将逐渐提高甚至过拟合。

image
论文基于GPT-3 175B,WikiSQL和MultiNLI数据上,进行了关于LoRA秩rr选取的实验分析

Weight Type指明对Attention的那部分参数做了低秩适应。可以发现,在这个2个数据集上,rr=4,8时基本上要略优于rr=64的效果。更高的rr不一定带来更好的效果。

作者指出,增加rr并不能涵盖更有意义的子空间,这表明低秩适应矩阵就足够了。但是,并不可能期望一个小的rr适用于每个任务或数据集

一些秩rr选取经验:

  • 微调的下游任务
    简单任务所需的秩rr不大,任务越难/多任务混合的情况,需要更大的秩rr
  • 基座能力
    越强的基座,所需的秩rr应该更小。例如Qwen2-72B-Instruct对比Qwen2-7B-Instruct。

越强的基座在处理同等任务时,需要微调的样本数也通常会更少些。

  • 数据规模
    数据规模越大,需要更大的秩rr

1.8 LoRA的微调的参数选取

LoRA原始论文只研究了注意力参数WqWq、WkWk、WvWv,和WoWo。

image
论文基于GPT-3 175B,对比分析了训练预算有限时,关于LoRA的微调注意力参数的选择

在训练预算为18M时 (roughly 35MB if stored
in FP16) on GPT-3 175B,注意力权重全部选择时的效果最佳。

这表明,即使全部的注意力参数即使秩更小时(r=2r=2),相比秩更大的(r=8r=8)部分注意力参数,具有更强的建模能力。

在实际中,一般会把FFN的参数也考虑进来。

二、LoRA训练

image
LoRA反向传播的过程

LoRA训练时,将冻结预训练权重 W0W0
,只优化低秩矩阵 BB和AA。

LoRA训练后,只需保存低秩矩阵的BB和AA参数。

2.1 LoRA训练的梯度计算

image
LoRa的计算图和梯度计算

BB 和 AA的梯度计算, W0W0不参与计算。

∂L∂B=∂L∂h∂h∂Δh∂Δh∂B=∂L∂h(Ax)T∈Rd×r∂L∂B=∂L∂h∂h∂Δh∂Δh∂B=∂L∂h(Ax)T∈Rd×r

∂L∂A=∂L∂h∂h∂Δh∂Δh∂A=BT∂L∂hxT∈Rr×d∂L∂A=∂L∂h∂h∂Δh∂Δh∂A=BT∂L∂hxT∈Rr×d

继续回传的梯度,包括W0W0这一路:

∂L∂x=∂L∂h∂h∂x=∂L∂h(W0+BA)T∈Rd∂L∂x=∂L∂h∂h∂x=∂L∂h(W0+BA)T∈Rd

2.2 反向传播计算量

全量微调前向计算:h=W0xh=W0x

全量微调反向计算:

∂L∂W0=∂L∂h∂h∂W0=∂L∂hxT∈Rd×d∂L∂W0=∂L∂h∂h∂W0=∂L∂hxT∈Rd×d

∂L∂x=∂L∂h∂h∂x=∂L∂hWT0∈Rd∂L∂x=∂L∂h∂h∂x=∂L∂hW0T∈Rd

LoRA微调计算:h=W0x+BAxh=W0x+BAx

此时,微调的参数量从原来ΔWΔW的d∗dd∗d,变成了BB 和 AA的2∗r∗d2∗r∗d。可知,2∗r∗d<<d∗d2∗r∗d<<d∗d(有2r<<d2r<<d)

不考虑pytorch、llm.c或8-bit优化器、Float8的训练优化实现。可以看到,光梯度计算的话,实际计算量是增加了的。

2.3 LoRA在哪里减少了显存占用

BB和AA的梯度是小头这里,暂时忽略。

预训练权重 W0W0的梯度存储开销,实际就是LoRA能大大减少了显存占用的关键。

在LoRA训练时,W0W0仍然会参与前向传播和反向传播,但是不会计算其对应梯度∂L∂W0∂L∂W0,更不会更新其参数。

因此,这一步不再需要计算和保存梯度∂L∂W0∂L∂W0,以及更新W0W0。

以d=4096,r=16d=4096,r=16为例,这部分减少的梯度显存占用粗略估计为:d∗d−2∗d∗r=1−2rdd∗d−2∗d∗r=1−2rd, 减少了99.2187%。

若以Adaw optimizer的视角来看,其优化器所需维护的states(梯度的一阶矩(均值)和二阶原始矩(有偏方差)),那么显存占用减少地更多。

三、效率分析

按照LoRA论文报告的结果,LoRA微调使得在训练GPT3 175B时的,显存消耗从1.2TB降至350GB;

当r=4r=4时,最终保存的模型从350GB降至35MB,极大降低了训练的开销。

下表,来源于LlamaFactory Github展示的微调LLM的最小硬件依赖估算值。

方法精度7B13B30B70B8x7B8x22B
FullAMP120GB240GB600GB1200GB900GB2400GB
Full1660GB120GB300GB600GB400GB1200GB
Freeze1620GB40GB80GB200GB160GB400GB
LoRA/GaLore/BAdam1616GB32GB64GB160GB120GB320GB
QLoRA810GB20GB40GB80GB60GB160GB
QLoRA46GB12GB24GB48GB30GB96GB
QLoRA24GB8GB16GB24GB18GB48GB

实际的使用情况:

  • 一张16GB显存 T4,仅够6B或7B的模型在batchsize为1时,进行int4 QLoRA,这还只是考虑输入输出有限时。
  • 一张32GB显存 V100,大致够6B或7B的模型在batchsize为1时,进行LoRA微调。
  • 一张80GB显存 A800,Qwen1.5 72B 进行int4 QLoRA,以及例如Baichuan13B / Qwen14B的LoRA微调
  • 2张A800 80GB显存,可以进行全参SFT或增量SFT

如何系统的去学习AI大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的所有 ⚡️ 大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

全套 《LLM大模型入门+进阶学习资源包↓↓↓ 获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

Logo

更多推荐