当前位置: 首页 > news >正文

Lora理解QLoRA

Parameter-Efficient Fine-Tuning (PEFT) :节约开销的做法,fine-tune少量参数,而不是整个模型;

Low-Rank Adaptation (LoRA) :是PEFT的一种;冻结原参数矩阵,只更新2个小参数矩阵。

原文经过对比实验,得出结论,在4个attention矩阵上都用LoRA,效果最好。

过参数化:

现在深度学习的参数动不动就有几百万,LLM的参数更是数十亿起步。许多工作[2]已经表明,深度学习的矩阵往往是过参数化的(over-parametrized)。特征的内在维度(intrinsic dimension)指的是在深度学习中的真实或潜在的低维结构或信息的维度。它表示特征中存在的有效信息的维度,与特征的实际维度可能不同。事实上许多问题的内在维度比人们认为的要小的多,而对于某个数据集,内在维度在不同参数量级的模型上差距并不大。这个内在维度指的是我们解决这个问题实际上需要的参数空间的维度,我们对模型的微调通常调整的也是这些低秩的内在维度。这个结论说明了两个现象:

  1. 一旦我们找到了足够解决问题的参数空间,再增加这个参数空间的大小并不会显著提升模型的性能。
  2. 一个过参数的模型的参数空间是有压缩的空间的,这也就是LoRA的提出动机

在初始化时, A 使用高斯初始化, 使用的零矩阵 进行的初始化。因为 r通常是一个非常小的值(实验证明1,2,4,8的效果就非常好),所以LoRA在训练时引入的参数量是非常小的,因此它的训练也是非常高效的,也不会带来显著的显存增加。

LoRA要求 A 或者 B其中之一必须使用零矩阵进行初始化,这样当数据第一次通过网络时,它和预训练的结果是一致的,这样便保证了模型在初始阶段便有一个不错的效果。

我们先思考两个问题:为何用数千的样本就能将一个数十亿参数的模型微调得比较好?为何大模型表现出很好的few-shot能力?
Aghajanyan的研究表明:预训练模型拥有极小的内在维度(instrisic dimension),即存在一个极低维度的参数,微调它和在全参数空间中微调能起到相同的效果
同时Aghajanyan发现在预训练后,越大的模型有越小的内在维度,这也解释了为何大模型都拥有很好的few-shot能力。

分析:

https://zhuanlan.zhihu.com/p/702629428

计算量并没有减少;

训练数据需求量减少,收敛加快:因为需要更新的参数量减少了很多;

显存量减少:原始训练,大约存储4*W的量(W+Gradient+α+β);用了LoRA,因为不更新原始大W了,后三者省掉,变成了1*W的量。

如上图,70B模型,Full&FP16时,是600GB显存,约等于70B*4*2Bytes=560GB;(Activation还得保存);LoRA时,是160GB,约等于70B*2Bytes=140GB;

代码的视频讲解:lora源码解读_哔哩哔哩_bilibili

初始化:

"self.weight.requires_grad = False": 冻结原始W大矩阵,不参与参数更新;

对应参数:

attention里的W,FFN里的W,在Lora训练里,都是被冻结的!)

综上,计算量并没有减少!

QLoRA:

(11 封私信 / 80 条消息) QLoRA - 搜索结果 - 知乎

非均匀量化

http://www.lryc.cn/news/522823.html

相关文章:

  • Linux测试处理fps为30、1920*1080、一分钟的视频性能
  • Flink (六):DataStream API (三) 窗口
  • MYSQL学习笔记(二):基本的SELECT语句使用(基本、条件、聚合函数查询)
  • PCL 点到面的ICP算法实现点云配准(C++详细过程版)
  • MarsCode青训营打卡Day1(2025年1月14日)|稀土掘金-16.最大矩形面积问题
  • 我的世界-与门、或门、非门等基本门电路实现
  • 【FISCO BCOS】二十三、部署WeBASE-Node-Manager
  • app版本控制java后端接口版本管理
  • Go语言strings包与字符串操作:从基础到高级的全面解析
  • 使用redis-cli命令实现redis crud操作
  • Ubuntu升级Linux内核教程
  • 5、docker-compose和docker-harbor
  • Leetcode3097:或值至少为 K 的最短子数组 II
  • HTML应用指南:利用GET请求获取全国特斯拉充电桩位置
  • 阿里云通义实验室自然语言处理方向负责人黄非:通义灵码2.0,迈入 Agentic AI
  • 第8篇:从入门到精通:掌握Python异常处理
  • 设计模式-结构型-装饰器模式
  • git详细使用教程
  • java实现word转html(支持docx及doc文件)
  • 搜维尔科技:Xsens人形机器人解决方案的优势
  • 【王树森搜索引擎技术】概要01:搜索引擎的基本概念
  • 《Java核心技术II》可中断套接字
  • 基于 Python 的深度学习的车俩特征分析系统,附源码
  • C#读写ini配置文件保存设置参数
  • SwanLab环境变量列表
  • 深度学习入门-CNN
  • 微服务网关,如何选择?
  • SpringBoot集成Mqtt服务实现消费发布和接收消费
  • 在Mac mini上实现本地话部署AI和知识库
  • 一个方法被多个线程同时调用,确保同样参数的调用只能有一个线程执行,不同参数的调用则可以多个线程同时执行