QLoRA原理分析

news/2025/1/16 1:55:00/文章来源:https://www.cnblogs.com/tgltt/p/18518597

  QLoRA是LoRA的量化版本,在LoRA的基础上,对权重W进行量化,如图2所示,以进一步减少对GPU显存的需求。

1、算法论文及代码

  • 论文

  《QLORA: Efficient Finetuning of Quantized LLMs》

    https://arxiv.org/pdf/2305.14314

  • 代码

    https://github.com/artidoro/qlora

2、QLoRA原理

  图1将QLoRA与其他微调方式进行了对比,从中可发现QLoRA相较LoRA,多了一个与CPU内存进行页交换的功能,从而能支持更大参数量的模型微调。QLoRA的核心实现,是在peft库里,qlora官方源码里只是去调用peft库实现的NF4类型,以及双重量化和训练模型时的页交换功能。

图1 QLoRA与其他微调方式对比

       图2从公式角度,对比了LoRA与QLoRA原理差异:

  1)W权重矩阵类型由FP16,转换为NF4(Normal Float 4bit),空间大约降为原来的1/4;

  2)A、B矩阵的类型,由FP16转换为BF16(Brain Float 16 bit),空间和原来一样,但浮点的表示范围比原来大了,但表示精度较原来有所下降。

 

图2 LoRA与QLoRA原理对比

       从图2中可看出,QLoRA的主要意图是进一步降低微调大模型所需的GPU显存,同时保证精度与原来差不多,实现这种效果的关键,在于NF4类型的引入。

3、NF4(Normal Float) 

  NF4是一种统计数据类型,只取固定的几个数值,这几个数值是某种分布的分位数,其数值大小在[-1.0, 1.0],如图13所示,NF4有16个分位数,权重W中的元素,经过归一化等处理后,只能取这16个数值中的某一个数值的索引

图3 NF4的取值范围

       图4以8位量化为例,描述了权重W中的元素,是如何转换为NF4数据类型。图14中的权重矩阵W形状为[1, 4],QLoRA首先对W进行分块处理,块(Block)大小为2,然后以块为单位,对每个块内的元素选取最大值,并用该最大值除以该块内所有元素,达到归一化的效果,最后查表,将W中所有元素,使用一个与元素值最相近的值的索引,来替换W中原有元素的值,由于表索引只有8位,相较原来的FP16或FP32,减少的存储空间相当可观。

 

图4 NF4的取值计算流程

4、双重量化(Double Quantization)

  第3小节描述的是W权重元素如何从FP16转换为4Bit的NF4,这只是第一次量化,随后还需进行引二次量化,因为第一次量化,需保存各分块内部元素的最大值c_max,以便于后续将NF4还原为FP16或BF16,这就导致会产生数量比较大的c_max集合,占用的存储空间也比较可观,比如一个模型参数有6B,假设每个参数的权重形状一样,均为[4096, 4096],以块大小64进行NF4转换,则可以得到64 * 64 * 109 个块最大值,如果块最大值的数据类型为FP16,则需占用2 * 64 * 64 * 109,约8192GB的存储空间,所以需要对c_max集合做量化,量化的方式参见图16,量化过程也是先分块,再在块内寻找最大值,然后归一化。

图5 双重量化之第二次量化过程

图6 c_max集合量化过程

       对c_max集合进行量化后,c_max集合占用的空间,从2*64*64*109=8,192GB,降到64*64*109 +4*109=4096+4 GB = 4,100GB,所需存储空间降幅(8192-4100)/8192≈50%。

       图7描述了QLoRA双重量化的较完整流程。

 

图7 QLoRA双重量化原理

 

 

关注更多安卓开发、AI技术、股票分析技术及个股诊断等理财、生活分享等资讯信息,请关注本人公众号(木圭龙的知识小屋)

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

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

相关文章

《使用Gin框架构建分布式应用》阅读笔记:p272-p306

《用Gin框架构建分布式应用》学习第15天,p272-p306总结,总35页。 一、技术总结 1.TDD(test-driven development) 虽然经常看到TDD这个属于,从本人的工作经历看,实际开发中用得相对较少。 2.unitest(单元测试) go语言开发中,使用testify进行单元测试开发。 (1)创建测试文件…

星型模型和雪花模型的区别》

星型模型和雪花模型是两种常用的数据仓库设计方法,主要差异包括:1.维度表的设计;2.数据冗余程度;3.查询性能;4.数据维护复杂度;5.扩展性和灵活性;6.实现难度;7.适用场景。星型模型以其简单高效的结构适用于大多数业务分析场景,而雪花模型则适用于更复杂的数据分析需求…

二阶系统对初始状态的响应

6. 二阶系统对初始状态的响应 当系统的输入 \(u(t)=0\) ,上式可以写成 \[\frac{\mathrm{d}z\left(t\right)}{\mathrm{d}t}=Az\left(t\right),\quad\text{其中} \quad \mathbf{A}=\begin{bmatrix}0&1\\-\omega_\mathrm{n}^2&-2\zeta\omega_\mathrm{n}\end{bmatrix} \]…

LoRA原理

图1描述了LoRA微调的原理,即在原模型的基础上,建立一个旁支模型,旁支模型由A和B两个小矩阵构成,且A@B的维度等于原模型的维度。图1 LoRA原理图1的LoRA原理,也可写成式2的等式,权重W的新状态W’,为图10左路WFP16与右路A FP16@B FP16乘积之和,其中W、A、B的上标FP16,意指…

PHP和Java在后端开发上有哪些不同_1

PHP和Java是两种广泛使用的后端开发语言,它们在多个方面具有显著的区别。PHP和Java在以下关键方面的不同:1.语言特性和开发环境;2.性能和速度;3.社区支持和资源;4.适用场景和项目类型;5.学习曲线和易用性。PHP作为一种动态脚本语言,被广泛用于快速开发和简单的网站项目,…

云行 | “云”启新篇 “智”赋百业,天翼云为金华数字经济发展注入新动能!

10月17日,以“婺云启航 翼领未来”为主题的天翼云中国行浙江金华站活动圆满落幕。金华市政府有关领导、合作伙伴企业代表等嘉宾出席活动,共话云计算发展新趋势,共探金华市产业数智化升级新路径。现场重磅举行金华市算力公共服务平台、金华市数据交易平台,以及天翼云息壤智算…

云行 | 雪域高原“智变”数智高地,天翼云助力西藏开启发展新程!

10月12日,以“国云注智 安全启航 赋能西藏数字经济新未来”为主题的天翼云中国行活动在西藏成功举办。10月12日,以“国云注智 安全启航 赋能西藏数字经济新未来”为主题的天翼云中国行活动在西藏成功举办。中共西藏自治区委员会网络安全和信息化委员会办公室副主任汪刘艳,西…

Python之pyserial模块 串口通信

python之pyserial模块 原文链接:https://www.cnblogs.com/sureZ-learning/p/17054481.htmlpyserial 模块封装了对串口的访问,兼容各种平台(Windows、Linux、MACOS等)。 其支持的特性如下: 所有平台基于类的接口相同 端口可以通过python来设置 支持不同数据长度、停止位、奇…

没意思。

本文来自博客园,作者:一石数字欠我15w!!!,转载请注明原文链接:https://www.cnblogs.com/52-qq/p/18518526

layui内置图标

本文来自博客园,作者:已不知落在何地,转载请注明原文链接:https://www.cnblogs.com/yongweijian/p/18518513