LLM:LoRA: Low-Rank Adaptation of Large Language Models

news2024/12/27 13:24:50

随着模型规模的不断扩大,微调模型的所有参数(所谓full fine-tuning)的可行性变得越来越低。以GPT-3的175B参数为例,每增加一个新领域就需要完整微调一个新模型,代价和成本很高。

为解决微调大规模语言模型到不同领域和任务的挑战,已有多种方案,比如部分微调、使用adapters和prompting。但这些方法存在如下问题:

  • Adapters引入额外的推理延迟 (由于增加了模型层数)
  • Prefix-Tuning难于训练,且预留给prompt的序列挤占了下游任务的输入序列空间,影响模型性能

Adapter Layers

在transformer block后面添加参数很少的层或者norm层。这样做,虽然tuning时要更新的参数少了,但由于加了网络深度,对于latency不友好。 

Prompt tuning/Prefix tuning

这个方法,一是很难优化,二是会降低下游能处理的序列长度。 Prefix-Tuning难于训练,模型性能也并非总是稳步提升。预留一些sequence做adaption会让处理下游任务的可用sequence长度变少,一定程度上会影响模型性能。

 在这里插入图片描述

[参数有效性学习-Adapter和Prefix-Tuning   以及   UniPELT框架https://wjn1996.blog.csdn.net/article/details/120607050#t16]

LoRA的思路

paper:Armen Aghajanyan的Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning. 
这篇文章尝试去回答一个问题:为什么用几千几百条样本就能去finetune一个百万量级的模型。
答案是:We empirically show that common pre-trained models have a very low intrinsic dimension; in other words, there exists a low dimension reparameterization that is as effective for fine-tuning as the full parameter space。即只有一些关键维度对finetune起效果。

这篇文章的作者还做了个实验:by optimizing only 200 trainable parameters randomly projected back into the full space, we can tune a RoBERTa model to achieve 90% of the full parameter performance levels on MRPC.将原始权重映射到一个很小的子集再映射回去,依然能训得很好。作者猜想:只需要更新低秩矩阵,在节省大量资源和时间的情况下,仍能获得不错的tuning效果。

考虑OpenAI对GPT模型的认知,GPT的本质是对训练数据的有效压缩,从而发现数据内部的逻辑与联系,LoRA的思想与之有相通之处,原模型虽大,但起核心作用的参数是低秩的,通过增加旁路,达到四两拨千斤的效果。

LoRA的思想也很简单,在原始PLM旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的 intrinsic rank 。训练的时候固定PLM的参数,只训练降维矩阵A与升维矩阵B。而模型的输入输出维度不变,输出时将BA与PLM的参数叠加。

用随机高斯分布初始化A,用0矩阵初始化B,保证训练的开始此旁路矩阵依然是0矩阵。

 

哪些参数应用LoRA

1 LoRA 已经被作者打包到了loralib中:pip install loralib
可以选择用loralib中实现的对应层来替换一些层。目前loralib只支持 nn.Linear、nn.Embedding 和 nn.Conv2d。

2 LoRA与Transformer的结合也很简单:可应用在attention层的 W_q, W_k, W_v, W_o 中的一个或多个。仅在QKV attention的计算中增加一个旁路,而不动MLP模块:We limit our study to only adapting the attention weights for downstream tasks and freeze the MLP modules (so they are not trained in downstream tasks) both for simplicity and parameter-efficiency.

 

对一个参数用比较大的rank更新,不如对多个参数用很小的rank更新,证明low_rank更新的合理性。

WHAT IS THE OPTIMAL RANK r FOR LORA?

 关于∆W

1, ∆W has a stronger correlation with W compared to a random matrix, indicating that ∆W amplifies some features that are already in W.
2,instead of repeating the top singular directions of W, ∆W only amplifies directions that are not
emphasized in W. 
3, the amplification factor is rather huge: 21.5 ≈ 6.91/0.32 for r = 4.

参数减少量

On GPT-3 175B, we reduce the VRAM consumption during training from 1.2TB to 350GB.
With r = 4 and only the query and value projection matrices being adapted, the checkpoint size is reduced by roughly 10,000× (from 350GB to 35MB). (We still need the 350GB model during deployment; however, storing 100 adapted models only requires 350GB + 35MB * 100 ≈ 354GB as opposed to 100 * 350GB ≈ 35TB.)

两种部署方法

方法1:将pretrained checkpoint统一部署,将为了特定任务训练的 BA 单独部署。这样做,当下游任务很多时,存储空间不会增加很多。
方法2:将W_0+BA的值直接算出来部署,此时和pretrained模型具有一样的参数量和latency。在生产环境部署时,LoRA可以不引入推理延迟,只需要将预训练模型参数 W0 与LoRA参数进行合并(也就是所谓的模型合并)即可得到微调后的模型参数: W=W0+BA ,在生产环境中像以前一样进行推理,即微调前计算 h=W0x ,现在计算 h=Wx ,没有额外延迟。现在不少模型仅发布LoRA权重,需要本地与基模型进行模型合并才能使用的原理就在于此。

from:https://blog.csdn.net/pipisorry/article/details/130978244

ref: [LoRA: Low-Rank Adaptation of Large Language Models]

[LoRA: Low-Rank Adaptation of Large Language Models 简读 - 知乎]**

代码: GitHub - microsoft/LoRA: Code for loralib

[微软LoRA: Low-Rank Adaptation of Large Language Models 代码解读 - 知乎]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

西南交通大学智能监测 培训课程练习3

2023.05.31培训 task1:MybatisPlus的使用 task2:SpringMVC常用接口开发 task3:JSON、接口测试 task4:SpringMVC拦截器与过滤器 目录 一、MybatisPlus 1.1DO类 1.2Mapper接口 1.3编写测试类测试 1.4Mybatis和MybatisPlus 二、…

Verilog学习笔记(串口RS232,基于野火教程)

目录 一、串口简介 二、设计与实现 串口数据回环顶层模块设计 串口接收模块uart_rx 串口发送模块uart_tx 顶层模块rs32_top 三、上板验证 一、串口简介 其中SPI和I2C为同步通信接口,双方时钟频率相同。而UART属于异步通信接口,没有统一时钟&…

旅游网项目(SpringBoot2.7.1 + SpringMVC + Mybatis-Plus3.5.0)

技术选型 JAVA版本:JDK17 数据库:Mysql5.7Navicat 后端框架:SpringBoot3.0.6 SpringMVC Mybatis-Plus3.5.0 权限控制:SpringSecurity 前端框架:AdminLTE2 模板引擎:Thymeleaf 工具类:发…

WIN10系统解决IDEA动不动就卡顿一下

1、前言 不知为啥,最近idea一直在卡顿,输入几个代码都会卡两秒,鼠标滚动文件卡两秒,点击打开文件卡两秒,就算是点击上方的工具栏,它也要等两秒才会出来菜单! 卡顿的时候整个idea直接无响应&a…

Java性能权威指南-总结3

Java性能权威指南-总结3 性能测试方法原则4:尽早频繁测试小结 Java性能调优工具箱操作系统的工具和分析CPU使用率 性能测试方法 原则4:尽早频繁测试 这是最后的原则。性能测试应该作为开发周期不可或缺的一部分。理想情况下,在代码提交到中心源代码仓库前&#xf…

【数据分享】1929-2022年全球站点的逐月最高气温(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据! 之前我们分享过1929-2022年全球气象站…

Win10搭建Nacos2.2.3集群版

Nacos是Alibaba提供的服务注册发现的管理平台,其优异的性能越来越受到广大开发者的喜爱,在构建分布式微服务项目中通常会首选Nacos作为注册/配置中心,在实际开发中为了提升服务的可用性和稳定性,通常都会搭建集群版,有…

《强风吹拂》呐!你喜欢跑步吗?

《强风吹拂》呐!你喜欢跑步吗? 三浦紫苑,1976生于东京。主要作品有《多田便利屋》《强风吹拂》《哪啊哪啊~神去村》《编舟记》等 林佩瑾、李建铨、杨正敏 译 文章目录 《强风吹拂》呐!你喜欢跑步吗?[toc]动漫摘录箱根驿…

Go Web下gin框架使用(一)

〇、前言 在前面,已经在这篇文章中详细地讨论了 gin 框架下的模板渲染问题,这篇文章主要对 gin 框架的使用进行讨论。 一、不同的路由 以下可以选择不同的路由进行渲染: r : gin.Default()type usr struct {Name string json:"name&…

八、go语言键盘输入和打印输出

键盘输入和打印输出 一、打印输出 1.1 fmt包 fmt包实现了类似C语言printf和scanf的格式化I/O。格式化verb(‘verb’)源自C语言但更简单。 详见官网fmt的API:https://golang.google.cn/pkg/fmt/ 1.2 导入包 import "fmt"1.3 常…

MyBatis——MyBatis项目搭建

但凡是框架,使用都是分三步走 1.导入jar文件,用maven导入 2.处理配置文件 3.开发业务代码 1.创建maven项目导入相关依赖 在pom文件中导入MyBatis相关依赖jar文件 安装lombok 在File->Settings Pugins 中安装lombok 要想启动lombok的话还需要在B…

GPT带你飞:Chat GPT吊打面试官,实时获取答案,分享调用OpenAI API key+完整源码脚本哦!

目录 福利:文末纯分享中文版CHAT GPT镜像,不存在魔法,纯分享免费使用 故事发生了 火爆GitHub 所以大家注意 网友看了之后调侃到,为了防止线上面试作弊,以后只好把面试都改成线下了。 如何安装 既然是调用GPT的AP…

nodejs基于vue的汽车订票客运站售票网站

使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理员负责审核会员充值,审核客户购票信息以及会员购票信息,管理客运班次与留言板,管理会员等级。客户查看客运班次,购买并支付车票&…

【Selenium】常用的Selenium基础使用模板和简单封装

前言 近来又用上了 Selneium ,因为反复用到,所以在这里将一些常用的方法封装起来,方便后续的使用。 在这篇文章中,我们将探讨 Selenium 的基础模板和基础封装,以便更好地理解 Selenium 的使用方法。 在Selenium的使用…

python基础----03-----if语句、while、for循环、range语句、continue和break

一 布尔类型和比较运算符 1.1 布尔类型和比较运算符 定义变量存储布尔类型数据:变量名称 布尔类型字面量。 布尔类型不仅可以自行定义同时也可以通过计算的来。也就是使用比较运算符进行比较运算得到布尔类型的结果。在C/C中,比较运算符称之为关系运算…

如何解决航空企业数字化转型中的痛点?

数字化时代,越来越多的企业开始关注数字技术,希望通过数字化改造提高企业效率和竞争力,为企业创造更多的商机和利润。今天就来同大家探讨航空领域,小程序在企业数字化转型中发挥的作用、 航空业员工端App的敏捷转型挑战 技术上的…

Java 异常机制:是Java 提供的一种识别及响应错误的一致性机制。

。 目录 友情提醒第一章、异常概述1.1)我们常说的异常是什么1.2)异常的作用1.3)Java异常体系和分类1.4)演示异常的产生 第二章、定义异常与抛出异常:throw2.1)自定义异常类:继承Exception或Run…

网络io与io多路复用select/poll/epoll

一、网络IO请求 网络I/O请求是指在计算机网络中,向其他主机或服务器发送请求或接收响应的操作。这些请求可以包括获取网页、下载文件、发送电子邮件等。网络I/O请求需要使用合适的协议和通信方式来进行数据传输,例如HTTP、FTP、SMTP等。 要完成一个完整…

字节面试过了,薪资都谈好了20K*13,结果挂在这里....

一般提到面试,肯定都会想问一下面试结果,我就大概的说一下面试结果,哈哈,其实不太想说,因为挺惨的,并没有像很多大佬一样 ”已拿字节阿里腾讯各大厂offer”,但是毕竟是自己的经历,无…