QLoRA:量化LLMs的有效调优方法

307 篇文章 2 订阅
304 篇文章 1 订阅

23年5月份来自华盛顿大学的的大模型调优论文“QLORA: Efficient Finetuning of Quantized LLMs“。

QLORA是一种有效的微调方法,可以减少内存使用,足以在单48GB GPU上微调65B参数模型,同时保留完整的16-位精度微调任务性能。QLORA通过冻结的4-位精度量化预训练语言模型将梯度反向传播到低秩适配器(LoRA)。提出的最好模型系列,作者命名为 Guanaco,在 Vicuna 基准测试中优于之前所有公开发布的模型,达到了 ChatGPT 性能水平的 99.3%,而只需要在单GPU 进行 24 小时微调。QLORA引入了许多创新,在不牺牲性能的情况下节省内存:(a)4-位NormalFloat(NF4),一种新数据类型,理论上是正态分布权重的最佳信息;(b)双量化(Double Quantization),量化其量化常量来减少平均内存占用;(c)分页优化器(Paged Optimizer)管理内存峰值。用QLORA对1000多个模型进行微调,对8个指令数据集、多模型类(LLaMA,T5)和模型规模(例如33B和65B参数模型)的指令遵循和聊天机器人性能进行详细分析。结果表明,QLoRA在小型高质量数据集上进行微调可以产生最优的结果,即使用比以前SoTA更小的模型也是如此。根据人工评估和 GPT-4 评估,对聊天机器人性能进行详细分析,结果表明 GPT-4 评估是人类评估的一个廉价且合理的替代方案。并且发现当前的聊天机器人基准测试不足以评估聊天机器人的性能水平。作者发布了所有模型和代码,包括用于 4 -位训练的 CUDA 内核。

相关工作

LLM的量化主要集中在推理时间的量化上。保持16-位LLM质量的主要方法集中在管理异常值特征(例如,SmoothQuant [66]和LLM.int8()函数 [14]),而其他方法则使用更复杂的分组方法[44,69]。有损量化方法研究常规舍入的折衷[13,71,47]或如何优化舍入决策以提高量化精度[18]。SwitchBack layers [65] 是唯一的工作通过在超过 1B 参数的模型规模量化权重研究反向传播。

除了低秩适配器 [28] (LoRA),已经提出了许多其他参数高效微调 (PEFT) 方法,例如提示微调 [48, 33, 34]、微调嵌入层输入 [1]、微调隐藏状态 (IA3) [37]、添加全连接层 [27]、调优偏差 [70]、学习基于 Fisher 信息的权重掩码 [54]。 以及各种方法的组合 [23]。该工作是表明 LoRA 适配器能够达到完整的 16- 位微调性能。

为了帮助预训练的LLM遵循提示中提供的说明,指令微调用各种数据源的输入输出对微调预训练的LLM,生成给定输入作为提示的输出。方法和数据集包括MetaICL [40],MetaTuning [73],InstructGPT [43],FLAN [62,12],PromptSource [3],Super-NaturalInstructions [61,50],Self-instruct [59],UnnaturalInstructions [26],OPT-IML [29],UnifiedSKG[67],OIG / Chip2 [32],Alpaca [55],Vicuna [10],Koala [20]和Self-instruct-GPT-4 [45]。

许多指令遵循模型的结构,是基于对话的聊天机器人,通常用来自人类反馈的强化学习 (RLHF) [11] 或从现有模型生成数据用 AI 模型反馈 (RLAIF) 进行训练 [5]。方法和数据集包括Anthropic-HH [2,4],Open Assistant [31],LaMDA [56]和Sparrow [21]。该工作不用强化学习,但最好的模型Guanaco对来自Open Assistant数据集的多轮聊天交互进行了微调,该数据集旨在用于RLHF训练[31]。为了评估聊天机器人,已经开发了用GPT-4而不是昂贵的人工标注的方法[10,45]。

QLoRA方法

QLORA通过两种技术(4位NormalFloat(NF4)量化和双量化)实现了高保真4-位微调。此外,还引入分页优化器,防止梯度检查时的内存峰值导致内存不足的错误,这些错误传统上使大模型难以在单台计算机上进行微调。

QLORA有一种低精度存储数据类型,文中例子中通常是4位,以及一种计算数据类型,通常是BFloat16。在实践中,这意味着每当用 QLORA 权重张量时,把该张量反量化为 BFloat16,然后执行 16 位矩阵乘法。NormalFloat (NF) 数据类型建立在分位数量化 (quantile quantization)[15] 的基础上,一种信息论上最优的数据类型,可确保每个量化bin从输入张量分配的相同数量的值。分位数量化的工作原理是通过经验累积分布函数估计输入张量的分位数。分位数量化的主要限制是分位数估计过程昂贵。因此,用快速分位数近似算法(例如SRAM分位数[15])来估计。由于这些分位数估计算法的近似性质,这种数据类型对异常值有较大的量化误差,而异常值通常是最重要的值。当输入张量来自相对一个量化常数固定的分布时,可以避免昂贵的分位数估计和近似误差。在这种情况下,输入张量具有相同的分位数,使得精确的分位数估计在计算上可行。

由于预训练神经网络权重通常具有标准方差σ、零均值的正态分布,因此调整σ将所有权重转换为单个固定分布,使分布完全适合该工作的数据类型范围。这个数据类型,设置任意范围 [−1, 1]。因此,数据类型的分位数和神经网络权重都需要规范化到此范围内。对于任意标准方差σ的范围 在[−1, 1] 的零均值正态分布,在信息理论上其最优的数据类型计算如下步骤:(1) 估计理论 N (0, 1) 分布的 2k + 1 个分位数,获得正态分布的 k- 位分位数量化数据类型,(2) 采用此数据类型并将其值归一化为 [−1, 1] 范围,(3) 通过“绝对最大重尺度化”,将其归一化为 [−1, 1] 范围,这样把输入权重张量进行量化。

一旦权重范围和数据类型范围匹配,就可以像往常一样量化。步骤(3)等效于重尺度化权重张量的标准差,匹配k-位数据类型的标准偏差。一个对称 k- 位量化问题,是这种方法没有对零的精确表示,这是填充元素和其他零值元素无错误量化的重要属性。为了确保 0 的离散零点并将所有 2^k 位用于 k- 位数据类型,估计两个范围(即负部分为 2^(k−1),正部分为 2^(k−1 )+ 1)的分位数 qi,创建非对称数据类型:然后统一这些 qi 集,并删除在两个集合中都出现的两零之一。将每个量化 bin 中具有相等预期值数目的结果数据类型称为 k-位NormalFloat (NFk),因为该数据类型对于以零为中心的正态分布数据在信息理论上是最优的。

双量化(DQ),即量化其量化常数以节省更多内存的过程。虽然精确的4-位量化需要很小的块[13],但也有相当大的内存开销。例如,使用 32 -位常量和 权重 块大小为 64,量化常数平均每参数增加 32/64 = 0.5 位。双量化有助于减少量化常数的内存占用。

更具体地说,双量化将第一个量化的量化常数视为第二个量化的输入。第二步产生量化的量化常数和第一级量化常数的第二级。用块大小为 256 的 8-位浮点数进行第二次量化,因为 8-位量化没有观察到性能下降,这与 Dettmers 和 Zettlemoyer [13] 的结果一致。平均而言,对于块大小为 64,此量化将每个参数的内存占用量从 32/64 = 0.5 位减少到 8/64 + 32/(64 · 256) = 0.127 位,每个参数减少 0.373 位。

用 NVIDIA 统一内存功能,在 CPU 和 GPU 之间自动进行页面到页面传输,以便在 GPU 偶尔内存不足的情况下进行无差错的 GPU 处理。该功能的工作方式类似于 CPU RAM 和磁盘之间的常规内存分页。用此功能为优化器状态分配分页内存,然后在 GPU 内存不足时自动退到 CPU RAM,并在优化器更新步骤需要内存时分页返回 GPU 内存。

总而言之,QLORA有一种存储数据类型(通常是4-位NormalFloat)和一种计算数据类型(16-位BrainFloat)。将存储数据类型反量化为计算数据类型,执行向前和向后传递, 但该文只计算16-位 BrainFloat 的 LoRA 参数权重梯度。如图是QLORA和其他微调方法的比较示意图:

[外链图片转存中…(img-dls499iG-1721405850744)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值