调教LLaMA类模型没那么难,LoRA将模型微调缩减到几小时

选自Lightning AI

作者:Sebastian Raschka
机器之心编译
编辑:赵阳

LoRA 微调方法,随着大模型的出现而走红。

进NLP群—>加入NLP交流群

最近几个月,ChatGPT 等一系列大语言模型(LLM)相继出现,随之而来的是算力紧缺日益严重。虽然人人都想打造专属于自己的大模型,但是能负担得起上亿参数模型训练的机构却寥寥无几。

在快速发展的人工智能领域,以高效和有效的方式使用大型语言模型正变得越来越重要。

LoRA(Low-Rank Adaption,低秩自适应) 作为微调 LLMs 一种比较出圈的技术,其额外引入了可训练的低秩分解矩阵,同时固定住预训练权重,从而大大减少了下游任务的可训练参数数量。

本文中,来自 Lightning AI 首席人工智能教育家 Sebastian Raschka 将带你了解如何以高效的方式用 LoRA 来微调 LLM。下面是全文内容。

为什么要进行微调?

预训练大语言模型通常被称为基础模型,这样称呼的原因是:大语言模型在各种任务中表现良好,可以将它们用作对目标任务进行微调的基础。正如 Sebastian Raschka 在上一篇博文《Understanding Parameter-Efficient Finetuning of Large Language Models: From Prefix Tuning to LLaMA-Adapters》中所讨论的,微调能够使模型适应目标域和目标任务。尽管如此,大模型在计算上的成本可能非常昂贵 —— 模型越大,更新其网络层的成本就越高。

如果不想将网络中所有的层都进行更新,可以使用诸如前缀微调和适配器之类的高效调参方法。如今,有一种更流行的微调技术:Hu 等人提出的低秩自适应(LoRA)。

什么是 LoRA?它是如何工作的?它与其他流行的微调方法相比如何?本文将回答所有这些问题。

886edb776ac0bce9cf76d1cbb76fefe5.png

 提高权重更新效率

论文《 LoRA: Low-Rank Adaptation of Large Language Models》提出将权重变化 ΔW 分解为秩较低的表示。(LoRA 不会直接分解矩阵,而是通过反向传播来学习分解的矩阵)。

在仔细研究 LoRA 之前,我们先简要解释一下规则微调期间的训练程序。首先是权重变化 ΔW。假设 W 表示给定神经网络层中的权重矩阵。然后,使用常规反向传播,我们可以获得权重更新 ΔW,它通常被计算为损失乘以学习率的负梯:

39bcd50c471896674aaeff5e9918acb6.png

然后,得到 ΔW 后,原始权重按如下公式更新:W'=W+ΔW。如下图所示(为了简单起见,省略了偏置矢量)。

或者,我们可以保持权重更新矩阵分离,并按如下公式计算输出:h=Wx+ΔWx:

c2a3f63c0c98cb86a1a0c726d39b4fa4.png

其中 x 表示输入,如下所示:

 8532ca822a00cecd17aafd76c6e407d0.png

当在神经网络中训练全连接(即 dense)层时,如上所示,权重矩阵通常具有全秩,这意味着矩阵不具有任何线性相关(即冗余)的行或列。相比之下,与全秩相比,低秩意味着矩阵具有冗余的行或列。

因此,尽管预训练模型的权重是满秩矩阵,但根据 Aghajanyan 等人的说法,LoRA 的作者指出预训练的大型语言模型在适应新任务时具有较低的内在维度。

低内在维度意味着数据可以由低维度空间有效地表示或近似,同时保留其大部分基本信息或结构。换句话说,这意味着可以将适应任务的新权重矩阵分解为低维(较小)矩阵,而不会丢失太多重要信息。

例如,假设 ΔW 是 A×B 维权重矩阵的权重更新矩阵,这个权重更新矩阵可以分解为两个较小的矩阵:ΔW=W_A W_B,其中 W_A 是 A×r 维矩阵,W_B 是 r×B 维矩阵。在这里,我们保持原始权重 W 冻结,并且只训练新的矩阵 W_A 和 W_B。如下图所示。

44bb08b0573c5d758a8332042924be32.png

选择秩

上图中的 r 是超参数,指定用于自适应的低秩矩阵的秩。r 越小,低秩矩阵越简单,在自适应过程中需要学习的参数越少,训练就更快,计算需求会相应的减少。然而,r 变小的弊端是,低秩矩阵捕获任务特定信息的能力降低。这可能导致较低的自适应质量,并且与较高的 r 相比,模型在新任务上可能表现不佳。总之,在 LoRA 中确定 r 的取值,需要在模型复杂性、自适应能力和拟合不足或拟合过度的风险之间进行权衡。因此,重要的是用不同的 r 值进行实验,以找到正确的平衡,从而在新任务中满足所需的性能。

 LoRA 实战

LoRA 的使用很直接,可以将其视为 LLM 中全连接层的前向传递修正版。伪代码如下所示:

5862152c4898407b1216a3f6a584847e.png

在上面的伪代码中,alpha 是一个缩放因子,用于调整组合结果的大小(原始模型输出加上低秩自适应)。这平衡了预训练模型的知识和新的任务特定适应 —— 默认情况下,alpha 通常设置为 1。还要注意,当 W_A 被初始化为小的随机权重时,W_B 被初始化为 0,从而使得0fb19fe49442a6bc67cee0b2935bea26.png,这意味着需要从原始权重开始训练。

参数效率

接下来说一说最棘手的问题:如果引入新的权重矩阵,参数如何才能有效?新的矩阵 W_A 和 W_B 可以非常小。例如,假设 A=100,B=500,那么 ΔW 的大小为 100×500=50000。如果将其分解为两个较小的矩阵,一个 100×5 维矩阵 W_A 和一个 5×500 维矩阵 W_B。这两个矩阵总共只有 5×100+5×500=3000 个参数。

 减少推理开销

在实践中,如果在如上所示的训练后保持原始权重 W 以及矩阵 W_A 和 W_B 处于分离状态,推理过程中就会额外产生效率损失,因为引入了额外的计算步骤。相反可以在训练后通过 W’=W+W_A・W_B 更新权重,这类似于前面提到的 W’=W+ΔW。

然而,保持权重矩阵 W_A 和 W_B 分离也可能有些优势。例如,假设希望保留预训练的模型作为各种客户的基础模型,并且希望从基础模型开始为每个客户创建一个微调的 LLM。在这种情况下,就不需要为每个客户存储完整的权重矩阵 W’。不然存储模型的所有权重 W’=W+W_A W_B 对于 LLM 来说可能非常大,因为 LLM 通常具有数十亿到数万亿的权重参数。因此,可以保留原始模型 W,只需要存储新的轻量级矩阵 W_A 和 W_B。

用具体的数字来说明的话,一个完整的 7B LLaMA checkpoint 需要 23 GB 的存储容量,而选择 r=8 的秩,则 LoRA 权重可以小到 8 MB。

 实践效果

LoRA 在实践中有多好,与完全微调和其他参数有效方法相比如何?根据 LoRA 的论文,在几个特定任务的基准测试中,使用 LoRA 的模型的建模性能略好于使用 Adapters、prompt tuning 或 prefix tuning 的模型。通常,LoRA 的性能甚至比微调所有层更好,如下面 LoRA 论文的注释表所示。

cdb397fb1ff1d8f2b7d0dd6560c5e49d.png

值得注意的是,LoRA 与其他微调方法正交,这意味着它也可以与 Adapters 或 prefix tuning 相结合。

LoRA & LLaMA

现在,让我们使用 LoRA 来微调 Meta 提出的 LLaMA 模型。

除了用于训练和运行 LLaMA 本身的代码(使用原始的 Meta-LLaMA 权重)外,还包含用于使用 LLaMA Adapter 和 LoRA 微调 LLaMA 的代码。

作者建议使用以下操作方法文件:

  • 下载预训练的权重:https://github.com/Lightning-AI/lit-llama/blob/main/howto/download_weights.md

  • 使用 LoRA 进行微调:https://github.com/Lightning-AI/lit-llama/blob/main/howto/finetune_lora.md

  • 使用适配器进行微调:https://github.com/Lightning-AI/lit-llama/blob/main/howto/finetune_adapter.md(可选,用于比较研究)

下一节将比较 7B LLaMA 基础模型与使用 LoRA 和 LLaMA Adapter 微调的 7B LLaMA 基础模型。(请注意,需要具有至少 24 GB RAM 的 GPU)。

计算性能基准

本节中,作者将比较 LLaMA 7B 基础模型与使用 LoRA 和 LLaMA Adapter 微调的基础模型的计算性能。

微调数据集是 Alpaca 52k 指令数据集,其结构如下:

fdd1f8fc1a5c69ee4646f55c4f080ea2.png

数据集是按照 Self-Instruct 论文中描述的方法生成的,由 49759 个训练样本和 2000 个验证样本组成。Self-Instruct 的流程可总结为 4 个步骤:

  • 种子任务池,包含一组人工编写的指令(本例中为 175 条)和样本指令;

  • 使用预训练的 LLM(如 GPT-3)来确定任务类别;

  • 给定新指令,让预训练的 LLM 生成响应结果;

  • 在将响应结果添加到任务池之前,先收集、剪枝和筛选响应结果。

2c655d9482044013da6a4d12a832fe98.png

Alpaca 52k 数据集是使用上述 Self-Instruct 程序收集的。但是,也可以使用(或将其与)替代数据集进行比较。例如,一个有趣的候选数据集是最近发布的开源 databricks-doolly-15k 数据集,该数据集包含 databricks 员工编写的约 15k 条指令 / 响应微调记录。Lit LLaMA 存储库包含一个数据集制备脚本,可以选择使用 Dolly 15k 数据集。

给定以下超参数设置(块大小、批大小和 LoRA 的 r),Adapter 和 LoRA 都可以以 bfloat-16 的混合精度,在具有 24 Gb RAM 的单个 GPU 上微调 7B 参数的 LLaMA 基本模型。

LoRA

a77301715189e531957482f3a71b3856.png

LaMA Adapter

ce5e71ab85d0bfa101461e6b02f4a2e6.png

如果代码将来发生变化,GitHub 上会同步更新代码(带有超参数设置)。

Adapter 在 A100 上使用了大约 22 Gb 的空间,并在 162 分钟内完成了 62400 次迭代。同样的迭代次数下,LoRA 使用了 21 Gb 的内存,在 192 分钟内完成。总之,同样基于 Lit-LLaMA 的 Adapter 和 LoRA 使用的 RAM 数量大致相同,训练时间大致相同。(请注意,这是在单个 GPU 上进行的,但如果有多个 GPU,只需将设备参数更改为 > 1 即可利用额外的加速!)相比之下,完全微调(LLaMA 7B 由 32 个 Transformer 块和 3 个全连接的输出层组成)需要至少 2 个具有至少 30Gb 的 GPU 和完全分片训练来分配权重。或者,可以使用 4 个 GPU,每个 GPU 的最大内存使用量为 22 Gb。在 4 个 GPU 上进行训练,训练耗时 1956 分钟。在单个 GPU 上至少需要 6000 分钟,这将比参数高效的 LLaMA Adapter 或 LoRA 代价昂贵 30-40 倍。

接下来,本文将介绍应用不同微调策略后的模型输出。

评估建模性能

有几种度量标准可用于评估 LLM 生成的文本。例如,困惑度、BLEU 和 ROUGE 分数是自然语言处理中用来评估 LLM 在各种任务中的表现的一些最常见的评估指标。然而,所有这些指标都有很大的缺点,人工评估仍然是黄金标准 —— 人工评估的缺点是创建成本高,难以自动化。简单起见,本文只关注定性比较,看看各种模型产生的一些输出。

为了对模型进行定性比较,本文将使用 “请解释权重衰减是如何工作的” 作为 prompt。

基准模型

f8d9cdfe3a6d17d4bda617762be11a97.png

请解释一下权重衰减是如何工作的…… 以及为什么它有时看起来有效,有时无效!

最简单地说,权重衰减从模型中删除特征(作为特征重要性的函数),它也被称为正则化。

推理时间 1:4.18 秒,11.95 个 token / 秒

正如我们所看到的,模型开始通过附加 “… 以及为什么它有时看起来有效,有时不起作用!” 来补全 prompt。这是因为基础模型只在下一个单词预测任务中进行了训练,没有经过专门的训练来处理指令。尽管如此,它试图在下面进一步解释。这种解释对正则化做出了一些正确的解释,但它并没有真正捕捉到权重衰减的关键机制。

LLaMA-Adapter

7d4aabb6efd9c425e456d79c9793ef99.png

权重衰减是一种惩罚词条字数的方法。通过选择单词较少的句子,模型更有可能选择那些可能提供重要信息的句子。

推理时间:总计 7.04 秒,14.21 个 tokens/sec。

使用的内存:13.56 GB。

这个解释在语法上是合理的,但也不一定是我们想要的。

LoRA

677a8cf2f889a8dd65841d3ae1575589.png

权重衰减是机器学习模型中用于减少过拟合的算法参数。这是一个调整模型权重的过程,以减少模型中不太重要的特征的影响并防止过拟合。权重衰减是通过向权重添加少量噪声来减少模型对训练数据的影响。这个过程鼓励模型更多地关注对预测任务更重要的特征。

推理时间:总计 3.25 秒,30.76 个 tokens/sec。

使用的内存:27.65 GB。

可以看到离期望的答案越来越近了;放到广义线性模型中,这种解释确实有意义,在广义线性模型中,会强迫模型学习与输入特征相乘结果较小的权重参数。在神经网络中,这通常会应用于模型中的所有权重参数。

上面的 LoRA 方法目前来说使用的内存最多。然而,如前所述,可以通过将 LoRA 权重与预训练的模型权重合并来减少这种内存使用。

由于评估 LLM 本身就是一个大课题,因此这种定性概述只能反应每个模型能力的一小部分。但这里的要点是,LoRA 可以用于以相对经济高效的方式在指令数据集上微调 LLM。

结论

本文讨论了低秩自适应(LoRA),这是一种参数完全微调的有效替代方案。使用 LoRA,可以在几个小时内在单个 GPU 上对 LLaMA 等相对较大的模型进行微调,这使得它对那些不想在 GPU 资源上花费数千美元的人特别有吸引力。LoRA 的特别之处在于,可以选择性地将新的 LoRA 权重矩阵与原始的预训练权重合并,这样在推理过程中就不会产生额外的开销或复杂性。

随着越来越多的 ChatGPT 或 GPT-4 开源替代品的出现,在特定的目标数据集或目标上微调和定制这些 LLM 将在各个研究领域和行业变得越来越有吸引力。而 LoRA 等参数有效的微调技术使微调更具资源效率和可访问性。Lit LLaMA 存储库中提供了诸如 LoRA 和 LLaMA Adapter 之类的参数高效微调技术。

原文链接:https://lightning.ai/pages/community/tutorial/lora-llm/


进NLP群—>加入NLP交流群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28921.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python文本清洗——有效管理大数据

Python文本清洗——有效管理大数据 Python是一种高级编程语言,因其简单易用和可扩展性而受到广泛的青睐。Python的强大功能让其成为一款优秀的文本编辑工具,特别是在处理大数据时更是如此。其中,Python文本清洗是将原始数据进行预处理和过滤…

百度回应文心一言被指“套壳”;​比尔·盖茨:AI 的时代已经开启;Apache Flink 1.17 发布|极客头条...

「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews) 一分钟速览新闻点&#…

数字孪生是什么

数字孪生(Digital Twins,数字镜像、数字化映射)是充分利用物理模型(物理对象的数字模型,不一定可视化,不一定是有形的模型)、传感器更新、运行历史等数据,集成多学科、多物理量、多尺…

数字孪生技术的实用价值在哪里?用四个案例为你解答

数字孪生技术目前已经广泛应用于农业、工业、教育、交通、医疗等多个领域,参考下面这些实际案例,就能明白数字孪生技术的实用价值了。 智慧农业 在农业上,利用数字孪生技术可以收集当前大棚内的实时温度、湿度等数据,还能利用物联…

数字孪生应用案例及常用技术

数字孪生作为新一代高新技术,结合人工智能、5G、区块链等前沿技术与各产业不断融合深化,有力推动各行业数字化转型的发展,实现智能互联网时代的升级与变革。那么数字孪生运用过程中,常用的技术有哪些呢? 一、建模 目前…

数字孪生技术(数字化双胞胎)

数值建模与仿真、机器学习以及将信息连接起来的物联网、云平台等领域,对这些领域内的数据和应用的集成能力同样是数字化双胞胎的关键技术。当前,数字化双胞胎的应用领域与范畴还在不断发展,以上各个领域的突破都可能会提高数字化双胞胎的实际…

数字孪生常用关键技术,有哪些软件?

数字孪生技术中本质是利用虚拟孪生体建模还原物理世界场景。传统建模技术速度慢、还原度低,而物理世界数据驱动的实时可视化开发门槛高、效率低和开发难度大。利用快速三维建模技术,可以轻松助力虚拟孪生场景的建模和物理世界数据实时驱动的可视化显示难…

一个大屏掌握港口全部信息的数字孪生技术

随着数据可视化技术的不断发展,数据可视化也不断被应用于各个行业,今天为大家介绍数据可视化在水利方面的应用,通过山海鲸可视化的智慧港口模板进行详细说明。 首先为大家介绍一下山海鲸可视化软件,山海鲸可视化是国内近几年新崛…

数字孪生定义、意义及案例

资料全部为网络搜集! 数字孪生 定义 数字孪生(Digital twin)是充分利用物理模型、传感器更新、运行历史等数据,集成多学科、多物理量、多尺度、多概率的仿真过程,在虚拟空间中完成映射,从而反映相对应的…

什么是 “数字孪生”

数字孪生(Digital Twin,DT)是一种超现实的概念, 其又被人命名为数字镜像或者数字化映射。 数字孪生简言之就是根据某个设备或系统的“物理实体”, 在虚拟世界中创造出一个与之完全相同的数字版的“虚拟模型”&#x…

行业前沿 | 数字孪生技术发展研究

随着无人机作业自主性、智能化、多任务等方面要求的提高,无人机从单机作业发展到集群作业,针对无人机集群协同算法开发过程中如何将集群协同算法从仿真环境迁移至真实环境且保证算法可靠性,一直是无人系统方向研究的重点。 数字孪生仿真以多…

数字孪生典型应用案例

数字孪生是大数据、人工智能、物联网等技术的蓬勃背景下,在传统仿真技术基础上衍生的新技术,作为一项虚实结合的数字化转型技术,现阶段正在各个领域加速落地。 随着城市数字模型的扩充与发展,数字孪生技术将覆盖城市的每条电力线…

数字孪生网络(DTN)架构

数字孪生网络(DigitalTwinNetwork)是以数字化方式创建物理网络实体的虚拟孪生体,且可与物理网络实体之间实时交互映射的网络系统,其核心要素为:数据、模型、交互、映射。 通过实时或者非实时的数据采集方式将物理网络层…

什么是数字孪生?有哪些关键技术?现在怎么样了?

导读:数字孪生技术都能解决哪些问题?如今在哪些领域正在被应用?本文带你详细梳理。 作者:梁乃明 方志刚 李荣跃 高岩松 等 来源:大数据DT(ID:bigdatadt) 基于数字孪生的智能制造系统…

一文读懂数字孪生的应用及意义

本文转自:https://baijiahao.baidu.com/s?id1612730768875518690&wfrspider&forpc 今天的数字化技术正在不断地改变每一个企业。未来,所有的企业都将成为数字化的公司,这不只是要求企业开发出具备数字化特征的产品,更指的…

数字孪生--技术介绍

数字孪生--技术介绍 1 概念23 示例4 期刊《基于数字孪生的复杂产品设计制造一体化开发框架与关键技术》[1]参考 1 概念 数字孪生(Digital Twin)是充分利用物理模型、传感器更新、运行历史等数据,集成多学科、多物理量、多尺度、多概率的仿真…

数字孪生系统(开发)

数字孪生,也有叫智慧城市,智慧园区,智慧一切,作为一名合格的开发者,这些都是被冠以的名头,我们开发者统称 数据可视化。 做一个可视化系统,其实基础就是GIS系统,GIS分二维GIS&#…

阿里重大职级调整,P9、P10成为历史

推荐专门分享AI技术的公众号 关注后,回复:ChatGPT ,领取账号 阿里又要拥抱变化了! 近日,网上爆料称阿里将启动近年来最大的人力制度改革,涉及员工层级体系和员工绩效等多个核心事项,目前已形成一…

【AICG】【Midjourney】AI自动生成图片的初接触

背景 现在是AI 比较流行,公司也推荐学习和了解AI的相关东西。 公司的内部培训中涉及到了Midjourney的简单讲解。 效果 由于我的账号注册的时候过了free窗口期: 现在要我花钱订阅: 只能看看其他人的帖子过过AI生成的瘾。 如图所示&#x…

印象笔记如何取消首字母大写

使用印象Note,在英文状态下总是自动开头字母大写,如何关闭? 我用的是OS X,苹果系统,在系统偏好设置——键盘——文本 取消勾选 自动纠正拼写、自动大写字词的首字母 即可