LoRA微调系列笔记

系列文章目录

第一章:LoRA微调系列笔记

第二章:Llama系列关键知识总结


文章目录

  • 系列文章目录
  • [LoRA:Low-Rank Adaptation of Large Language Models](#LoRA:Low-Rank Adaptation of Large Language Models)
  • [QLoRA: Efficient Finetuning of Quantized LLMs](#QLoRA: Efficient Finetuning of Quantized LLMs)
    • 摘要:
    • 重点
    • [QLoRA Finetuning](#QLoRA Finetuning)
    • [4-bit NormalFloat Quantization](#4-bit NormalFloat Quantization)
  • 引用

LoRA:Low-Rank Adaptation of Large Language Models

目的:

自然语言处理的一个重要范例是对一般领域数据进行大规模预训练pre-train,并经过微调(fine-tuning)适应特定的任务或领域。当我们fine-tuning较大的模型时,fine-tuning所有模型参数的完全微调变得不太可行。以GPT-3 175B为例,部署独立的微调模型实例,每个实例都有175B参数,这是非常昂贵的。我们提出了低秩自适应(Low-Rank Adaptation, LoRA) ,它冻结了预训练的模型权重,并将可训练的秩分解矩阵注入到Transformer架构的每一层,从而大大减少了下游任务的可训练参数的数量。与经过Adam微调的GPT-3 175B相比,LoRA可以将可训练参数的数量减少10,000倍,GPU内存需求减少3倍。

依据:

研究发现,pre-train得到的大模型往往存在过度参数化现象,即模型的权重矩阵的秩不是满秩的,且一般都较低,因此我们假设在fine-tuning过程中权重变化也具有较低的秩,从而提出了低秩适应(low - rank adaptation, LoRA)方法。LoRA允许我们通过优化密集层在适应过程中变化的秩分解矩阵来间接训练神经网络中的一些密集层,同时保持预训练的权值不变。

优势:

  1. 预先训练的模型可以共享,并用于为不同的任务构建许多小型LoRA模块。我们冻结共享模型,并通过替换图1中的矩阵A和B来fine-tuning模型实现有效地任务切换,从而显著降低存储需求和任务切换开销

  2. 当使用自适应优化器时,LoRA使训练更有效,并将硬件进入门槛降低了3倍,因为我们不需要计算梯度或维护大多数参数的优化器状态。相反,我们只优化注入的小得多的低秩矩阵。

  3. 我们简单的线性设计允许我们在部署时将可训练矩阵与冻结权重合并,通过构造与完全微调的模型相比,不会引入推理延迟

  4. LoRA与许多先前的方法正交,并且可以与其中的许多方法组合,例如前缀调优(prefix-tuning)。

方法

在适应特定任务时,研究表明,预训练的语言模型具有较低的"内在维度"(instrisic dimension),尽管随机投射到较小的子空间,但仍然可以有效地学习。对于预训练的权重矩阵 W 0 ∈ R d × k W_0\in\mathbb{R}^{d\times k} W0∈Rd×k,我们通过用低秩分解(low-rank decomposition)表示来约束其更新,
W 0 + Δ W = W 0 + B A {{W}{0}}+\Delta W={{W}{0}}+BA W0+ΔW=W0+BA

其中 B ∈ R d × r B\in\mathbb{R}^{d\times r} B∈Rd×r , A ∈ R r × k A\in\mathbb{R}^{r\times k} A∈Rr×k,秩 r ≪ m i n ( d , k ) r\ll \ min (d,k) r≪ min(d,k),在训练期间, W 0 W_0 W0被冻结,不接收梯度更新,而 A A A和 B B B包含可训练参数。注意, W 0 W_0 W0和 ∆ W = B A ∆W = BA ∆W=BA都用相同的输入相乘,它们各自的输出向量按坐标求和。当 h = W 0 x h = {W_0} x h=W0x时,修正后的正向传播表示为:
h = W 0 x + Δ W x = W 0 x + B A x h={{W}{0}}x+\Delta Wx={{W}{0}}x+BAx h=W0x+ΔWx=W0x+BAx

我们在图1中说明了我们的重新参数化。我们对 A A A使用随机高斯初始化,对 B B B使用零初始化,因此 ∆ W = B A ∆W = BA ∆W=BA在训练开始时为零。然后,我们将 ∆ W x ∆Wx ∆Wx以 α / r α/r α/r进行缩放(scale),其中 α α α是 r r r中的常数。当使用Adam进行优化时,如果我们适当地缩放初始化,则调整 α α α与调整学习率大致相同。因此,我们简单地将 α α α设置为我们尝试的第一个 r r r,而不调整它。当我们改变 r r r时,这种缩放有助于减少重新调整超参数的需要。

QLoRA: Efficient Finetuning of Quantized LLMs

摘要:

QLoRA是一种有效的微调方法,它减少了内存使用,足以在单个48GB GPU上微调65B参数模型,同时保留完整的16位微调任务的性能。QLORA通过冻结的4位量化预训练语言模型将梯度反向传播到低秩适配器(Low Rank Adapters, LoRA)QLoRA推出了许多创新,在不牺牲性能的情况下节省内存:

  1. 4-bit NormalFloat (NF4),一种新的数据类型,它是正态分布权重的信息理论上最优的;
  2. Double Quantization(双量化)通过量化量化常量来减少平均内存占用
  3. Paged Optimizers 用分页优化器管理显存峰值

重点

虽然最近的量化方法可以减少llm的内存占用,但这些技术仅适用于推理,不适应于训练期间。我们首次证明了在没有任何性能下降的情况下微调量化4-bit模型是可能的。我们的方法QLoRA将预训练模型量化到4位,然后添加一组可学习的Low-rank Adapter权重,这些权重通过量化权重的反向传播梯度进行调整。
关键: 4-bit NormalFloat:一种信息理论上最优的正态分布数据量化数据类型,比4位整数和4位浮点数产生更好的经验结果。

QLoRA Finetuning

QLoRA通过提出的4-bit NormalFloat(NF4)量化和双量化两种技术实现了高保真的4-bit 微调。此外,我们引入了分页优化器,以防止梯度检查点期间的内存峰值导致内存不足错误,这些错误通常会使大型模型难以在单个机器上进行微调。

QLoRA有一种低精度存储数据类型,在我们的例子中通常是4-bit,还有一种计算数据类型通常是BFloat16。在实践中,这意味着每当使用QLoRA权重张量时,我们将张量反量化为BFloat16,然后执行16位矩阵乘法。

4-bit NormalFloat Quantization

TODO

引用

Modest Understandings on LLM
LoRA及其变体概述:LoRA, DoRA, AdaLoRA, Delta-LoRA

相关推荐
AI趋势预见3 小时前
AI投资分析:用于股票评级的大型语言模型(LLMs)
人工智能·深度学习·神经网络·语言模型·llm·llms
量子位17 小时前
陈丹琦团队降本大法又来了:数据砍掉三分之一,性能却完全不减
人工智能·llm
tiger1192 天前
大模型与EDA工具
ai·llm·rtl·hdl·eda工具
zaim13 天前
计算机的错误计算(二百零一)
人工智能·ai·大模型·llm·错误·误差/error·幂指数
几米哥3 天前
Aider LLM性能排行榜最新动态:AI编程助手能力全面评测
开源·llm·aigc
孟郎郎3 天前
OSError: [WinError 126] 找不到指定的模块 backend_with_compiler.dll
人工智能·python·llm·conda·torch
致Great5 天前
如何从文档创建 RAG 评估数据集
人工智能·llm·nlp
阿正的梦工坊5 天前
AMP 混合精度训练中的动态缩放机制: grad_scaler.py函数解析( torch._amp_update_scale_)
人工智能·pytorch·llm·huggingface
视觉&物联智能5 天前
【杂谈】-DeepSeek如何以560万美元突破成本障碍
人工智能·深度学习·机器学习·ai·大模型·llm·deepseek
致Great6 天前
Agent未来已来?揭示LLM Agent技术架构与现实挑战
人工智能·llm·nlp